diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml index 57bdc60f2f9e..c1e6a0480cb2 100644 --- a/.github/ISSUE_TEMPLATE/bug.yaml +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -1,7 +1,7 @@ name: 🐛 Bug Report description: | Describe your problem here. -labels: [bug] +type: "bug" body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 18489e986b0c..2ce3e4bd9aed 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -1,7 +1,7 @@ name: 🚀 Feature Request description: | What feature would you like to see added to Mixxx? -labels: [feature] +type: "feature" body: - type: markdown attributes: diff --git a/.github/workflows/download_cleanup.yml b/.github/workflows/download_cleanup.yml index 5e79705e9e01..724614343ffa 100644 --- a/.github/workflows/download_cleanup.yml +++ b/.github/workflows/download_cleanup.yml @@ -27,71 +27,21 @@ jobs: mkdir empty_folder echo 2.5.1 >> include_file.txt echo 2.5.1/manifest.json >> include_file.txt - echo 2.5.1/mixxx-2.6-alpha-174-g2c2dda9781-win64* >> include_file.txt - echo AzureCodeSigning >> include_file.txt - echo AzureCodeSigning/manifest.json >> include_file.txt - echo AzureCodeSigning/mixxx-2.6-alpha-* >> include_file.txt - echo CAStreamBasicDescription >> include_file.txt - echo CAStreamBasicDescription/manifest.json >> include_file.txt - echo CAStreamBasicDescription/mixxx-2.4.1-46-* >> include_file.txt - echo PR_13709 >> include_file.txt - echo PR_13709/manifest.json >> include_file.txt - echo PR_13709/mixxx-2.4.1-81-* >> include_file.txt - echo azure_signing_update >> include_file.txt - echo azure_signing_update/manifest.json >> include_file.txt - echo azure_signing_update/mixxx-2.4.1-61-* >> include_file.txt - echo chore >> include_file.txt - echo chore/upgrade-macos13-xcode15.2 >> include_file.txt - echo chore/upgrade-macos13-xcode15.2/manifest.json >> include_file.txt - echo chore/upgrade-macos13-xcode15.2/mixxx-2.6-alpha-76-* >> include_file.txt - echo daschuer-patch-1 >> include_file.txt - echo daschuer-patch-1/manifest.json >> include_file.txt - echo daschuer-patch-1/mixxx-2.6-alpha-284-* >> include_file.txt - echo dependabot >> include_file.txt - echo dependabot/github_actions >> include_file.txt - echo dependabot/github_actions/actions >> include_file.txt - echo dependabot/github_actions/actions/stale-6 >> include_file.txt - echo dependabot/github_actions/actions/stale-6/manifest.json >> include_file.txt - echo dependabot/github_actions/actions/stale-6/mixxx-2.4-alpha-1318-* >> include_file.txt - echo dependabot/github_actions/actions/upload-artifact-3.1.2 >> include_file.txt - echo dependabot/github_actions/actions/upload-artifact-3.1.2/manifest.json >> include_file.txt - echo dependabot/github_actions/actions/upload-artifact-3.1.2/mixxx-2.3.3-117-* >> include_file.txt - echo fix-14326 >> include_file.txt - echo fix-14326/manifest.json >> include_file.txt - echo fix-14326/mixxx-2.5.0-68-* >> include_file.txt - echo inpulse >> include_file.txt - echo inpulse/manifest.json >> include_file.txt - echo inpulse/mixxx-2.* >> include_file.txt - echo pr >> include_file.txt - echo pr/13709 >> include_file.txt - echo pr/13709/manifest.json >> include_file.txt - echo pr/13709/mixxx-2.4.1-81-* >> include_file.txt - echo resolve-from-urls-2.5 >> include_file.txt - echo resolve-from-urls-2.5/manifest.json >> include_file.txt - echo resolve-from-urls-2.5/mixxx-2.5-beta-100-* >> include_file.txt - echo revert-13208-gh13206 >> include_file.txt - echo revert-13208-gh13206/mixxx-2.4.1-5-gc71a48b76e-* >> include_file.txt - echo revert-13271-revert-13208-gh13206 >> include_file.txt - echo revert-13271-revert-13208-gh13206/mixxx-2.4.1-6-* >> include_file.txt - echo rg-use-opengl-node-and-add-shaders >> include_file.txt - echo rg-use-opengl-node-and-add-shaders/manifest.json >> include_file.txt - echo rg-use-opengl-node-and-add-shaders/mixxx-2.6-alpha-* >> include_file.txt - echo traktor-s3-updates >> include_file.txt - echo traktor-s3-updates/manifest.json >> include_file.txt - echo traktor-s3-updates/mixxx-2.6-alpha-* >> include_file.txt - echo ts_source_copy_check >> include_file.txt - echo ts_source_copy_check/manifest.json >> include_file.txt - echo ts_source_copy_check/mixxx-2.4.1-42-* >> include_file.txt - echo tsan-fix-13893 >> include_file.txt - echo tsan-fix-13893/manifest.json >> include_file.txt - echo tsan-fix-13893/mixxx-2.5-beta-83-* >> include_file.txt - echo tsan-fix-13895 >> include_file.txt - echo tsan-fix-13895/manifest.json >> include_file.txt - echo tsan-fix-13895/mixxx-2.5-beta-83-* >> include_file.txt - echo waveformwidgetinfo >> include_file.txt - echo waveformwidgetinfo/mixxx-2.5-alpha-3* >> include_file.txt rsync --verbose --archive --times --recursive --delete --include-from=include_file.txt --exclude=* "empty_folder/" "${SSH_USER}@${SSH_HOST}:${DESTDIR}/snapshots/" env: DESTDIR: public_html/downloads SSH_HOST: downloads-hostgator.mixxx.org SSH_USER: mixxx + + - name: Move manifest + if: env.SSH_AUTH_SOCK != null + run: | + ssh "${SSH_USER}@${SSH_HOST}" " + set -euo pipefail + mv ${DESTDIR}/releases/2.5.3-3-g7a940a8588/manifest.json ${DESTDIR}/releases/2.5.3/manifest.json + rm -rf ${DESTDIR}/releases/2.5.3-3-g7a940a8588 + " + env: + DESTDIR: public_html/downloads + SSH_HOST: downloads-hostgator.mixxx.org + SSH_USER: mixxx diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3b77b37d6090..f9c7f3edf76a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -126,7 +126,7 @@ repos: - id: prettier types: [yaml] - repo: https://github.com/qarmin/qml_formatter.git - rev: 37c2513b1b8275a475a160ed2f5b044910335d5f # No release tag yet including #6 fix + rev: 706250038bb565f4c630ca3aab09f764faabae67 # No release tag yet including #9 fix hooks: - id: qml_formatter - repo: https://github.com/BlankSpruce/gersemi @@ -168,6 +168,8 @@ repos: language: system types: [text] files: ^.*\.qml$ + stages: + - manual - id: metainfo name: metainfo description: Update AppStream metainfo releases from CHANGELOG.md. diff --git a/.tx/config b/.tx/config index 2fec46c1f484..7b5c8801a000 100644 --- a/.tx/config +++ b/.tx/config @@ -1,7 +1,7 @@ [main] host = https://www.transifex.com -[o:mixxx-dj-software:p:mixxxdj:r:mixxx2-6] +[o:mixxx-dj-software:p:mixxxdj:r:mixxx2-7] file_filter = res/translations/mixxx_.ts source_file = res/translations/mixxx.ts source_lang = en diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d90207fcbf2..bb0f8501bef3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## [2.7.0](https://github.com/mixxxdj/mixxx/milestone/47) (Unreleased) + ## [2.6.0](https://github.com/mixxxdj/mixxx/milestone/44) (Unreleased) ### STEM file support diff --git a/CMakeLists.txt b/CMakeLists.txt index b59554b1de16..e75481865d73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -319,14 +319,13 @@ endif() include(CMakeDependentOption) option(QT6 "Build with Qt6" ON) - -# Because of multiple concurrent definition of symbols caused by the rendergraph -# compile definition we need to disable QML by default. This avoids the risk of -# undefined behaviour in a stable build. -# See: https://github.com/mixxxdj/mixxx/issues/14766 -# Once this is fixed we can revert the commit introducing this. -option(QML "Build with QML" OFF) - +cmake_dependent_option( + QML + "Build with QML" + ON + "QT6" + OFF +) option(QOPENGL "Use QOpenGLWindow based widget instead of QGLWidget" ON) if(QOPENGL) @@ -431,9 +430,9 @@ elseif(APPLE) endif() endif() -project(mixxx VERSION 2.6.0 LANGUAGES C CXX) +project(mixxx VERSION 2.7.0 LANGUAGES C CXX) # Work around missing version suffixes support https://gitlab.kitware.com/cmake/cmake/-/issues/16716 -set(MIXXX_VERSION_PRERELEASE "beta") # set to "alpha" "beta" or "" +set(MIXXX_VERSION_PRERELEASE "alpha") # set to "alpha" "beta" or "" set(CMAKE_PROJECT_HOMEPAGE_URL "https://www.mixxx.org") set( @@ -1193,6 +1192,7 @@ add_library( src/effects/backends/builtin/metronomeclick.cpp src/effects/backends/builtin/moogladder4filtereffect.cpp src/effects/backends/builtin/compressoreffect.cpp + src/effects/backends/builtin/autogaincontroleffect.cpp src/effects/backends/builtin/parametriceqeffect.cpp src/effects/backends/builtin/phasereffect.cpp src/effects/backends/builtin/reverbeffect.cpp @@ -1657,6 +1657,7 @@ add_library( src/widget/wbasewidget.cpp src/widget/wbattery.cpp src/widget/wbeatspinbox.cpp + src/widget/wbpmeditor.cpp src/widget/wcollapsiblegroupbox.cpp src/widget/wcolorpicker.cpp src/widget/wcolorpickeraction.cpp @@ -1729,6 +1730,8 @@ add_library( src/widget/wwidget.cpp src/widget/wwidgetgroup.cpp src/widget/wwidgetstack.cpp + src/controllers/scripting/javascriptplayerproxy.cpp + src/controllers/scripting/javascriptplayerproxy.h ) set(MIXXX_COMMON_PRECOMPILED_HEADER src/util/assert.h) set( @@ -2800,6 +2803,13 @@ if(BUILD_TESTING) add_executable(mixxx-test ${src-mixxx-test}) + if(HID) + target_sources( + mixxx-test + PRIVATE src/test/controller_hid_reportdescriptor_test.cpp + ) + endif() + if(QML) target_sources( mixxx-test @@ -3411,8 +3421,8 @@ else() set(CMAKE_FIND_FRAMEWORK FIRST) endif() set(OpenGL_GL_PREFERENCE "GLVND") - find_package(OpenGL REQUIRED) if(EMSCRIPTEN) + find_package(OpenGL REQUIRED) # Emscripten's FindOpenGL.cmake does not create OpenGL::GL target_link_libraries(mixxx-lib PRIVATE ${OPENGL_gl_LIBRARY}) target_compile_definitions(mixxx-lib PUBLIC QT_OPENGL_ES_2) @@ -3424,7 +3434,12 @@ else() PUBLIC -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2 -sFULL_ES2=1 ) else() - target_link_libraries(mixxx-lib PRIVATE OpenGL::GL) + find_package(WrapOpenGL REQUIRED) + if(OPENGL_opengl_LIBRARY) + target_link_libraries(mixxx-lib PRIVATE OpenGL::OpenGL) + else() + target_link_libraries(mixxx-lib PRIVATE OpenGL::GL) + endif() endif() if(UNIX AND QGLES2) target_compile_definitions(mixxx-lib PUBLIC QT_OPENGL_ES_2) @@ -3567,6 +3582,15 @@ if(QML) set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/qml) qt_add_library(mixxx-qml-lib STATIC) + + if(WIN32) + target_compile_definitions(mixxx-qml-lib PUBLIC __WINDOWS__) + endif() + + if(ENGINEPRIME) + target_compile_definitions(mixxx-qml-lib PUBLIC __ENGINEPRIME__) + endif() + foreach(component ${QT_COMPONENTS}) target_link_libraries( mixxx-qml-lib @@ -3639,23 +3663,31 @@ if(QML) src/qml/qmlapplication.cpp src/qml/qmlautoreload.cpp src/qml/qmlbeatsmodel.cpp - src/qml/qmlcuesmodel.cpp - src/qml/qmlcontrolproxy.cpp + src/qml/qmlchainpresetmodel.cpp src/qml/qmlconfigproxy.cpp + src/qml/qmlcontrolproxy.cpp + src/qml/qmlcuesmodel.cpp src/qml/qmldlgpreferencesproxy.cpp src/qml/qmleffectmanifestparametersmodel.cpp - src/qml/qmleffectsmanagerproxy.cpp src/qml/qmleffectslotproxy.cpp + src/qml/qmleffectsmanagerproxy.cpp src/qml/qmllibraryproxy.cpp + src/qml/qmllibrarysource.cpp + src/qml/qmllibrarysourcetree.cpp src/qml/qmllibrarytracklistmodel.cpp + src/qml/qmlmixxxcontrollerscreen.cpp src/qml/qmlplayermanagerproxy.cpp src/qml/qmlplayerproxy.cpp + src/qml/qmlsidebarmodelproxy.cpp + src/qml/qmllibrarytracklistcolumn.cpp + src/qml/qmltrackproxy.cpp src/qml/qmlvisibleeffectsmodel.cpp - src/qml/qmlchainpresetmodel.cpp - src/qml/qmlwaveformoverview.cpp - src/qml/qmlmixxxcontrollerscreen.cpp src/qml/qmlwaveformdisplay.cpp + src/qml/qmlwaveformoverview.cpp src/qml/qmlwaveformrenderer.cpp + src/qml/qmlsettingparameter.cpp + src/qml/qmltrackproxy.cpp + src/qml/qmlsoundmanagerproxy.cpp src/waveform/renderers/allshader/digitsrenderer.cpp src/waveform/renderers/allshader/waveformrenderbeat.cpp src/waveform/renderers/allshader/waveformrenderer.cpp @@ -4117,6 +4149,7 @@ elseif(UNIX AND NOT APPLE AND NOT EMSCRIPTEN) if(${X11_FOUND}) target_include_directories(mixxx-lib SYSTEM PUBLIC "${X11_INCLUDE_DIR}") target_link_libraries(mixxx-lib PRIVATE "${X11_LIBRARIES}") + target_compile_definitions(mixxx-lib PUBLIC __X11__) endif() find_package(Qt${QT_VERSION_MAJOR} COMPONENTS DBus REQUIRED) target_link_libraries(mixxx-lib PUBLIC Qt${QT_VERSION_MAJOR}::DBus) @@ -4331,6 +4364,9 @@ if(RUBBERBAND) find_package(rubberband REQUIRED) target_link_libraries(mixxx-lib PRIVATE rubberband::rubberband) target_compile_definitions(mixxx-lib PUBLIC __RUBBERBAND__) + if(QML) + target_compile_definitions(mixxx-qml-lib PUBLIC __RUBBERBAND__) + endif() target_sources( mixxx-lib PRIVATE @@ -4825,12 +4861,14 @@ if(HID) target_sources( mixxx-lib PRIVATE + src/controllers/controllerhidreporttabsmanager.cpp src/controllers/hid/hidcontroller.cpp src/controllers/hid/hidiothread.cpp src/controllers/hid/hidioglobaloutputreportfifo.cpp src/controllers/hid/hidiooutputreport.cpp src/controllers/hid/hiddevice.cpp src/controllers/hid/hidenumerator.cpp + src/controllers/hid/hidreportdescriptor.cpp src/controllers/hid/hidusagetables.cpp src/controllers/hid/legacyhidcontrollermapping.cpp src/controllers/hid/legacyhidcontrollermappingfilehandler.cpp @@ -4893,7 +4931,14 @@ if(VINYLCONTROL) add_library(mixxx-xwax STATIC EXCLUDE_FROM_ALL) target_sources( mixxx-xwax - PRIVATE lib/xwax/timecoder.c lib/xwax/lut.c lib/xwax/pitch_kalman.c + PRIVATE + lib/xwax/timecoder.c + lib/xwax/timecoder_mk2.c + lib/xwax/lut.c + lib/xwax/lut_mk2.c + lib/xwax/filters.c + lib/xwax/delayline.c + lib/xwax/pitch_kalman.c ) target_include_directories(mixxx-xwax SYSTEM PUBLIC lib/xwax) target_link_libraries(mixxx-lib PRIVATE mixxx-xwax) diff --git a/LICENSE b/LICENSE index 006f0725fcc2..1bfecb19b6d8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Mixxx 2.6-beta, Digital DJ'ing software. +Mixxx 2.7-alpha, Digital DJ'ing software. Copyright (C) 2001-2025 Mixxx Development Team Mixxx is free software; you can redistribute it and/or modify diff --git a/lib/xwax/delayline.c b/lib/xwax/delayline.c new file mode 100644 index 000000000000..853abde3ee92 --- /dev/null +++ b/lib/xwax/delayline.c @@ -0,0 +1,115 @@ +#include +#include +#include + +#include "delayline.h" + +/* + * Gets the sample at index i in the delayline + */ + +int *delayline_at(struct delayline *delayline, ptrdiff_t i) +{ + if (!delayline) { + fprintf(stderr, "%s: Null pointer exception\n", __func__); + return NULL; + } + + if (delayline->current < 0) + delayline->current += delayline->size; + + ptrdiff_t index = delayline->current + i; + + if ((size_t)index >= delayline->size) + index -= delayline->size; + + return &delayline->array[index]; +} + +/* + * Initializes the delayline + */ + +void delayline_init(struct delayline *delayline) +{ + if (!delayline) { + fprintf(stderr, "%s: Null pointer exception\n", __func__); + return; + } + + delayline->size = DELAYLINE_SIZE; + delayline->current = delayline->size -1; + + for (int i = 0; i < DELAYLINE_SIZE; i++) + delayline->array[i] = 0; +} + +/* + * Decrements the delayline pointer + */ + +void delayline_decrement(struct delayline *delayline) +{ + if (!delayline) { + fprintf(stderr, "%s: Null pointer exception\n", __func__); + return; + } + + delayline->current--; + if (delayline->current < 0) + delayline->current += delayline->size; +} + +/* + * Pushes a new sample to the delayline + */ + +void delayline_push(struct delayline *delayline, int sample) +{ + if (!delayline) { + fprintf(stderr, "%s: Null pointer exception\n", __func__); + return; + } + + delayline_decrement(delayline); + delayline->array[delayline->current] = sample; +} + +/* + * Computes the average value of all samples in the delayline + */ + +int delayline_avg(struct delayline *delayline) +{ + if (!delayline) { + fprintf(stderr, "%s: Null pointer exception\n", __func__); + return -EINVAL; + } + + int sum = 0; + + for (int i = 0; i < delayline->size; i++) + sum += delayline->array[i]; + + return (sum / delayline->size); +} + +/* + * Prints the delayline starting at the current pointer + */ + +void delayline_print(struct delayline *delayline) +{ + if (!delayline) { + fprintf(stderr, "%s: Null pointer exception\n", __func__); + return; + } + + fprintf(stdout, "{"); + for (int i = 0; i < delayline->size; i++) { + fprintf(stdout, "%d", *delayline_at(delayline, i)); + if (i < delayline->size - 1) + fprintf(stdout, ", "); + } + fprintf(stdout, "}\n"); +} diff --git a/lib/xwax/delayline.h b/lib/xwax/delayline.h new file mode 100644 index 000000000000..c41fab96751b --- /dev/null +++ b/lib/xwax/delayline.h @@ -0,0 +1,21 @@ +#ifndef DELAYLINE_H + +#define DELAYLINE_H + +#include + +#define DELAYLINE_SIZE 5 + +struct delayline { + size_t size; + int array[DELAYLINE_SIZE]; + ptrdiff_t current; +}; + +void delayline_init(struct delayline *delayline); +int *delayline_at(struct delayline *delayline, ptrdiff_t i); +void delayline_push(struct delayline *delayline, int sample); +int delayline_avg(struct delayline *delayline); +void delayline_print(struct delayline *delayline); + +#endif /* end of include guard DELAYLINE_H */ diff --git a/lib/xwax/filters.c b/lib/xwax/filters.c new file mode 100644 index 000000000000..d528a47aa3ee --- /dev/null +++ b/lib/xwax/filters.c @@ -0,0 +1,108 @@ + +#include +#include +#include +#include + +#include "filters.h" + +/* + * Initializes the exponential moving average filter. + */ + +void ema_init(struct ema_filter *filter, const double alpha) +{ + if (!filter) { + errno = EINVAL; + perror(__func__); + return; + } + + filter->alpha = alpha; + filter->y_old = 0; +} + +/* + * Computes an exponential moving average with the possibility to weight newly added + * values with a factor alpha. + */ + +int ema(struct ema_filter *filter, const int x) +{ + if (!filter) { + errno = EINVAL; + perror(__func__); + return -EINVAL; + } + + int y = filter->alpha * x + (1 - filter->alpha) * filter->y_old; + filter->y_old = y; + + return y; +} + +/* + * Initializes the derivative filter. + */ + +void derivative_init(struct differentiator *filter) +{ + if (!filter) { + errno = EINVAL; + perror(__func__); + return; + } + + filter->x_old = 0; +} + +/* + * Computes a simple derivative, i.e. the slope of the input signal without gain compensation. + */ + +int derivative(struct differentiator *filter, const int x) +{ + int y = x - filter->x_old; + filter->x_old = x; + + return y; +} + +/* + * Initializes the RMS filter + */ + +void rms_init(struct root_mean_square *filter, const float alpha) +{ + if (!filter) { + errno = EINVAL; + perror(__func__); + return; + } + + filter->squared_old = 0; + filter->alpha = alpha; +} + +/* + * Computes the RMS value over a running sum. + * The 1.0 > alpha > 0 determines the smoothness of the result: + */ + +int rms(struct root_mean_square *filter, const int x) +{ + if (!filter) { + errno = EINVAL; + perror(__func__); + return -EINVAL; + } + + /* Compute squared value */ + unsigned long long squared = (unsigned long long)x * (unsigned long long)x; + + /* Apply EMA filter to squared values */ + filter->squared_old = (1.0 - filter->alpha) * filter->squared_old + filter->alpha * squared; + + /* Take square root at the end */ + return (int)sqrt(filter->squared_old); +} diff --git a/lib/xwax/filters.h b/lib/xwax/filters.h new file mode 100644 index 000000000000..f3e79f541eff --- /dev/null +++ b/lib/xwax/filters.h @@ -0,0 +1,28 @@ +#ifndef FILTERS_H + +#define FILTERS_H + +struct ema_filter { + double alpha; + int y_old; +}; + +void ema_init(struct ema_filter *, const double alpha); +int ema(struct ema_filter *, const int x); + +struct differentiator { + int x_old; +}; + +void derivative_init(struct differentiator *filter); +int derivative(struct differentiator *, const int x); + +struct root_mean_square { + float alpha; + unsigned long long squared_old; +}; + +void rms_init(struct root_mean_square *filter, const float alpha); +int rms(struct root_mean_square *filter, const int x); + +#endif /* end of include guard FILTERS_H */ diff --git a/lib/xwax/lut.c b/lib/xwax/lut.c index d9d16585d240..f137a39f21ed 100644 --- a/lib/xwax/lut.c +++ b/lib/xwax/lut.c @@ -28,7 +28,7 @@ #define HASH_BITS 16 #define HASH(timecode) ((timecode) & ((1 << HASH_BITS) - 1)) -#define NO_SLOT ((unsigned)-1) +#define NO_SLOT ((slot_no_t)-1) /* Initialise an empty hash lookup table to store the given number @@ -74,7 +74,7 @@ void lut_clear(struct lut *lut) } -void lut_push(struct lut *lut, unsigned int timecode) +void lut_push(struct lut *lut, bits_t timecode) { unsigned int hash; slot_no_t slot_no; @@ -91,7 +91,7 @@ void lut_push(struct lut *lut, unsigned int timecode) } -unsigned int lut_lookup(struct lut *lut, unsigned int timecode) +slot_no_t lut_lookup(struct lut *lut, bits_t timecode) { unsigned int hash; slot_no_t slot_no; @@ -107,5 +107,5 @@ unsigned int lut_lookup(struct lut *lut, unsigned int timecode) slot_no = slot->next; } - return (unsigned)-1; + return (slot_no_t)-1; } diff --git a/lib/xwax/lut.h b/lib/xwax/lut.h index 9667705446ab..da98f56b2754 100644 --- a/lib/xwax/lut.h +++ b/lib/xwax/lut.h @@ -20,10 +20,13 @@ #ifndef LUT_H #define LUT_H +#include "types.h" + typedef unsigned int slot_no_t; +typedef unsigned int bits_t; struct slot { - unsigned int timecode; + bits_t timecode; slot_no_t next; /* next slot with the same hash */ }; @@ -36,7 +39,7 @@ struct lut { int lut_init(struct lut *lut, int nslots); void lut_clear(struct lut *lut); -void lut_push(struct lut *lut, unsigned int timecode); -unsigned int lut_lookup(struct lut *lut, unsigned int timecode); +void lut_push(struct lut *lut, bits_t timecode); +unsigned int lut_lookup(struct lut *lut, bits_t timecode); #endif diff --git a/lib/xwax/lut_mk2.c b/lib/xwax/lut_mk2.c new file mode 100644 index 000000000000..2b09a7b25979 --- /dev/null +++ b/lib/xwax/lut_mk2.c @@ -0,0 +1,117 @@ +#include +#include + +#include "lut_mk2.h" + +/* + * The number of bits to form the hash, which governs the overall size + * of the hash lookup table, and hence the amount of chaining + */ + +#define HASH_BITS 16 + +#define HASH(timecode) ((timecode) & ((1 << HASH_BITS) - 1)) +#define NO_SLOT ((slot_no_t)-1) + +/* + * Hash function that takes all 110-bits of the MK2s into account + */ + +unsigned short HASH110(mk2bits_t *value) { + + /* Simple hash mixing using bit shifts and XORs */ + unsigned short hash = (unsigned short)(value->low ^ (value->low >> 16) ^ (value->low >> 32) ^ + (value->low >> 48)); + hash ^= (unsigned short)(value->high ^ (value->high << 5) ^ (value->high >> 3)); + + /* Final scrambling to improve distribution */ + hash ^= (hash >> 7) ^ (hash << 9); + + return hash; +} + +/* + * Initialise an empty hash lookup table to store the given number * of timecode -> position + * lookups (Traktor MK2 version) + */ + +int lut_init_mk2(struct lut_mk2 *lut, int nslots) +{ + size_t bytes; + int n, hashes; + + hashes = 1 << HASH_BITS; + bytes = sizeof(struct slot_mk2) * nslots + sizeof(slot_no_t) * hashes; + + fprintf(stderr, "Lookup table has %d hashes to %d slots" + " (%d slots per hash, %zuKb)\n", + hashes, nslots, nslots / hashes, bytes / 1024); + + lut->slot = malloc(sizeof(struct slot_mk2) * nslots); + if (lut->slot == NULL) { + perror("malloc"); + return -1; + } + + lut->table = malloc(sizeof(slot_no_t) * hashes); + if (lut->table == NULL) { + perror("malloc"); + return -1; + } + + for (n = 0; n < hashes; n++) + lut->table[n] = NO_SLOT; + + lut->avail = 0; + + return 0; +} + +void lut_clear_mk2(struct lut_mk2 *lut) +{ + free(lut->table); + free(lut->slot); +} + +/* + * Traktor MK2 version holding 110-bit integers as timecode + */ + +void lut_push_mk2(struct lut_mk2 *lut, mk2bits_t *timecode) +{ + unsigned int hash; + slot_no_t slot_no; + struct slot_mk2 *slot; + + slot_no = lut->avail++; /* take the next available slot */ + + slot = &lut->slot[slot_no]; + slot->timecode = *timecode; + + hash = HASH110(timecode); + slot->next = lut->table[hash]; + lut->table[hash] = slot_no; +} + +/* + * Traktor MK2 version holding 110-bit integers as timecode + */ + +slot_no_t lut_lookup_mk2(struct lut_mk2 *lut, mk2bits_t *timecode) +{ + unsigned int hash; + slot_no_t slot_no; + struct slot_mk2 *slot; + + hash = HASH110(timecode); + slot_no = lut->table[hash]; + + while (slot_no != NO_SLOT) { + slot = &lut->slot[slot_no]; + if (u128_eq(slot->timecode, *timecode)) + return slot_no; + slot_no = slot->next; + } + + return (slot_no_t)-1; +} diff --git a/lib/xwax/lut_mk2.h b/lib/xwax/lut_mk2.h new file mode 100644 index 000000000000..8f0b4b16eec5 --- /dev/null +++ b/lib/xwax/lut_mk2.h @@ -0,0 +1,25 @@ +#ifndef LUT_MK2_H + +#define LUT_MK2_H + +#include "lut.h" + +typedef u128 mk2bits_t; + +struct slot_mk2 { + mk2bits_t timecode; + slot_no_t next; /* next slot with the same hash */ +}; + +struct lut_mk2 { + struct slot_mk2 *slot; + slot_no_t *table, /* hash -> slot lookup */ + avail; /* next available slot */ +}; + +int lut_init_mk2(struct lut_mk2 *lut, int nslots); +void lut_clear_mk2(struct lut_mk2 *lut); +void lut_push_mk2(struct lut_mk2 *lut, mk2bits_t *timecode); +slot_no_t lut_lookup_mk2(struct lut_mk2 *lut, mk2bits_t *timecode); + +#endif /* end of include guard LUT_MK2_H */ diff --git a/lib/xwax/timecoder.c b/lib/xwax/timecoder.c index fa8af7f08f45..73412666b428 100755 --- a/lib/xwax/timecoder.c +++ b/lib/xwax/timecoder.c @@ -27,9 +27,13 @@ #ifndef _MSC_VER #include #endif +#define _USE_MATH_DEFINES +#include #include "debug.h" +#include "filters.h" #include "timecoder.h" +#include "timecoder_mk2.h" #define ZERO_RC 0.001 /* time constant for zero/rumble filter */ @@ -51,6 +55,7 @@ #define SWITCH_PHASE 0x1 /* tone phase difference of 270 (not 90) degrees */ #define SWITCH_PRIMARY 0x2 /* use left channel (not right) as primary */ #define SWITCH_POLARITY 0x4 /* read bit values in negative (not positive) */ +#define TRAKTOR_MK2 0x8 /* use for Traktor MK2 timecode*/ static struct timecode_def timecodes[] = { { @@ -110,6 +115,60 @@ static struct timecode_def timecodes[] = { .safe = 907000, .threshold = (128 << 16), }, + { + .name = "traktor_mk2_a", + .desc = "Traktor Scratch MK2, side A", + .resolution = 2500, + .flags = TRAKTOR_MK2, + .bits = 110, + .seed_mk2 = { + .high = 0xc6007c63e, + .low = 0x3fc00c60f8c1f00 + }, + .taps_mk2 = { + .high = 0x400000000040, + .low = 0x0000010800000001 + }, + .length = 1820000, + .safe = 1800000, + .threshold = (128 << 16), + }, + { + .name = "traktor_mk2_b", + .desc = "Traktor Scratch MK2, side B", + .resolution = 2500, + .flags = TRAKTOR_MK2, + .bits = 110, + .seed_mk2 = { + .high = 0x1ff9f00003, + .low = 0xe73ff00f9fe0c7c1 + }, + .taps_mk2 = { + .high = 0x400000000040, + .low = 0x0000010800000001 + }, + .length = 2570000, + .safe = 2550000, + .threshold = (128 << 16), + }, + { + .name = "traktor_mk2_cd", + .desc = "Traktor Scratch MK2, CD", + .resolution = 3000, + .flags = TRAKTOR_MK2, + .bits = 110, + .seed_mk2 = { + .high = 0x7ce73, + .low = 0xe0e0fff1fc1cf8c1 + }, + .taps_mk2 = { + .high = 0x400000000000, + .low = 0x1000010800000001 + }, + .length = 4500000, + .safe = 4495000, + .threshold = (128 << 16), + }, { .name = "mixvibes_v2", .desc = "MixVibes V2", @@ -256,7 +315,7 @@ static int build_lookup(struct timecode_def *def) * Return: pointer to timecode definition, or NULL if not available */ -struct timecode_def* timecoder_find_definition(const char *name) +struct timecode_def* timecoder_find_definition(const char *name, const char *lut_dir_path) { unsigned int n; @@ -266,9 +325,24 @@ struct timecode_def* timecoder_find_definition(const char *name) if (strcmp(def->name, name) != 0) continue; - if (build_lookup(def) == -1) - return NULL; /* error */ - + if (!def->lookup) { + if (def->flags & TRAKTOR_MK2) { + if (!lut_load_mk2(def, lut_dir_path)) + return def; + + if (build_lookup_mk2(def) == -1) + return NULL; /* error */ + + if (lut_store_mk2(def, lut_dir_path)) { + timecoder_free_lookup(); + fprintf(stderr, "Couldn't store LUT on disk\n"); + return NULL; + } + } else { + if (build_lookup(def) == -1) + return NULL; /* error */ + } + } return def; } @@ -285,19 +359,64 @@ void timecoder_free_lookup(void) { for (n = 0; n < ARRAY_SIZE(timecodes); n++) { struct timecode_def *def = &timecodes[n]; - if (def->lookup) - lut_clear(&def->lut); + if (def->flags & TRAKTOR_MK2) { + if (def->lookup) + lut_clear_mk2(&def->lut_mk2); + } else { + if (def->lookup) + lut_clear(&def->lut); + } } } +/* + * Initialise a subcode decoder for the Traktor MK2 + */ + +void mk2_subcode_init(struct mk2_subcode *sc) +{ + sc->valid_counter = 0; + sc->avg_reading = INT_MAX/2; + sc->avg_slope = INT_MAX/2; + sc->bit = U128_ZERO; + + delayline_init(&sc->readings); + + /* Initialise smoothing filters */ + ema_init(&sc->ema_reading, 0.01); + ema_init(&sc->ema_slope, 0.01); +} + +/* + * Initialise filter values for the MK2 demodulation + */ + +static void init_mk2_channel(struct timecoder_channel *ch) +{ + ch->mk2.deriv_scaled = INT_MAX/2; + ch->mk2.rms = INT_MAX/2; + ch->mk2.rms_deriv = 0; + + delayline_init(&ch->mk2.delayline); + + ema_init(&ch->mk2.ema_filter, 3e-1); + derivative_init(&ch->mk2.differentiator); + rms_init(&ch->mk2.rms_filter, 1e-3); + rms_init(&ch->mk2.rms_deriv_filter, 1e-3); +} + + /* * Initialise filter values for one channel */ -static void init_channel(struct timecoder_channel *ch) +static void init_channel(struct timecode_def *def, struct timecoder_channel *ch) { ch->positive = false; ch->zero = 0; + + if (def->flags & TRAKTOR_MK2) + init_mk2_channel(ch); } /* @@ -319,6 +438,7 @@ void timecoder_init(struct timecoder *tc, struct timecode_def *def, tc->speed = speed; tc->dt = 1.0 / sample_rate; + tc->sample_rate = sample_rate; tc->zero_alpha = tc->dt / (ZERO_RC + tc->dt); tc->threshold = tc->def->threshold; @@ -327,8 +447,8 @@ void timecoder_init(struct timecoder *tc, struct timecode_def *def, tc->threshold >>= 5; /* approx -36dB */ tc->forwards = 1; - init_channel(&tc->primary); - init_channel(&tc->secondary); + init_channel(tc->def, &tc->primary); + init_channel(tc->def, &tc->secondary); tc->use_legacy_pitch_filter = pitch_estimator; /* Switch for pitch filter type */ @@ -358,6 +478,12 @@ void timecoder_init(struct timecoder *tc, struct timecode_def *def, tc->timecode_ticker = 0; tc->mon = NULL; + + /* Compute the factor the scale up the derivative to the original level */ + tc->gain_compensation = 1.0 / (M_PI * tc->def->resolution / tc->sample_rate); + + mk2_subcode_init(&tc->upper_bitstream); + mk2_subcode_init(&tc->lower_bitstream); } /* @@ -367,6 +493,13 @@ void timecoder_init(struct timecoder *tc, struct timecode_def *def, void timecoder_clear(struct timecoder *tc) { assert(tc->mon == NULL); + + if (tc->def->flags & TRAKTOR_MK2) { + delayline_init(&tc->primary.mk2.delayline); + delayline_init(&tc->secondary.mk2.delayline); + delayline_init(&tc->upper_bitstream.readings); + delayline_init(&tc->lower_bitstream.readings); + } } /* @@ -579,8 +712,18 @@ static void track_quadrature_phase(struct timecoder *tc, bool direction_changed) static void process_sample(struct timecoder *tc, signed int primary, signed int secondary) { - detect_zero_crossing(&tc->primary, primary, tc->zero_alpha, tc->threshold); - detect_zero_crossing(&tc->secondary, secondary, tc->zero_alpha, tc->threshold); + if (tc->def->flags & TRAKTOR_MK2) { + mk2_process_carrier(tc, primary, secondary); + + detect_zero_crossing(&tc->primary, tc->primary.mk2.deriv_scaled, tc->zero_alpha, + tc->threshold); + detect_zero_crossing(&tc->secondary, tc->secondary.mk2.deriv_scaled, tc->zero_alpha, + tc->threshold); + + } else { + detect_zero_crossing(&tc->primary, primary, tc->zero_alpha, tc->threshold); + detect_zero_crossing(&tc->secondary, secondary, tc->zero_alpha, tc->threshold); + } /* If an axis has been crossed, use the direction of the crossing * to work out the direction of the vinyl */ @@ -637,14 +780,22 @@ static void process_sample(struct timecoder *tc, /* If we have crossed the primary channel in the right polarity, * it's time to read off a timecode 0 or 1 value */ - if (tc->secondary.swapped && - tc->primary.positive == ((tc->def->flags & SWITCH_POLARITY) == 0)) - { - signed int m; - - /* scale to avoid clipping */ - m = abs(primary / 2 - tc->primary.zero / 2); - process_bitstream(tc, m); + if (tc->def->flags & TRAKTOR_MK2) { + if (tc->secondary.swapped) + { + int reading = *delayline_at(&tc->secondary.mk2.delayline, 3); + mk2_process_timecode(tc, reading); + } + } else { + if (tc->secondary.swapped && + tc->primary.positive == ((tc->def->flags & SWITCH_POLARITY) == 0)) + { + signed int m; + + /* scale to avoid clipping */ + m = abs(primary / 2 - tc->primary.zero / 2); + process_bitstream(tc, m); + } } tc->timecode_ticker++; @@ -704,8 +855,22 @@ void timecoder_submit(struct timecoder *tc, signed short *pcm, size_t npcm) secondary = left; } - process_sample(tc, primary, secondary); - update_monitor(tc, left, right); + if (tc->def->flags & TRAKTOR_MK2) { + process_sample(tc, primary, secondary); + + /* + * Display the derivative in the monitor. Since the signal is not + * a perfect ring on the x-y-plane, but jumps up and down a bit, + * it looks to small in the scope. Therefore a multiplication by + * two is necessary. + */ + + update_monitor(tc, tc->primary.mk2.deriv_scaled * 2, + tc->secondary.mk2.deriv_scaled * 2); + } else { + process_sample(tc, primary, secondary); + update_monitor(tc, left, right); + } pcm += TIMECODER_CHANNELS; } @@ -730,9 +895,15 @@ signed int timecoder_get_position(struct timecoder *tc, double *when) if (tc->valid_counter <= VALID_BITS) return -1; - r = lut_lookup(&tc->def->lut, tc->bitstream); - if (r == -1) - return -1; + if (tc->def->flags & TRAKTOR_MK2) { + r = lut_lookup_mk2(&tc->def->lut_mk2, &tc->mk2_bitstream); + if (r == -1) + return -1; + } else { + r = lut_lookup(&tc->def->lut, tc->bitstream); + if (r == -1) + return -1; + } if (r >= 0) { // normalize position to milliseconds, not timecode steps -- Owen diff --git a/lib/xwax/timecoder.h b/lib/xwax/timecoder.h index 0e9a197ebeaf..f9272e72b57c 100644 --- a/lib/xwax/timecoder.h +++ b/lib/xwax/timecoder.h @@ -22,15 +22,17 @@ #include +#include "filters.h" #include "lut.h" +#include "lut_mk2.h" #include "pitch.h" #include "pitch_kalman.h" +#include "delayline.h" #define TIMECODER_CHANNELS 2 #ifdef __cplusplus extern "C" { - #endif // __cplusplus typedef unsigned int bits_t; @@ -42,11 +44,24 @@ struct timecode_def { flags; bits_t seed, /* LFSR value at timecode zero */ taps; /* central LFSR taps, excluding end taps */ + mk2bits_t seed_mk2, /* MK2 version */ + taps_mk2; /* MK2 version */ unsigned int length, /* in cycles */ safe; /* last 'safe' timecode number (for auto disconnect) */ signed int threshold; /* threshold for detection of zero-crossings */ bool lookup; /* true if lut has been generated */ struct lut lut; + struct lut_mk2 lut_mk2; /* MK2 version */ +}; + +struct timecoder_channel_mk2 { + int rms, rms_deriv; /* RMS values for the signal and its derivative */ + signed int deriv, deriv_scaled; /* Derivative and its scaled version */ + + struct delayline delayline; /* needed for the Traktor MK2 demodulation */ + struct ema_filter ema_filter; + struct differentiator differentiator; + struct root_mean_square rms_filter, rms_deriv_filter; }; struct timecoder_channel { @@ -54,6 +69,23 @@ struct timecoder_channel { swapped; /* wave recently swapped polarity */ signed int zero; unsigned int crossing_ticker; /* samples since we last crossed zero */ + + struct timecoder_channel_mk2 mk2; +}; + +struct mk2_subcode { + mk2bits_t bitstream; + mk2bits_t timecode; + mk2bits_t bit; + + unsigned int valid_counter; + signed int avg_reading; + signed int avg_slope; + bool recent_bit_flip; + + struct delayline readings; + struct ema_filter ema_reading; + struct ema_filter ema_slope; }; struct timecoder { @@ -63,6 +95,7 @@ struct timecoder { /* Precomputed values */ double dt, zero_alpha; + int sample_rate; signed int threshold; /* Pitch information */ @@ -81,16 +114,22 @@ struct timecoder { signed int ref_level; bits_t bitstream, /* actual bits from the record */ timecode; /* corrected timecode */ + mk2bits_t mk2_bitstream, /* Traktor MK2 version */ + mk2_timecode; /* Traktor MK2 version */ unsigned int valid_counter, /* number of successful error checks */ timecode_ticker; /* samples since valid timecode was read */ + double dB; /* Decibels to detect phono level */ /* Feedback */ unsigned char *mon; /* x-y array */ int mon_size, mon_counter; + + struct mk2_subcode upper_bitstream, lower_bitstream; + double gain_compensation; /* Scaling factor for the derivative */ }; -struct timecode_def* timecoder_find_definition(const char *name); +struct timecode_def* timecoder_find_definition(const char *name, const char *lut_dir_path); void timecoder_free_lookup(void); void timecoder_init(struct timecoder *tc, struct timecode_def *def, diff --git a/lib/xwax/timecoder_mk2.c b/lib/xwax/timecoder_mk2.c new file mode 100644 index 000000000000..125f683ef43a --- /dev/null +++ b/lib/xwax/timecoder_mk2.c @@ -0,0 +1,465 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "timecoder_mk2.h" + +#define REF_PEAKS_AVG 48 /* in wave cycles */ + +/* + * Compute the LFSR bit (Traktor MK2 version) + */ + +static inline mk2bits_t lfsr_mk2(mk2bits_t code, mk2bits_t taps) +{ + mk2bits_t taken; + mk2bits_t xrs; + + taken = u128_and(code, taps); + xrs = U128_ZERO; + + while (u128_neq(taken, U128_ZERO)) { + xrs = u128_add(xrs, u128_and(taken, U128_ONE)); + taken = u128_rshift(taken, 1); + } + + return u128_and(xrs, U128_ONE); +} + +/* + * Linear Feedback Shift Register in the forward direction. New values + * are generated at the least-significant bit. (Traktor MK2 version) + */ + +inline mk2bits_t fwd_mk2(mk2bits_t current, struct timecode_def *def) +{ + if (!def) { + errno = -EINVAL; + perror(__func__); + return U128_ZERO; + } + + mk2bits_t l; + + /* New bits are added at the MSB; shift right by one */ + l = lfsr_mk2(current, u128_or(def->taps_mk2, U128_ONE)); + return u128_or(u128_rshift(current, 1), u128_lshift(l, (def->bits - 1))); +} + +/* + * Linear Feedback Shift Register in the reverse direction + * (Traktor MK2 version) + */ + +inline mk2bits_t rev_mk2(mk2bits_t current, struct timecode_def *def) +{ + if (!def) { + errno = -EINVAL; + perror(__func__); + return U128_ZERO; + } + + mk2bits_t l, mask; + + /* New bits are added at the LSB; shift left one and mask */ + mask = u128_sub(u128_lshift(U128_ONE, def->bits), U128_ONE); + l = lfsr_mk2(current, + u128_or(u128_rshift(def->taps_mk2, 1), + u128_lshift(U128_ONE, (def->bits - 1)))); + + return u128_or(u128_and(u128_lshift(current, 1), mask), l); +} + +/* + * Where necessary, build the lookup table required for this timecode + * (Traktor MK2 version) + * + * Return: -1 if not enough memory could be allocated, otherwise 0 + */ + +int build_lookup_mk2(struct timecode_def *def) +{ + if (!def) { + errno = -EINVAL; + perror(__func__); + return -1; + } + + unsigned int n; + mk2bits_t current, next; + + if (def->lookup) + return 0; + + fprintf(stderr, "Building LUT for %d bit %dHz timecode (%s)\n", + def->bits, def->resolution, def->desc); + + if (lut_init_mk2(&def->lut_mk2, def->length) == -1) + return -1; + + current = def->seed_mk2; + + for (n = 0; n < def->length; n++) { + + /* timecode must not wrap */ + assert(lut_lookup_mk2(&def->lut_mk2, ¤t) == (unsigned)-1); + lut_push_mk2(&def->lut_mk2, ¤t); + + /* check symmetry of the lfsr functions */ + next = fwd_mk2(current, def); + assert(u128_eq(rev_mk2(next, def), current)); + + current = next; + } + + def->lookup = true; + + return 0; +} + +/* + * Caches the generated LUT on the disk. + * + * This is only necessary for the Traktor MK2, since the size of its hash + * table is quite large. + */ + +int lut_store_mk2(struct timecode_def *def, const char *lut_dir_path) +{ + if (!def || !lut_dir_path) + return -1; + + struct slot_mk2 *slot; + slot_no_t *hash; + + int i, j, len, hashes; + char path[1024]; + FILE *fp = NULL; + int r = 0; + int size; + + sprintf(path, "%s/%s%s", lut_dir_path, def->name, ".lut"); + + fprintf(stdout, "Storing LUT at %s\n", path); + fp = fopen(path, "wb"); + if (!fp) { + perror("fopen"); + return -1; + } + + for (i = 0; i < def->length; i++) { + slot = &def->lut_mk2.slot[i]; + + if (!slot) { + printf("slot_no: %d doesn't exist'\n", i); + r = -1; + goto out; + } + size = fwrite(slot, sizeof(struct slot_mk2), 1, fp); + + if (!size) { + perror("fwrite"); + r = -1; + goto out; + } + } + + hashes = 1 << 16; + for (j = 0; j < hashes; j++) { + hash = &def->lut_mk2.table[j]; + + size = fwrite(hash, sizeof(slot_no_t), 1, fp); + if (!size) { + perror("fwrite"); + r = -1; + goto out; + } + } + + size = fwrite(&def->lut_mk2.avail, sizeof(slot_no_t), 1, fp); + if (!size) { + perror("fwrite"); + r = -1; + goto out; + } + +out: + fclose(fp); + + if (hashes != j || def->length != i) + fprintf(stderr, "Something went wrong: "); + + fprintf(stderr, "Wrote %d hashes and %d slots to disk\n", j, i); + + return r; +} + + +/* + * Loads the stored LUT from the disk. + * + * This is only necessary for the Traktor MK2, since the size of its hash + * table is quite large. + */ + +int lut_load_mk2(struct timecode_def *def, const char *lut_dir_path) +{ + if (!def || !lut_dir_path) + return -1; + + struct slot_mk2 *slot; + + char path[1024]; + int i, j, hashes; + int r = 0; + int size; + FILE *fp; + int len; + + sprintf(path, "%s/%s%s", lut_dir_path, def->name, ".lut"); + + fprintf(stdout, "Loading LUT from %s\n", path); + fp = fopen(path, "rb"); + if (!fp) { + fprintf(stderr, "LUT for %s not found on disk\n", def->desc); + return -1; + } + + r = lut_init_mk2(&def->lut_mk2, def->length); + if (r) { + fprintf(stderr, "Couldn't initialise LUT\n"); + goto out; + } + + fprintf(stdout, "Loading LUT from %s\n", path); + for (i = 0; i < def->length; i++) { + slot = &def->lut_mk2.slot[i]; + + size = fread(slot, sizeof(struct slot_mk2), 1, fp); + if (!size) { + perror("fread"); + r = -1; + goto out; + } + } + + hashes = 1 << 16; + for (j = 0; j < hashes; j++) { + + slot_no_t *hash = &def->lut_mk2.table[j]; + + size = fread(hash, sizeof(slot_no_t), 1, fp); + if (!size) { + perror("fread"); + r = -1; + goto out; + } + } + + size = fread(&def->lut_mk2.avail, sizeof(slot_no_t), 1, fp); + if (!size) { + perror("fwrite"); + r = -1; + } + + +out: + fclose(fp); + + if (hashes == j && def->length == i) + def->lookup = true; + else + fprintf(stderr, "Something went wrong: "); + + fprintf(stderr, "Loaded %d hashes and %d slots from disk\n", j, i); + + return r; +} + +/* + * Do Traktor-MK2-specific processing of the carrier wave + * + * Pushes samples into a delayline, computes the derivative, computes RMS + * values and scales the derivative back up to the original signal's level. + * Afterards the upscaled derivative can by processed by the pitch detection + * algorithm. + * + * NOTE: Ideally the gain compensation should be done in the derivative and lowpass + * filter structures by determining the amplitude response. I had this + * implemented previously, but chose gain compensation by using the RMS value, + * since it is easier to understand for developers not trained in signal + * processing. Additionally it's nice to have the dB level at hand. + * + */ + +void mk2_process_carrier(struct timecoder *tc, signed int primary, signed int secondary) +{ + if (!tc) { + errno = -EINVAL; + perror(__func__); + return; + } + + /* Push the samples into the ringbuffer */ + delayline_push(&tc->primary.mk2.delayline, primary); + delayline_push(&tc->secondary.mk2.delayline, secondary); + + /* Compute the discrete derivative */ + tc->primary.mk2.deriv = derivative(&tc->primary.mk2.differentiator, + ema(&tc->primary.mk2.ema_filter, primary)); + tc->secondary.mk2.deriv = derivative(&tc->secondary.mk2.differentiator, + ema(&tc->secondary.mk2.ema_filter, secondary)); + + /* Compute the smoothed RMS value */ + tc->primary.mk2.rms = rms(&tc->primary.mk2.rms_filter, primary); + tc->secondary.mk2.rms = rms(&tc->secondary.mk2.rms_filter, secondary); + + /* Compute the smoothed RMS value for the derivative */ + tc->primary.mk2.rms_deriv = rms(&tc->primary.mk2.rms_deriv_filter, tc->primary.mk2.deriv); + tc->secondary.mk2.rms_deriv = rms(&tc->secondary.mk2.rms_deriv_filter, tc->secondary.mk2.deriv); + + /* Compute the gain compensation for the derivative*/ + tc->gain_compensation = (double)tc->secondary.mk2.rms / tc->secondary.mk2.rms_deriv; + + /* Without this limit pitch becomes too sensitive */ + if (tc->gain_compensation > 25.0) + tc->gain_compensation = 25.0; + + tc->dB = 20 * log10((double)tc->secondary.mk2.rms / INT_MAX); + + /* Compute the scaled derivative */ + tc->primary.mk2.deriv_scaled = tc->primary.mk2.deriv * tc->gain_compensation; + tc->secondary.mk2.deriv_scaled = tc->secondary.mk2.deriv * tc->gain_compensation; +} + +/* + * Detect if the upward or downward slope hits a threshold. + * Upwards signifies a one and downwards a zero. + */ + +static inline void detect_bit_flip(const int slope[2], int rms, int reading, int avg_reading, + mk2bits_t *bit, bool *bit_flipped, bool forwards, mk2bits_t one) +{ + static const double reverse_factor = 1.75; + static const double forward_factor = 1.5; + double threshold; + + if (*bit_flipped == false) { + if (forwards) { + threshold = rms / forward_factor; + } else { + threshold = rms / reverse_factor; + one = u128_not(one); + } + + if (u128_eq(*bit, u128_not(one)) && slope[0] > threshold && slope[1] > threshold) { + *bit = one; + *bit_flipped = true; + } else if (u128_eq(*bit, one) && slope[0] < -threshold && slope[1] < -threshold) { + *bit = u128_not(one); + *bit_flipped = true; + } + } else { + *bit_flipped = false; + } +} + +/* + * Verify the new LFSR state in the forward or reverse direction. + */ + +static inline bool lfsr_verify(struct timecode_def *def, mk2bits_t *timecode, mk2bits_t *bitstream, + mk2bits_t bit, bool forwards) +{ + if (forwards) { + *timecode = fwd_mk2(*timecode, def); + *bitstream = u128_add(u128_rshift(*bitstream, 1), u128_lshift(bit, (def->bits - 1))); + } else { + mk2bits_t mask = u128_sub(u128_lshift(U128_ONE, def->bits), U128_ONE); + *timecode = rev_mk2(*timecode, def); + *bitstream = u128_add(u128_and(u128_lshift(*bitstream, 1), mask), bit); + } + + if (u128_eq(*timecode, *bitstream)) + return true; + else + return false; +} + +/* + * Process the upper or lower bitstream contained in the Traktor MK2 signal + */ + +inline static void mk2_process_bitstream(struct timecoder *tc, struct mk2_subcode *sc, + signed int reading) +{ + int current_slope[2]; + + delayline_push(&sc->readings, reading); + sc->avg_reading = ema(&sc->ema_reading, reading); + + /* Calculate absolute of average slope */ + sc->avg_slope = ema(&sc->ema_slope, abs(reading - *delayline_at(&sc->readings, 1))); + + /* Calculate current and last slope */ + current_slope[0] = (reading - *delayline_at(&sc->readings, 1)); + current_slope[1] = (reading - *delayline_at(&sc->readings, 2)); + + /* The bits only change when an offset jump occurs. Else the previous bit is taken */ + detect_bit_flip(current_slope, tc->secondary.mk2.rms, reading, sc->avg_reading, &sc->bit, + &sc->recent_bit_flip, tc->forwards, U128(0x0, !tc->secondary.positive)); + + if (lfsr_verify(tc->def, &sc->timecode, &sc->bitstream, sc->bit, tc->forwards)) { + (sc->valid_counter)++; + } else { + sc->timecode = sc->bitstream; + sc->valid_counter = 0; + } +} + +/* + * Process the upper or lower bitstream contained in the Traktor MK2 signal + */ + +void mk2_process_timecode(struct timecoder *tc, signed int reading) +{ + /* + * Detect if the offset jumps on upper and lower bitstream + */ + + if (tc->secondary.positive) + mk2_process_bitstream(tc, &tc->upper_bitstream, reading); + else if (!tc->secondary.positive) + mk2_process_bitstream(tc, &tc->lower_bitstream, reading); + + if (tc->lower_bitstream.valid_counter > tc->upper_bitstream.valid_counter) { + tc->mk2_bitstream = tc->lower_bitstream.bitstream; + tc->mk2_timecode = tc->lower_bitstream.timecode; + } else { + tc->mk2_bitstream = tc->upper_bitstream.bitstream; + tc->mk2_timecode = tc->upper_bitstream.timecode; + } + + if (u128_eq(tc->mk2_timecode, tc->mk2_bitstream)) { + tc->valid_counter++; + } else { + tc->timecode = tc->bitstream; + tc->valid_counter = 0; + } + /* Take note of the last time we read a valid timecode */ + + tc->timecode_ticker = 0; + + tc->ref_level -= tc->ref_level / REF_PEAKS_AVG; + tc->ref_level += abs((int)(tc->secondary.mk2.rms_deriv * tc->gain_compensation)) + / REF_PEAKS_AVG; + + debug("upper.valid_counter: %d, lower.valid_counter %d, forwards: %b\n", */ + tc->upper.valid_counter, + tc->lower.valid_counter, + tc->forwards); +} diff --git a/lib/xwax/timecoder_mk2.h b/lib/xwax/timecoder_mk2.h new file mode 100644 index 000000000000..8e5afa84b7cf --- /dev/null +++ b/lib/xwax/timecoder_mk2.h @@ -0,0 +1,18 @@ +#ifndef TIMECODER_MK2_H + +#define TIMECODER_MK2_H + +#include "lut_mk2.h" +#include "timecoder.h" + +mk2bits_t fwd_mk2(mk2bits_t current, struct timecode_def *def); +mk2bits_t rev_mk2(mk2bits_t current, struct timecode_def *def); + +int build_lookup_mk2(struct timecode_def *def); +int lut_load_mk2(struct timecode_def *def, const char *lut_dir_path); +int lut_store_mk2(struct timecode_def *def, const char *lut_dir_path); + +void mk2_process_carrier(struct timecoder *tc, signed int primary, signed int secondary); +void mk2_process_timecode(struct timecoder *tc, signed int reading); + +#endif /* end of include guard TIMECODER_MK2_H */ diff --git a/lib/xwax/types.h b/lib/xwax/types.h new file mode 100644 index 000000000000..3fe87e1cd81b --- /dev/null +++ b/lib/xwax/types.h @@ -0,0 +1,148 @@ +#ifndef TYPES_H +#define TYPES_H + +#include +#include + +/* + * Define the u128 struct using two 64-bit unsigned integers, with high part first. + */ + +typedef struct { + uint64_t high; /* Most significant part */ + uint64_t low; /* Least significant part */ +} u128; + +/* + * Inline constructor for u128. + * Works in all compilers, including MSVC. + */ + +static inline u128 make_u128(uint64_t high, uint64_t low) +{ + u128 v; + + v.high = high; + v.low = low; + + return v; +} + +/* + * Macro to preserve U128() syntax, but call the portable constructor. + * + * Used to be only the macro before, but MSVC doesn't like C99 compound + * literals. + */ + +#define U128(high, low) make_u128((high), (low)) +#define U128_ZERO make_u128(0ULL, 0ULL) +#define U128_ONE make_u128(0ULL, 1ULL) + +static inline int u128_eq(u128 a, u128 b) +{ + return (a.high == b.high) && (a.low == b.low); +} + +/* + * Not-equal comparison. + */ + +static inline int u128_neq(u128 a, u128 b) +{ + return (a.high != b.high) || (a.low != b.low); +} + +/* + * Addition of two u128 values. + */ + +static inline u128 u128_add(u128 a, u128 b) +{ + uint64_t sum = a.low + b.low; + uint64_t carry = (sum < a.low) ? 1 : 0; + + return U128(a.high + b.high + carry, sum); +} + +/* + * Subtraction of two u128 values. + */ + +static inline u128 u128_sub(u128 a, u128 b) +{ + uint64_t diff = a.low - b.low; + uint64_t borrow = (a.low < b.low) ? 1 : 0; + + return U128(a.high - b.high - borrow, diff); +} + +/* + * Left shift by n bits. + */ + +static inline u128 u128_lshift(u128 a, uint32_t n) +{ + if (n >= 128) + return U128_ZERO; + else if (n >= 64) + return U128(a.low << (n - 64), 0ULL); + else + return U128((a.high << n) | (a.low >> (64 - n)), a.low << n); +} + +/* + * Right shift by n bits. + */ + +static inline u128 u128_rshift(u128 a, uint32_t n) +{ + if (n >= 128) + return U128_ZERO; + else if (n >= 64) + return U128(0ULL, a.high >> (n - 64)); + else + return U128(a.high >> n, (a.low >> n) | (a.high << (64 - n))); +} + +/* + * Bitwise AND of two u128 values. + */ + +static inline u128 u128_and(u128 a, u128 b) +{ + return U128(a.high & b.high, a.low & b.low); +} + +/* + * Bitwise OR of two u128 values. + */ + +static inline u128 u128_or(u128 a, u128 b) +{ + return U128(a.high | b.high, a.low | b.low); +} + +/* + * Logical NOT (negation) of a u128 value. + */ + +static inline u128 u128_not(u128 a) +{ + if (!a.low && !a.high) + return U128(0ULL, 1ULL); + else + return U128(0ULL, 0ULL); +} + +/* + * Print a u128 value in hexadecimal format (lowercase). + */ + +static inline void u128_print(u128 a) +{ + printf("%016llx%016llx\n", (unsigned long long)a.high, (unsigned long long)a.low); +} + +#endif /* end of include guard TYPES_H */ + diff --git a/res/controllers/Numark Mixtrack Pro.midi.xml b/res/controllers/Numark Mixtrack Pro.midi.xml index f2ddff9750eb..217e9353e32f 100644 --- a/res/controllers/Numark Mixtrack Pro.midi.xml +++ b/res/controllers/Numark Mixtrack Pro.midi.xml @@ -1,846 +1,843 @@ - - + + - Numark MixTrack Pro - Matteo (matteo@magm3.com), James Ralston, and D. J. Freije (dario2004@gmail.com) - version v1.2 w/brake, backspin, blink beat Leds. - https://mixxx.discourse.group/t/numark-mixtrack-pro-with-backspin-and-more/12557 - numark_mixtrack_pro + Numark MixTrack Pro + Matteo (matteo@magm3.com), James Ralston, and D. J. Freije (dario2004@gmail.com), Josh Patten, Vespadj + version v2.5 - 2.6 (2026) + https://mixxx.discourse.group/t/numark-mixtrack-pro-by-vespadj/32635 + numark_mixtrack_pro - + + + + + + + + + + + + + + + + + - + - - - - - 0xb0 - 0xc - [Master] - headMix - - - - - 0xb0 - 0x17 - [Master] + [Channel1] volume + Mixer + 0xB0 + 0x08 - 0xb0 - 0xb - [Master] - headVolume + [Channel2] + volume + Mixer + 0xB0 + 0x09 - 0xb0 - 0x0a [Master] crossfader + 0xB0 + 0x0A - 0xb0 - 0x1a - [Playlist] - NumarkMixTrackPro.selectKnob + [Master] + headGain + 0xB0 + 0x0B - + - 0x90 - 0x69 - [Playlist] - NumarkMixTrackPro.toggleDirectoryMode + [Master] + headMix + 0xB0 + 0x0C - + - 0x90 - 0x4f - [Playlist] - LoadSelectedIntoFirstStopped + [Channel1] + NumarkMixTrackPro.pitchFader + with softTakeover + 0xB0 + 0x0D - + - - - - - 0xb0 - 0x1b - [Flanger] - lfoDepth + + [Channel2] + NumarkMixTrackPro.pitchFader + with softTakeover + 0xB0 + 0x0E - + - 0xb0 - 0x1c - [Flanger] - lfoDelay + [EqualizerRack1_[Channel1]_Effect1] + parameter3 + High + 0xB0 + 0x10 - + - 0xb0 - 0x1d - [Channel1] - pregain + [EqualizerRack1_[Channel2]_Effect1] + parameter3 + High + 0xB0 + 0x11 - + - 0x90 - 0x3b [Channel1] - NumarkMixTrackPro.playbutton + NumarkMixTrackPro.mid + Mid + 0xB0 + 0x12 - 0x90 - 0x33 - [Channel1] - NumarkMixTrackPro.cuebutton + [Channel2] + NumarkMixTrackPro.mid + Mid + 0xB0 + 0x13 - 0x90 - 0x40 - [Channel1] - NumarkMixTrackPro.beatsync + [EqualizerRack1_[Channel1]_Effect1] + parameter1 + Low + 0xB0 + 0x14 - + - 0x90 - 0x4a - [Channel1] - NumarkMixTrackPro.playFromCue + [EqualizerRack1_[Channel2]_Effect1] + parameter1 + Low + 0xB0 + 0x15 - + - - 0x90 - 0x65 - [Channel1] - pfl + [Master] + gain + Mixer + 0xB0 + 0x17 - 0x90 - 0x5C - [Channel1] - NumarkMixTrackPro.changeHotCue + [Channel2] + NumarkMixTrackPro.jogWheel + 0xB0 + 0x18 - 0x90 - 0x5B [Channel1] - NumarkMixTrackPro.changeHotCue + NumarkMixTrackPro.jogWheel + 0xB0 + 0x19 - 0x90 - 0x5A - [Channel1] - NumarkMixTrackPro.changeHotCue + [Playlist] + NumarkMixTrackPro.selectKnob + 0xB0 + 0x1A - - 0x90 - 0x59 [Channel1] - NumarkMixTrackPro.toggleDeleteKey + NumarkMixTrackPro.fxSelectKnobRotate + 0xB0 + 0x1B - 0xb0 - 0x10 - [Channel1] - filterHigh + [EffectRack1_EffectUnit1_Effect1] + meta + 0xB0 + 0x1C - + - 0xb0 - 0x12 - [Channel1] - filterMid + [EffectRack1_EffectUnit1] + mix + 0xB0 + 0x1D - + - 0xb0 - 0x14 - [Channel1] - filterLow + [EffectRack1_EffectUnit2_Effect1] + effect_selector + 0xB0 + 0x1E - + - - 0x90 - 0x61 - [Channel1] - NumarkMixTrackPro.toggleManualLooping + [EffectRack1_EffectUnit2_Effect1] + meta + 0xB0 + 0x1F - + - 0x90 - 0x53 - [Channel1] - NumarkMixTrackPro.loopIn + [EffectRack1_EffectUnit2] + mix + 0xB0 + 0x20 - + - 0x90 - 0x54 [Channel1] - NumarkMixTrackPro.loopOut + NumarkMixTrackPro.cuebutton + 0x90 + 0x33 + [Channel2] + NumarkMixTrackPro.LoadTrack 0x90 - 0x55 - [Channel1] - NumarkMixTrackPro.reLoop + 0x34 - 0x90 - 0x4b [Channel1] - NumarkMixTrackPro.LoadTrack + NumarkMixTrackPro.playbutton + 0x90 + 0x3B - 0xb0 - 0x8 - [Channel1] - volume + [Channel2] + NumarkMixTrackPro.cuebutton + 0x90 + 0x3C - + - 0xb0 - 0xd [Channel1] - NumarkMixTrackPro.pitch + NumarkMixTrackPro.beatsync + 0x90 + 0x40 + [Channel2] + NumarkMixTrackPro.playbutton 0x90 - 0x44 - [Channel1] - rate_temp_up + 0x42 - + + [Channel1] + NumarkMixTrackPro.pitchBendMinus 0x90 0x43 - [Channel1] - rate_temp_down - + - - - 0x90 - 0x48 [Channel1] - NumarkMixTrackPro.toggleScratchMode + NumarkMixTrackPro.pitchBendPlus + 0x90 + 0x44 - 0xb0 - 0x19 - [Channel1] - NumarkMixTrackPro.jogWheel + [Channel2] + NumarkMixTrackPro.pitchBendMinus + 0x90 + 0x45 + [Channel2] + NumarkMixTrackPro.pitchBendPlus 0x90 - 0x4e - [Channel1] - NumarkMixTrackPro.wheelTouch + 0x46 + [Channel2] + NumarkMixTrackPro.beatsync 0x90 - 0x51 - [Channel1] - keylock + 0x47 - + - 0x90 - 0x63 [Channel1] - NumarkMixTrackPro.flanger + NumarkMixTrackPro.toggleScratchMode + 0x90 + 0x48 - - - - - 0xb0 - 0x1e - [Flanger] - lfoDepth + + [Channel1] + NumarkMixTrackPro.playFromCue + 0x90 + 0x4A - + - 0xb0 - 0x1f - [Flanger] - lfoDelay + [Channel1] + NumarkMixTrackPro.LoadTrack + 0x90 + 0x4B - + - 0xb0 - 0x20 [Channel2] - pregain + NumarkMixTrackPro.playFromCue + 0x90 + 0x4C - + - 0x90 - 0x42 [Channel2] - NumarkMixTrackPro.playbutton + NumarkMixTrackPro.wheelTouch + 0x90 + 0x4D + [Channel1] + NumarkMixTrackPro.wheelTouch 0x90 - 0x3c - [Channel2] - NumarkMixTrackPro.cuebutton + 0x4E + [Playlist] + NumarkMixTrackPro.onCentralKnobPress 0x90 - 0x47 - [Channel2] - NumarkMixTrackPro.beatsync + 0x4F - - 0x90 - 0x4C [Channel2] - NumarkMixTrackPro.playFromCue + NumarkMixTrackPro.toggleScratchMode + 0x90 + 0x50 - + [Channel1] + keylock 0x90 - 0x66 - [Channel2] - pfl + 0x51 - 0x90 - 0x60 [Channel2] - NumarkMixTrackPro.changeHotCue + keylock + 0x90 + 0x52 - + + [Channel1] + NumarkMixTrackPro.loopIn 0x90 - 0x5f - [Channel2] - NumarkMixTrackPro.changeHotCue + 0x53 + [Channel1] + NumarkMixTrackPro.loopOut 0x90 - 0x5e - [Channel2] - NumarkMixTrackPro.changeHotCue + 0x54 + [Channel1] + NumarkMixTrackPro.reLoop 0x90 - 0x5d - [Channel2] - NumarkMixTrackPro.toggleDeleteKey + 0x55 - 0xb0 - 0x11 [Channel2] - filterHigh + NumarkMixTrackPro.loopIn + 0x90 + 0x56 - + - 0xb0 - 0x13 [Channel2] - filterMid + NumarkMixTrackPro.loopOut + 0x90 + 0x57 - + - 0xb0 - 0x15 [Channel2] - filterLow + NumarkMixTrackPro.reLoop + 0x90 + 0x58 - + + [Channel1] + NumarkMixTrackPro.toggleShiftKey 0x90 - 0x62 - [Channel2] - NumarkMixTrackPro.toggleManualLooping + 0x59 + [Channel1] + NumarkMixTrackPro.changeHotCue 0x90 - 0x56 - [Channel2] - NumarkMixTrackPro.loopIn + 0x5A + [Channel1] + NumarkMixTrackPro.changeHotCue 0x90 - 0x57 - [Channel2] - NumarkMixTrackPro.loopOut + 0x5B - + + [Channel1] + NumarkMixTrackPro.changeHotCue 0x90 - 0x58 - [Channel2] - NumarkMixTrackPro.reLoop + 0x5C - + + [Channel2] + NumarkMixTrackPro.toggleShiftKey 0x90 - 0x34 + 0x5D + + + + + [Channel2] - NumarkMixTrackPro.LoadTrack + NumarkMixTrackPro.changeHotCue + 0x90 + 0x5E - 0xb0 - 0x9 [Channel2] - volume + NumarkMixTrackPro.changeHotCue + 0x90 + 0x5F - + - 0xb0 - 0xe [Channel2] - NumarkMixTrackPro.pitch + NumarkMixTrackPro.changeHotCue + 0x90 + 0x60 + [Channel1] + NumarkMixTrackPro.toggleManualLooping 0x90 - 0x46 + 0x61 + + + + + [Channel2] - rate_temp_up + NumarkMixTrackPro.toggleManualLooping + 0x90 + 0x62 + + + + + + [EffectRack1_EffectUnit1_Effect1] + enabled + 0x90 + 0x63 + [EffectRack1_EffectUnit2_Effect1] + enabled 0x90 - 0x45 - [Channel2] - rate_temp_down + 0x64 - - + [Channel1] + pfl 0x90 - 0x50 - [Channel2] - NumarkMixTrackPro.toggleScratchMode + 0x65 - + - - 0xb0 - 0x18 + [Channel2] - NumarkMixTrackPro.jogWheel + pfl + 0x90 + 0x66 - + - - + + [QuickEffectRack1_[Channel2]] + super1_set_default 0x90 - 0x4D - [Channel2] - NumarkMixTrackPro.wheelTouch + 0x67 - + - + + [Channel1] + NumarkMixTrackPro.fxSelectKnobPress 0x90 - 0x52 - [Channel2] - keylock + 0x68 - + + [Playlist] + NumarkMixTrackPro.toggleDirectoryMode 0x90 - 0x64 - [Channel2] - NumarkMixTrackPro.flanger + 0x69 - - - - [Channel1] - play - - - - 0 - 0.1 + beatsync 0x90 - 0x3b - 0x0 + 0x40 + 0x00 0x64 - - - - [Channel1] - play - - - - 0 0.1 - 0x90 - 0x33 - 0x64 - 0x00 - [Channel1] - beatsync - - - - 0 - 0.1 + beatsync_tempo 0x90 0x40 - 0x0 + 0x00 0x64 + 0.1 - [Channel1] - beatsync_tempo - - - - 0 - 0.1 + keylock 0x90 - 0x40 - 0x0 + 0x51 + 0x00 0x64 + 0.1 - [Channel1] pfl - - - - 0 - 0.1 0x90 0x65 - 0x0 + 0x00 0x64 + 0.1 [Channel1] - keylock - - - - 0 - 0.1 + play 0x90 - 0x51 - 0x0 - 0x64 + 0x33 + 0x64 + 0.1 [Channel1] - flanger - - - - 0 - 0.1 + play 0x90 - 0x63 - 0x0 + 0x3B + 0x00 0x64 + 0.1 [Channel1] rate - - - - -0.1 - 0.1 0x90 0x70 0x64 - 0x0 + 0.1 + -0.1 - - - [Channel2] - play - - - - 0 - 0.1 + beatsync 0x90 - 0x42 - 0x0 + 0x47 + 0x00 0x64 - - - - [Channel2] - play - - - - 0 0.1 - 0x90 - 0x3c - 0x64 - 0x00 - [Channel2] - beatsync - - - - 0 - 0.1 + beatsync_tempo 0x90 0x47 - 0x0 + 0x00 0x64 + 0.1 - [Channel2] - beatsync_tempo - - - - 0 - 0.1 + keylock 0x90 - 0x47 - 0x0 + 0x52 + 0x00 0x64 + 0.1 - [Channel2] pfl - - - - 0 - 0.1 0x90 0x66 - 0x0 + 0x00 0x64 + 0.1 [Channel2] - keylock - - - - 0 - 0.1 + play 0x90 - 0x52 - 0x0 - 0x64 + 0x3C + 0x64 + 0.1 [Channel2] - flanger - - - - 0 - 0.1 + play 0x90 - 0x64 - 0x0 + 0x42 + 0x00 0x64 + 0.1 - + [Channel2] rate - - - - -0.1 - 0.1 0x90 0x71 0x64 - 0x0 + 0.1 + -0.1 + + + [EffectRack1_EffectUnit1_Effect1] + enabled + 0x90 + 0x63 + 0x00 + 0x64 + 0.1 + + + [EffectRack1_EffectUnit2_Effect1] + enabled + 0x90 + 0x64 + 0x00 + 0x64 + 0.1 - + diff --git a/res/controllers/Numark-Mixtrack-Pro-scripts.js b/res/controllers/Numark-Mixtrack-Pro-scripts.js index 1bbf23d5ec74..8f135e688702 100644 --- a/res/controllers/Numark-Mixtrack-Pro-scripts.js +++ b/res/controllers/Numark-Mixtrack-Pro-scripts.js @@ -3,706 +3,1081 @@ // // 5/18/2011 - Changed by James Ralston // -// Known Bugs: -// Mixxx complains about an undefined variable on 1st load of the mapping (ignore it, then restart Mixxx) -// Each slide/knob needs to be moved on Mixxx startup to match levels with the Mixxx UI -// // 05/26/2012 to 06/27/2012 - Changed by Darío José Freije // -// Almost all work like expected. Resume and Particularities: -// -// ************* Script now is Only for 1.11.0 and above ************* -// -// Delete + Effect: Brake Effect (maintain pressed). -// Flanger Delay (2nd knob of effect section): Adjust the speed of Brake. -// -// Delete + Hotcues: Clear Hotcues (First press Delete, then Hotcue). -// Delete + Reloop: Clear Loop. -// Delete + Manual: Set Quantize ON (for best manual loop) or OFF. -// Delete + Sync: Set Pitch to Zero. -// -// Load track: Only if the track is paused. Put the pitch in 0 at load. -// -// Gain: The 3rd knob of the "effect" section is "Gain" (up to clip). -// -// Effect: Flanger. 1st and 2nd knob modify Depth and Delay. -// -// Cue: Don't set Cue accidentally at the end of the song (return to the latest cue). -// LED ON when stopped. LED OFF when playing. -// LED Blink at Beat time in the ultimates 30 seconds of song. -// -// Stutter: Adjust BeatGrid in the correct place (useful to sync well). -// LED Blink at each Beat of the grid. +// 3/11/2024 - Changed by Josh Patten // codespell:ignore patten +// 2025-04-19 - engine.softTakeover("[Channel1]", "rate", true); by vespadj +// - waveform_zoom _up _down: press hold and rotate FX Select Deck1 +// - Filter: PFL(cue) + Mid +// - Original "PITCH BEND" buttons remapped as beatjump_forward and beatjump_forward +// - Fast forward/rewind: hold beatjump_forward + jogWheel (or beatjump_backward) // -// Sync: If the other deck is stopped, only sync tempo (not phase). -// LED Blink at Clip Gain (Peak indicator). -// -// Pitch: Up, Up; Down, Down. Pitch slide are inverted, to match with the screen (otherwise is very confusing). -// Soft-takeover to prevent sudden wide parameter changes when the on-screen control diverges from a hardware control. -// The control will have no effect until the position is close to that of the software, -// at which point it will take over and operate as usual. -// -// Auto Loop (LED ON): Active at program Start. -// "1 Bar" button: Active an Instant 4 beat Loop. Press again to exit loop. -// -// Scratch: -// In Stop mode, with Scratch OFF or ON: Scratch at touch, and Stop moving when the wheel stop moving. -// In Play mode, with Scratch OFF: Only Pitch bend. -// In Play mode, with Scratch ON: Scratch at touch and, in Backwards Stop Scratch when the wheel stop moving for 20ms -> BACKSPIN EFFECT!!!!. -// In Fordward Stop Scratch when the touch is released > Play Immediately (without breaks for well mix). -// Border of the wheels: Pitch Bend. +// Known Bugs: +// - Touch the Jog Wheel during Soft Start is ignored. Work-around: double touch. // - - -function NumarkMixTrackPro() {} - -NumarkMixTrackPro.init = function(id) { // called when the MIDI device is opened & set up - NumarkMixTrackPro.id = id; // Store the ID of this device for later use - - NumarkMixTrackPro.directoryMode = false; - NumarkMixTrackPro.scratchMode = [false, false]; - NumarkMixTrackPro.manualLoop = [true, true]; - NumarkMixTrackPro.deleteKey = [false, false]; - NumarkMixTrackPro.isKeyLocked = [0, 0]; - NumarkMixTrackPro.touch = [false, false]; - NumarkMixTrackPro.scratchTimer = [-1, -1]; - - NumarkMixTrackPro.leds = [ - // Common - { "directory": 0x73, "file": 0x72 }, - // Deck 1 - { "rate": 0x70, "scratchMode": 0x48, "manualLoop": 0x61, - "loop_start_position": 0x53, "loop_end_position": 0x54, "reloop_exit": 0x55, - "deleteKey" : 0x59, "hotCue1" : 0x5a,"hotCue2" : 0x5b,"hotCue3" : 0x5c, - "stutter" : 0x4a, "Cue" : 0x33, "sync" : 0x40 - }, - // Deck 2 - { "rate": 0x71, "scratchMode": 0x50, "manualLoop": 0x62, - "loop_start_position": 0x56, "loop_end_position": 0x57, "reloop_exit": 0x58, - "deleteKey" : 0x5d, "hotCue1" : 0x5e, "hotCue2" : 0x5f, "hotCue3" : 0x60, - "stutter" : 0x4c, "Cue" : 0x3c, "sync" : 0x47 - } - ]; - - NumarkMixTrackPro.ledTimers = {}; - - NumarkMixTrackPro.LedTimer = function(id, led, count, state){ - this.id = id; - this.led = led; - this.count = count; - this.state = state; - } - - for (i=0x30; i<=0x73; i++) midi.sendShortMsg(0x90, i, 0x00); // Turn off all the lights - - NumarkMixTrackPro.hotCue = { - //Deck 1 - 0x5a:"1", 0x5b:"2", 0x5c:"3", - //Deck 2 - 0x5e: "1", 0x5f:"2", 0x60:"3" - }; - - //Add event listeners - for (var i=1; i<3; i++){ - for (var x=1; x<4; x++){ - engine.connectControl("[Channel" + i +"]", "hotcue_"+ x +"_enabled", "NumarkMixTrackPro.onHotCueChange"); - } - NumarkMixTrackPro.setLoopMode(i, false); - } - - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[0]["file"], true); - - -// Enable soft-takeover for Pitch slider - - engine.softTakeover("[Channel1]", "rate", true); - engine.softTakeover("[Channel2]", "rate", true); - - -// Clipping LED - engine.connectControl("[Channel1]","peak_indicator","NumarkMixTrackPro.Channel1Clip"); - engine.connectControl("[Channel2]","peak_indicator","NumarkMixTrackPro.Channel2Clip"); - -// Stutter beat light - engine.connectControl("[Channel1]","beat_active","NumarkMixTrackPro.Stutter1Beat"); - engine.connectControl("[Channel2]","beat_active","NumarkMixTrackPro.Stutter2Beat"); - - -} - - -NumarkMixTrackPro.Channel1Clip = function (value) { - NumarkMixTrackPro.clipLED(value,NumarkMixTrackPro.leds[1]["sync"]); - -} - -NumarkMixTrackPro.Channel2Clip = function (value) { - NumarkMixTrackPro.clipLED(value,NumarkMixTrackPro.leds[2]["sync"]); - -} - -NumarkMixTrackPro.Stutter1Beat = function (value) { - - var secondsBlink = 30; - var secondsToEnd = engine.getValue("[Channel1]", "duration") * (1-engine.getValue("[Channel1]", "playposition")); - - if (secondsToEnd < secondsBlink && secondsToEnd > 1 && engine.getValue("[Channel1]", "play")) { // The song is going to end - - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[1]["Cue"], value); - } - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[1]["stutter"], value); - -} - -NumarkMixTrackPro.Stutter2Beat = function (value) { - - var secondsBlink = 30; - var secondsToEnd = engine.getValue("[Channel2]", "duration") * (1-engine.getValue("[Channel2]", "playposition")); - - if (secondsToEnd < secondsBlink && secondsToEnd > 1 && engine.getValue("[Channel2]", "play")) { // The song is going to end - - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[2]["Cue"], value); - } - - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[2]["stutter"], value); - -} - -NumarkMixTrackPro.clipLED = function (value, note) { - - if (value>0) NumarkMixTrackPro.flashLED(note, 1); - -} - -NumarkMixTrackPro.shutdown = function(id) { // called when the MIDI device is closed - - // First Remove event listeners - for (var i=1; i<2; i++){ - for (var x=1; x<4; x++){ - engine.connectControl("[Channel" + i +"]", "hotcue_"+ x +"_enabled", "NumarkMixTrackPro.onHotCueChange", true); - } - NumarkMixTrackPro.setLoopMode(i, false); - } - - var lowestLED = 0x30; - var highestLED = 0x73; - for (var i=lowestLED; i<=highestLED; i++) { - NumarkMixTrackPro.setLED(i, false); // Turn off all the lights - } - -} - -NumarkMixTrackPro.samplesPerBeat = function(group) { - // FIXME: Get correct samplerate and channels for current deck - var sampleRate = 44100; - var channels = 2; - var bpm = engine.getValue(group, "file_bpm"); - return channels * sampleRate * 60 / bpm; -} - -NumarkMixTrackPro.groupToDeck = function(group) { - - var matches = group.match(/^\[Channel(\d+)\]$/); - - if (matches == null) { - return -1; - } else { - return matches[1]; - } - -} - -NumarkMixTrackPro.setLED = function(value, status) { - - status = status ? 0x64 : 0x00; - midi.sendShortMsg(0x90, value, status); -} - -NumarkMixTrackPro.flashLED = function (led, veces){ - var ndx = Math.random(); - var id = engine.beginTimer(120, NumarkMixTrackPro.doFlash(ndx, veces)); - NumarkMixTrackPro.ledTimers[ndx] = new NumarkMixTrackPro.LedTimer(id, led, 0, false); -} - -NumarkMixTrackPro.doFlash = function(ndx, veces){ - var ledTimer = NumarkMixTrackPro.ledTimers[ndx]; - - if (!ledTimer) return; - - if (ledTimer.count > veces){ // how many times blink the button - engine.stopTimer(ledTimer.id); - delete NumarkMixTrackPro.ledTimers[ndx]; - } else{ - ledTimer.count++; - ledTimer.state = !ledTimer.state; - NumarkMixTrackPro.setLED(ledTimer.led, ledTimer.state); - } -} - -NumarkMixTrackPro.selectKnob = function(channel, control, value, status, group) { - if (value > 63) { - value = value - 128; - } - if (NumarkMixTrackPro.directoryMode) { - if (value > 0) { - for (var i = 0; i < value; i++) { - engine.setValue(group, "SelectNextPlaylist", 1); - } - } else { - for (var i = 0; i < -value; i++) { - engine.setValue(group, "SelectPrevPlaylist", 1); - } - } - } else { - engine.setValue(group, "SelectTrackKnob", value); - - } -} - -NumarkMixTrackPro.LoadTrack = function(channel, control, value, status, group) { - - // Load the selected track in the corresponding deck only if the track is paused - - if(value && engine.getValue(group, "play") != 1) - { - engine.setValue(group, "LoadSelectedTrack", 1); - - // cargar el tema con el pitch en 0 - engine.softTakeover(group, "rate", false); - engine.setValue(group, "rate", 0); - engine.softTakeover(group, "rate", true); - } - else engine.setValue(group, "LoadSelectedTrack", 0); - -} - -NumarkMixTrackPro.flanger = function(channel, control, value, status, group) { - -// if (!value) return; - - var deck = NumarkMixTrackPro.groupToDeck(group); - - var speed = 1; - - if(NumarkMixTrackPro.deleteKey[deck-1]){ - - // Delete + Effect = Brake - -// print ("Delay: " + engine.getValue("[Flanger]","lfoDelay")); - - if (engine.getValue("[Flanger]","lfoDelay") < 5026) { - - speed = engine.getValue("[Flanger]","lfoDelay") / 5025; - - if (speed < 0) speed = 0; - - } else { - - speed = (engine.getValue("[Flanger]","lfoDelay") - 5009)/ 16,586666667 - - if (speed > 300) speed = 300; - } - -// print ("Speed: " + speed); - - engine.brake(deck, value, speed); - - if (!value) NumarkMixTrackPro.toggleDeleteKey(channel, control, 1, status, group); - - } else { - if (!value) return; - if (engine.getValue(group, "flanger")) { - engine.setValue(group, "flanger", 0); - }else{ - engine.setValue(group, "flanger", 1); - } - } - -} - - -NumarkMixTrackPro.cuebutton = function(channel, control, value, status, group) { - - - // Don't set Cue accidentally at the end of the song - if (engine.getValue(group, "playposition") <= 0.97) { - engine.setValue(group, "cue_default", value ? 1 : 0); - } else { - engine.setValue(group, "cue_preview", value ? 1 : 0); - } - -} +// See Manual as reference + +// eslint-disable-next-line no-var +var NumarkMixTrackPro = {}; + +NumarkMixTrackPro.init = function(id) { + // called when the MIDI device is opened & set up + + // Store the ID of this device for later use + NumarkMixTrackPro.id = id; + + NumarkMixTrackPro.directoryMode = false; + NumarkMixTrackPro.scratchMode = [false, false]; + NumarkMixTrackPro.manualLoop = [true, true]; + NumarkMixTrackPro.shiftKey = [false, false]; // used as [Shift], aka "VIEW" and "TICK" buttons + NumarkMixTrackPro.touch = [false, false]; + NumarkMixTrackPro.scratchTimer = [-1, -1]; + NumarkMixTrackPro.scratchLast = [-1, -1]; + NumarkMixTrackPro.fxKnobPressed = [0, 0]; + NumarkMixTrackPro.syncLastTimestamp = [0, 0]; + NumarkMixTrackPro.loopEditIn = [-1, -1]; + + NumarkMixTrackPro.isBeatJumpBackwardOn = [0, 0]; // glossary: forward, backward + engine.makeConnection("[Channel1]", "beatjump_backward", (value) => { + NumarkMixTrackPro.isBeatJumpBackwardOn[0] = value; + }); + engine.makeConnection("[Channel2]", "beatjump_backward", (value) => { + NumarkMixTrackPro.isBeatJumpBackwardOn[1] = value; + }); + + NumarkMixTrackPro.isBeatJumpForwardOn = [0, 0]; // glossary: forward, backward + engine.makeConnection("[Channel1]", "beatjump_forward", (value) => { + NumarkMixTrackPro.isBeatJumpForwardOn[0] = value; + }); + engine.makeConnection("[Channel2]", "beatjump_forward", (value) => { + NumarkMixTrackPro.isBeatJumpForwardOn[1] = value; + }); + + NumarkMixTrackPro.isPflOn = [0, 0]; + engine.makeConnection("[Channel1]", "pfl", (value) => { + NumarkMixTrackPro.isPflOn[0] = value; + }); + engine.makeConnection("[Channel2]", "pfl", (value) => { + NumarkMixTrackPro.isPflOn[1] = value; + }); + + NumarkMixTrackPro.isFxOn = [0, 0]; + engine.makeConnection( + "[EffectRack1_EffectUnit1_Effect1]", + "enabled", + (value) => { + NumarkMixTrackPro.isFxOn[0] = value; + } + ); + engine.makeConnection( + "[EffectRack1_EffectUnit2_Effect1]", + "enabled", + (value) => { + NumarkMixTrackPro.isFxOn[1] = value; + } + ); + + NumarkMixTrackPro.leds = [ + // Common + {directory: 0x73, file: 0x72}, + // Deck 1 + { + effect: 0x63, + headphone: 0x65, + rate: 0x70, + scratchMode: 0x48, + manualLoop: 0x61, + keylock: 0x51, + // eslint-disable-next-line camelcase + loop_start_position: 0x53, + // eslint-disable-next-line camelcase + loop_end_position: 0x54, + reloopExit: 0x55, + shiftKey: 0x59, + hotCue1: 0x5a, + hotCue2: 0x5b, + hotCue3: 0x5c, + stutter: 0x4a, + Cue: 0x33, + sync: 0x40, + }, + // Deck 2 + { + effect: 0x64, + headphone: 0x66, + rate: 0x71, + scratchMode: 0x50, + manualLoop: 0x62, + keylock: 0x52, + // eslint-disable-next-line camelcase + loop_start_position: 0x56, + // eslint-disable-next-line camelcase + loop_end_position: 0x57, + reloopExit: 0x58, + shiftKey: 0x5d, + hotCue1: 0x5e, + hotCue2: 0x5f, + hotCue3: 0x60, + stutter: 0x4c, + Cue: 0x3c, + sync: 0x47, + }, + ]; + + NumarkMixTrackPro.ledTimers = {}; + + // Turn off all the lights + for (let i = 0x30; i <= 0x73; i++) { + midi.sendShortMsg(0x90, i, 0x00); + } + + NumarkMixTrackPro.hotCue = { + //Deck 1 + 0x5a: "1", + 0x5b: "2", + 0x5c: "3", + //Deck 2 + 0x5e: "1", + 0x5f: "2", + 0x60: "3", + }; + + //Add event listeners + for (let i = 1; i < 3; i++) { + for (let x = 1; x < 4; x++) { + engine.makeConnection( + `[Channel${i}]`, + `hotcue_${x}_status`, + NumarkMixTrackPro.onHotCueChange + ); + } + NumarkMixTrackPro.setLoopMode(i, false); + } + + NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[0].file, true); + + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[1].keylock, + engine.getParameter("[Channel1]", "keylock") + ); + + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[2].keylock, + engine.getParameter("[Channel2]", "keylock") + ); + + // Enable soft-takeover for Pitch slider + engine.softTakeover("[Channel1]", "rate", true); + engine.softTakeover("[Channel2]", "rate", true); + + // Clipping LED + engine.makeConnection( + "[Channel1]", + "peak_indicator", + NumarkMixTrackPro.clipLED + ); + engine.makeConnection( + "[Channel2]", + "peak_indicator", + NumarkMixTrackPro.clipLED + ); + + // Stutter beat light + engine.makeConnection( + "[Channel1]", + "beat_active", + NumarkMixTrackPro.flashStutterLED + ); + engine.makeConnection( + "[Channel2]", + "beat_active", + NumarkMixTrackPro.flashStutterLED + ); + + // Settings + NumarkMixTrackPro.settings = {}; + + // get and map + const settingsOptions = [ + "meanPitchBendBtns", + "editLoopByWheelEnabled", + "brakeEnabled", + "softStartEnabled", + "quickFxActivator", + "scratchSensibility", + ]; + settingsOptions.forEach((item) => { + NumarkMixTrackPro.settings[item] = + engine.getSetting(`numarkMixTrackPro_${item}`) || 0; + }); +}; + +NumarkMixTrackPro.shutdown = function() { + // called when the MIDI device is closed + const lowestLED = 0x30; + const highestLED = 0x73; + for (let i = lowestLED; i <= highestLED; i++) { + NumarkMixTrackPro.setLED(i, false); // Turn off all the lights + } +}; + +NumarkMixTrackPro.pitchBendBtns = function(group, value, isPlus) { + switch (NumarkMixTrackPro.settings.meanPitchBendBtns) { + case "beatjump": + engine.setParameter( + group, + `beatjump${isPlus ? "_forward" : "_backward"}`, + !!value + ); + break; + + case "rate_temp": + engine.setParameter( + group, + `rate_temp${isPlus ? "_up" : "_down"}`, + !!value + ); + break; + + case "pitch": + if ( + // if also the other button is pressed + value && + engine.getParameter(group, `pitch${!isPlus ? "_up" : "_down"}`) + ) { + // reset pitch + engine.setParameter(group, "pitch", 0.5); + } else { + engine.setParameter(group, `pitch${isPlus ? "_up" : "_down"}`, !!value); + } + break; + + default: + console.error( + "NumarkMixTrackPro.settings.meanPitchBendBtns", + NumarkMixTrackPro.settings.meanPitchBendBtns + ); + break; + } +}; + +NumarkMixTrackPro.pitchBendMinus = function( + channel, + control, + value, + status, + group +) { + const isPlus = false; + NumarkMixTrackPro.pitchBendBtns(group, value, isPlus); +}; + +NumarkMixTrackPro.pitchBendPlus = function( + channel, + control, + value, + status, + group +) { + const isPlus = true; + NumarkMixTrackPro.pitchBendBtns(group, value, isPlus); +}; + +NumarkMixTrackPro.pitchFader = function( + channel, + control, + value, + status, + group +) { + let newValue = value / 127; + if (value === 63 || value === 64) { + newValue = 0.5; + } + engine.setParameter(group, "rate", newValue); +}; + +NumarkMixTrackPro.flashStutterLED = function(value, group) { + const deck = script.deckFromGroup(group); + if ( + engine.getParameter(group, "end_of_track") && + engine.getParameter(group, "play") + ) { + NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck].Cue, value); + } + + NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck].stutter, value); +}; + +NumarkMixTrackPro.ledTimers = NumarkMixTrackPro.ledTimers || {}; + +NumarkMixTrackPro.setLED = function(note, on) { + midi.sendShortMsg(0x90, note, on ? 0x64 : 0x00); +}; + +NumarkMixTrackPro.flashLED = function(note, times) { + const timers = NumarkMixTrackPro.ledTimers; + + if (timers[note]) { + engine.stopTimer(timers[note].id); + } + + timers[note] = {counter: 0, times: times, state: false}; + + timers[note].id = engine.beginTimer(120, function() { + const obj = timers[note]; + if (!obj || obj.counter >= obj.times) { + if (obj) { engine.stopTimer(obj.id); } + delete timers[note]; + NumarkMixTrackPro.setLED(note, false); + return; + } + obj.counter++; + obj.state = !obj.state; + NumarkMixTrackPro.setLED(note, obj.state); + }); +}; + +NumarkMixTrackPro.clipLED = function(value, group) { + const deck = script.deckFromGroup(group); + const note = NumarkMixTrackPro.leds[deck].sync; + if (value > 0) { + NumarkMixTrackPro.flashLED(note, 1); + } else { + NumarkMixTrackPro.setLED(note, false); + } +}; + +NumarkMixTrackPro.selectKnob = function(channel, control, value) { + if (value > 63) { + value = value - 128; + } + if (NumarkMixTrackPro.directoryMode) { + // [Playlist]SelectNextPlaylist and SelectPrevPlaylist are deprecaded + // but it respect LED on controller, [Library]MoveDown and MoveUp don't. + if (value > 0) { + for (let i = 0; i < value; i++) { + script.triggerControl("[Playlist]", "SelectNextPlaylist", 50); + } + } else { + for (let i = 0; i < -value; i++) { + script.triggerControl("[Playlist]", "SelectPrevPlaylist", 50); + } + } + } else { + engine.setParameter("[Playlist]", "SelectTrackKnob", value); + } +}; + +NumarkMixTrackPro.LoadTrack = function( + channel, + control, + value, + status, + group +) { + if (value) { + script.triggerControl(group, "LoadSelectedTrack", 50); + + // * Reset rate/pitch to 0% + // that can be set in: + // Preferences -> Decks -> Key and Speed options. + // Old code as reference, in case on particular custom needs: + // engine.softTakeover(group, "rate", false); + // engine.setParameter(group, "rate", 0.5); + // engine.softTakeover(group, "rate", true); + } +}; + +NumarkMixTrackPro.cuebutton = function( + channel, + control, + value, + status, + group +) { + const deck = script.deckFromGroup(group); + // Ignore during Brake or Soft Start + if ( + typeof engine.isBrakeActive === "function" && + (engine.isBrakeActive(deck) || engine.isSoftStartActive(deck)) && + value // ON + ) { + + return; + } + + // Don't set Cue at the end of the song + if (engine.getParameter(group, "playposition") > 0.97) { + engine.setParameter(group, "cue_goto", value ? 1 : 0); + } else { + engine.setParameter(group, "cue_default", value ? 1 : 0); + } +}; NumarkMixTrackPro.beatsync = function(channel, control, value, status, group) { - - var deck = NumarkMixTrackPro.groupToDeck(group); - - if(NumarkMixTrackPro.deleteKey[deck-1]){ - - // Delete + SYNC = vuelve pitch a 0 - engine.softTakeover(group, "rate", false); - engine.setValue(group, "rate", 0); - engine.softTakeover(group, "rate", true); - - NumarkMixTrackPro.toggleDeleteKey(channel, control, value, status, group); - - } else { - - if (deck == 1) { - // si la otra deck esta en stop, sincronizo sólo el tempo (no el golpe) - if(!engine.getValue("[Channel2]", "play")) { - engine.setValue(group, "beatsync_tempo", value ? 1 : 0); - } else { - engine.setValue(group, "beatsync", value ? 1 : 0); - } - } - - if (deck == 2) { - // si la otra deck esta en stop, sincronizo sólo el tempo (no el golpe) - if(!engine.getValue("[Channel1]", "play")) { - engine.setValue(group, "beatsync_tempo", value ? 1 : 0); - } else { - engine.setValue(group, "beatsync", value ? 1 : 0); - } - } - } -} - + const deck = script.deckFromGroup(group); + + if (NumarkMixTrackPro.shiftKey[deck - 1]) { + // Shift + SYNC = reset rate to 0, at half (0.5) + engine.softTakeover(group, "rate", false); + engine.setParameter(group, "rate", 0.5); + engine.softTakeover(group, "rate", true); + + // Reset shift key state + NumarkMixTrackPro.toggleShiftKey(channel, control, value, status, group); + } else { + // New sync_enabled. Fix for Leader persistent, same as GUI + // define an Handler and link to global var + const lastTimestampHandler = (deck) => { + const index = deck - 1; + return { + get: () => NumarkMixTrackPro.syncLastTimestamp[index], + set: (value) => { + NumarkMixTrackPro.syncLastTimestamp[index] = value; + }, + }; + }; + const lastTimestamp = lastTimestampHandler(deck); + + const syncLeader = engine.getParameter(group, "sync_leader"); + const timestamp = Date.now(); + + if (value) { + if (!syncLeader) { + engine.setParameter(group, "sync_enabled", true); + lastTimestamp.set(timestamp); + } else { + engine.setParameter(group, "sync_enabled", false); + lastTimestamp.set(0); + } + } else { + if (lastTimestamp.get() === 0) { + return; + } + if (timestamp - lastTimestamp.get() < 250) { + engine.setParameter(group, "sync_enabled", false); + } + // else for long press > 250 ms, do nothing + } + } +}; NumarkMixTrackPro.playbutton = function(channel, control, value, status, group) { - - if (!value) return; - - var deck = NumarkMixTrackPro.groupToDeck(group); - - if (engine.getValue(group, "play")) { - engine.setValue(group, "play", 0); - }else{ - engine.setValue(group, "play", 1); - } - -} - + if (!value) { + // (NoteOff, 0x00, button up) + return; + } + + const deck = script.deckFromGroup(group); + + if (typeof engine.isBrakeActive !== "function") { + // Legacy Mixxx v.2.5 + // Play/Pause standard + script.toggleControl(group, "play"); + } else { + // Mixxx v.2.6+ required + // Brake and Soft Start if scratch led is on and setting is enabled. + // Else Play/Pause standard + if (engine.getParameter(group, "play")) { + if ( + NumarkMixTrackPro.settings.brakeEnabled && + NumarkMixTrackPro.scratchMode[deck - 1] && + !engine.isScratching(deck) && + engine.getParameter(group, "play_latched") + ) { + engine.brake(deck, true); + } else { + engine.setParameter(group, "play", 0); + } + } else { + if ( + NumarkMixTrackPro.settings.softStartEnabled && + NumarkMixTrackPro.scratchMode[deck - 1] && + !engine.isScratching(deck) && + !engine.getParameter(group, "play_latched") + ) { + engine.softStart(deck, true); + } else { + engine.setParameter(group, "play", 1); + } + } + } +}; + +NumarkMixTrackPro.toggleManualLooping = function( + channel, + control, + value, + status, + group +) { + if (!value) { return; } + + const deck = script.deckFromGroup(group); + + if (NumarkMixTrackPro.shiftKey[deck - 1]) { + // If Shift is on, toggle quantize + script.toggleControl(group, "quantize"); + + NumarkMixTrackPro.toggleShiftKey(channel, control, value, status, group); + } else { + NumarkMixTrackPro.setLoopMode( + deck, + !NumarkMixTrackPro.manualLoop[deck - 1] + ); + } +}; NumarkMixTrackPro.loopIn = function(channel, control, value, status, group) { - var deck = NumarkMixTrackPro.groupToDeck(group); - - if (NumarkMixTrackPro.manualLoop[deck-1]){ - if (!value) return; - // Act like the Mixxx UI - engine.setValue(group, "loop_in", status?1:0); - return; - } - - // Auto Loop: 1/2 loop size - var start = engine.getValue(group, "loop_start_position"); - var end = engine.getValue(group, "loop_end_position"); - if (start<0 || end<0) { - NumarkMixTrackPro.flashLED(NumarkMixTrackPro.leds[deck]["loop_start_position"], 4); - return; - } - - if (value){ - var start = engine.getValue(group, "loop_start_position"); - var end = engine.getValue(group, "loop_end_position"); - var len = (end - start) / 2; - engine.setValue(group, "loop_end_position", start + len); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["loop_start_position"], true); - } else { - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["loop_start_position"], false); - } -} + if (!value) { + return; + } + + const deck = script.deckFromGroup(group); + + if (NumarkMixTrackPro.manualLoop[deck - 1]) { + // Manual Mode + script.triggerControl(group, "loop_in", 100); + } else { + // Auto Mode + const loopActive = engine.getParameter(group, "loop_enabled"); + if (loopActive) { + script.triggerControl(group, "loop_halve", 1); + } else { + engine.setParameter(group, "beatloop_1_activate", 1); + } + } +}; NumarkMixTrackPro.loopOut = function(channel, control, value, status, group) { - var deck = NumarkMixTrackPro.groupToDeck(group); - - if (!value) return; - - if (NumarkMixTrackPro.manualLoop[deck-1]){ - // Act like the Mixxx UI - engine.setValue(group, "loop_out", status?1:0); - return; - } - - var isLoopActive = engine.getValue(group, "loop_enabled"); - - // Set a 4 beat auto loop or exit the loop - - if(!isLoopActive){ - engine.setValue(group,"beatloop_4",1); - }else{ - engine.setValue(group,"beatloop_4",0); - } - -} - -NumarkMixTrackPro.repositionHack = function(group, oldPosition){ - // see if the value has been updated - if (engine.getValue(group, "loop_start_position")==oldPosition){ - if (NumarkMixTrackPro.hackCount[group]++ < 9){ - engine.beginTimer(20, "NumarkMixTrackPro.repositionHack('" + group + "', " + oldPosition + ")", true); - } else { - var deck = NumarkMixTrackPro.groupToDeck(group); - NumarkMixTrackPro.flashLED(NumarkMixTrackPro.leds[deck]["loop_start_position"], 4); - } - return; - } - var bar = NumarkMixTrackPro.samplesPerBeat(group); - var start = engine.getValue(group, "loop_start_position"); - engine.setValue(group,"loop_end_position", start + bar); -} + if (!value) { + return; + } + + const deck = script.deckFromGroup(group); + + if (NumarkMixTrackPro.manualLoop[deck - 1]) { + // Manual Mode: set LoopOut point + script.triggerControl(group, "loop_out", 100); + } else { + // Auto mode: loop of 4 beat (1 bar) + const isLoopActive = engine.getParameter(group, "loop_enabled"); + + if (!isLoopActive) { + engine.setParameter(group, "beatloop_4_activate", 1); + } else { + engine.setParameter(group, "loop_enabled", 0); + } + } +}; NumarkMixTrackPro.reLoop = function(channel, control, value, status, group) { - var deck = NumarkMixTrackPro.groupToDeck(group); - - if (NumarkMixTrackPro.manualLoop[deck-1]){ - // Act like the Mixxx UI (except for working delete) - if (!value) return; - if (NumarkMixTrackPro.deleteKey[deck-1]){ - engine.setValue(group, "reloop_exit", 0); - engine.setValue(group, "loop_start_position", -1); - engine.setValue(group, "loop_end_position", -1); - NumarkMixTrackPro.toggleDeleteKey(channel, control, value, status, group); - } else { - engine.setValue(group, "reloop_exit", status?1:0); - } - return; - } - - // Auto Loop: Double Loop Size - var start = engine.getValue(group, "loop_start_position"); - var end = engine.getValue(group, "loop_end_position"); - if (start<0 || end<0) { - NumarkMixTrackPro.flashLED(NumarkMixTrackPro.leds[deck]["reloop_exit"], 4); - return; - } - - if (value){ - var len = (end - start) * 2; - engine.setValue(group, "loop_end_position", start + len); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["reloop_exit"], true); - } else { - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["reloop_exit"], false); - } -} + if (!value) { return; } + + const deck = script.deckFromGroup(group); + + if (NumarkMixTrackPro.shiftKey[deck - 1]) { + // Shift: exit loop, reset Shift + script.triggerControl(group, "loop_remove", 50); + NumarkMixTrackPro.toggleShiftKey(channel, control, value, status, group); + } else if (NumarkMixTrackPro.manualLoop[deck - 1]) { + // Manual mode: recall last loop or exit current loop + script.triggerControl(group, "reloop_toggle", 1); + } else { + // Auto mode: 2x + const loopActive = engine.getParameter(group, "loop_enabled"); + if (loopActive) { + script.triggerControl(group, "loop_double", 1); + } else { + // recall last loop + script.triggerControl(group, "reloop_toggle", 1); + } + } +}; NumarkMixTrackPro.setLoopMode = function(deck, manual) { - - NumarkMixTrackPro.manualLoop[deck-1] = manual; - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["manualLoop"], !manual); - engine.connectControl("[Channel" + deck + "]", "loop_start_position", "NumarkMixTrackPro.onLoopChange", !manual); - engine.connectControl("[Channel" + deck + "]", "loop_end_position", "NumarkMixTrackPro.onLoopChange", !manual); - engine.connectControl("[Channel" + deck + "]", "loop_enabled", "NumarkMixTrackPro.onReloopExitChange", !manual); - engine.connectControl("[Channel" + deck + "]", "loop_enabled", "NumarkMixTrackPro.onReloopExitChangeAuto", manual); - - var group = "[Channel" + deck + "]" - if (manual){ - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["loop_start_position"], engine.getValue(group, "loop_start_position")>-1); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["loop_end_position"], engine.getValue(group, "loop_end_position")>-1); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["reloop_exit"], engine.getValue(group, "loop_enabled")); - }else{ - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["loop_start_position"], false); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["loop_end_position"], engine.getValue(group, "loop_enabled")); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["reloop_exit"], false); - } -} - -NumarkMixTrackPro.toggleManualLooping = function(channel, control, value, status, group) { - if (!value) return; - - var deck = NumarkMixTrackPro.groupToDeck(group); - - if(NumarkMixTrackPro.deleteKey[deck-1]){ - // activar o desactivar quantize - - if (engine.getValue(group, "quantize")) { - engine.setValue(group, "quantize", 0); - }else{ - engine.setValue(group, "quantize", 1); - } - - NumarkMixTrackPro.toggleDeleteKey(channel, control, value, status, group); - } else { - - NumarkMixTrackPro.setLoopMode(deck, !NumarkMixTrackPro.manualLoop[deck-1]); - } -} - -NumarkMixTrackPro.onLoopChange = function(value, group, key){ - var deck = NumarkMixTrackPro.groupToDeck(group); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck][key], value>-1? true : false); -} - -NumarkMixTrackPro.onReloopExitChange = function(value, group, key){ - var deck = NumarkMixTrackPro.groupToDeck(group); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]['reloop_exit'], value); -} - -NumarkMixTrackPro.onReloopExitChangeAuto = function(value, group, key){ - var deck = NumarkMixTrackPro.groupToDeck(group); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]['loop_end_position'], value); -} + NumarkMixTrackPro.manualLoop[deck - 1] = manual; + NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck].manualLoop, manual); + + const group = `[Channel${deck}]`; + + if (NumarkMixTrackPro.connections === undefined) { + NumarkMixTrackPro.connections = {}; + } + + if (NumarkMixTrackPro.connections[deck] === undefined) { + NumarkMixTrackPro.connections[deck] = {}; + } + + for (const conn in NumarkMixTrackPro.connections[deck]) { + if (NumarkMixTrackPro.connections[deck][conn]) { + NumarkMixTrackPro.connections[deck][conn].disconnect(); + NumarkMixTrackPro.connections[deck][conn] = null; + } + } + + // Create + if (manual) { + NumarkMixTrackPro.connections[deck].loopStart = engine.makeConnection( + group, + "loop_start_position", + NumarkMixTrackPro.onLoopChange + ); + + NumarkMixTrackPro.connections[deck].loopEnd = engine.makeConnection( + group, + "loop_end_position", + NumarkMixTrackPro.onLoopChange + ); + + NumarkMixTrackPro.connections[deck].loopEnabled = engine.makeConnection( + group, + "loop_enabled", + NumarkMixTrackPro.onReloopExitChange + ); + + // Update LED to the actual state + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].loop_start_position, + engine.getParameter(group, "loop_start_position") > -1 + ); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].loop_end_position, + engine.getParameter(group, "loop_end_position") > -1 + ); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].reloopExit, + engine.getParameter(group, "loop_enabled") + ); + } else { + // Auto Mode + NumarkMixTrackPro.connections[deck].loopEnabled = engine.makeConnection( + group, + "loop_enabled", + NumarkMixTrackPro.onReloopExitChangeAuto + ); + + // Update LED to Auto Mode + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].loop_start_position, + false + ); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].loop_end_position, + engine.getParameter(group, "loop_enabled") + ); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].reloopExit, + false + ); + } +}; + +NumarkMixTrackPro.onLoopChange = function(value, group, key) { + const deck = script.deckFromGroup(group); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck][key], + value > -1 + ); +}; + +NumarkMixTrackPro.onReloopExitChange = function(value, group) { + const deck = script.deckFromGroup(group); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].reloopExit, + value + ); +}; + +NumarkMixTrackPro.onReloopExitChangeAuto = function(value, group) { + const deck = script.deckFromGroup(group); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].loop_end_position, + value + ); +}; // Stutters adjust BeatGrid -NumarkMixTrackPro.playFromCue = function(channel, control, value, status, group) { - - var deck = NumarkMixTrackPro.groupToDeck(group); - - if (engine.getValue(group, "beats_translate_curpos")){ - - engine.setValue(group, "beats_translate_curpos", 0); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["stutter"], 0); - }else{ - engine.setValue(group, "beats_translate_curpos", 1); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["stutter"], 1); - } - -} - -NumarkMixTrackPro.pitch = function(channel, control, value, status, group) { - var deck = NumarkMixTrackPro.groupToDeck(group); - - var pitch_value = 0; - - if (value < 64) pitch_value = (value-64) /64; - if (value > 64) pitch_value = (value-64) /63; - - engine.setValue("[Channel"+deck+"]","rate",pitch_value); -} +NumarkMixTrackPro.playFromCue = function( + channel, + control, + value, + status, + group +) { + const deck = script.deckFromGroup(group); + + if (engine.getParameter(group, "beats_translate_curpos")) { + engine.setParameter(group, "beats_translate_curpos", 0); + NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck].stutter, 0); + } else { + engine.setParameter(group, "beats_translate_curpos", 1); + NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck].stutter, 1); + } +}; NumarkMixTrackPro.jogWheel = function(channel, control, value, status, group) { - var deck = NumarkMixTrackPro.groupToDeck(group); - -// if (!NumarkMixTrackPro.touch[deck-1] && !engine.getValue(group, "play")) return; - - var adjustedJog = parseFloat(value); - var posNeg = 1; - if (adjustedJog > 63) { // Counter-clockwise - posNeg = -1; - adjustedJog = value - 128; - } - - if (engine.getValue(group, "play")) { - - if (NumarkMixTrackPro.scratchMode[deck-1] && posNeg == -1 && !NumarkMixTrackPro.touch[deck-1]) { - - if (NumarkMixTrackPro.scratchTimer[deck-1] != -1) engine.stopTimer(NumarkMixTrackPro.scratchTimer[deck-1]); - NumarkMixTrackPro.scratchTimer[deck-1] = engine.beginTimer(20, () => {NumarkMixTrackPro.jogWheelStopScratch(deck); }, true); - } - - } else { // stop scratching - - if (!NumarkMixTrackPro.touch[deck-1]){ - - if (NumarkMixTrackPro.scratchTimer[deck-1] != -1) engine.stopTimer(NumarkMixTrackPro.scratchTimer[deck-1]); - NumarkMixTrackPro.scratchTimer[deck-1] = engine.beginTimer(20, () => { NumarkMixTrackPro.jogWheelStopScratch(); }, true); - } - - } - - engine.scratchTick(deck, adjustedJog); - - if (engine.getValue(group,"play")) { - var gammaInputRange = 13; // Max jog speed - var maxOutFraction = 0.8; // Where on the curve it should peak; 0.5 is half-way - var sensitivity = 0.5; // Adjustment gamma - var gammaOutputRange = 2; // Max rate change - - adjustedJog = posNeg * gammaOutputRange * Math.pow(Math.abs(adjustedJog) / (gammaInputRange * maxOutFraction), sensitivity); - engine.setValue(group, "jog", adjustedJog); - } - -} - + // a.k.a. wheelTurn + const deck = script.deckFromGroup(group); + + let adjustedJog = parseFloat(value); // 1; 2; ...; 13 or 120; ...; 127 + let posNeg = 1; + if (adjustedJog > 63) { + // Counter-clockwise + posNeg = -1; + adjustedJog = value - 128; // -13 .. +13 + } + // Convert to float (+/- 0.6...) + const gammaInputRange = 13; // Max jog speed + const maxOutFraction = 0.8; // Where on the curve it should peak; 0.5 is half-way + const sensitivity = 0.5; // Adjustment gamma + const gammaOutputRange = 2; // Max rate change + + const adjustedJogAdv = + posNeg * + gammaOutputRange * + Math.pow( + Math.abs(adjustedJog) / (gammaInputRange * maxOutFraction), + sensitivity + ); + + // Fast forward/rewind if beatjump_forward is pressed + if ( + NumarkMixTrackPro.isBeatJumpForwardOn[deck - 1] || + NumarkMixTrackPro.isBeatJumpBackwardOn[deck - 1] + ) { + // const x = parseFloat(value); + // console.log("x; adjustedJog; adjustedJogAdv", x, adjustedJog, adjustedJogAdv); + engine.setParameter(group, "beatjump", adjustedJog); + return; + } + + // Loop editing by Wheel + const loopActive = engine.getParameter(group, "loop_enabled"); + + if ( + NumarkMixTrackPro.settings.editLoopByWheelEnabled && + loopActive && + !NumarkMixTrackPro.scratchMode[deck - 1] && + NumarkMixTrackPro.touch[deck - 1] + ) { + if (NumarkMixTrackPro.loopEditIn[deck - 1] === -1) { + NumarkMixTrackPro.loopEditIn[deck - 1] = adjustedJog < 0 ? 0 : 1; + } + + if (NumarkMixTrackPro.loopEditIn[deck - 1] === 1) { + // begin a loop move + // loop_move_X... is very raw... + const x = engine.getParameter(group, "loop_start_position"); + const y = x + adjustedJog * 300; // 44100 / 300 = 147 parts per second + engine.setParameter(group, "loop_start_position", y); + return; + } + + if (NumarkMixTrackPro.loopEditIn[deck - 1] === 0) { + const scale = 1 + adjustedJog * 0.0009; + engine.setParameter(group, "loop_scale", scale); + return; + } + } + + // Normal usage + if (engine.isScratching(deck)) { + engine.scratchTick(deck, adjustedJog); // Scratch! + if (posNeg === -1) { + // only in backspin save timestamp for inertia wheel + NumarkMixTrackPro.scratchLast[deck - 1] = Date.now(); + } + } else { + engine.setValue(group, "jog", adjustedJogAdv); // Pitch bend + } +}; NumarkMixTrackPro.jogWheelStopScratch = function(deck) { - NumarkMixTrackPro.scratchTimer[deck-1] = -1; - engine.scratchDisable(deck); -} - -NumarkMixTrackPro.wheelTouch = function(channel, control, value, status, group){ - - var deck = NumarkMixTrackPro.groupToDeck(group); - - if(!value){ - - NumarkMixTrackPro.touch[deck-1]= false; - -// paro el timer (si no existe da error mmmm) y arranco un nuevo timer. -// Si en 20 milisegundos no se mueve el plato, desactiva el scratch - - if (NumarkMixTrackPro.scratchTimer[deck-1] != -1) engine.stopTimer(NumarkMixTrackPro.scratchTimer[deck-1]); - - NumarkMixTrackPro.scratchTimer[deck-1] = engine.beginTimer(20, () => { NumarkMixTrackPro.jogWheelStopScratch(deck); }, true); - - } else { - - // if playing and scratch mode is disabled, do nothing on press - if (!NumarkMixTrackPro.scratchMode[deck-1] && engine.getValue(group, "play")) return; - - if (NumarkMixTrackPro.scratchTimer[deck-1] != -1) engine.stopTimer(NumarkMixTrackPro.scratchTimer[deck-1]); - - // change the 600 value for sensibility - engine.scratchEnable(deck, 600, 33+1/3, 1.0/8, (1.0/8)/32); - - NumarkMixTrackPro.touch[deck-1]= true; - } -} - -NumarkMixTrackPro.toggleDirectoryMode = function(channel, control, value, status, group) { - // Toggle setting and light - if (value) { - NumarkMixTrackPro.directoryMode = !NumarkMixTrackPro.directoryMode; - - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[0]["directory"], NumarkMixTrackPro.directoryMode); - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[0]["file"], !NumarkMixTrackPro.directoryMode); - } -} - -NumarkMixTrackPro.toggleScratchMode = function(channel, control, value, status, group) { - if (!value) return; - - var deck = NumarkMixTrackPro.groupToDeck(group); - // Toggle setting and light - NumarkMixTrackPro.scratchMode[deck-1] = !NumarkMixTrackPro.scratchMode[deck-1]; - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["scratchMode"], NumarkMixTrackPro.scratchMode[deck-1]); -} - - -NumarkMixTrackPro.onHotCueChange = function(value, group, key){ - var deck = NumarkMixTrackPro.groupToDeck(group); - var hotCueNum = key[7]; - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["hotCue" + hotCueNum], value ? true : false); -} - -NumarkMixTrackPro.changeHotCue = function(channel, control, value, status, group){ - - var deck = NumarkMixTrackPro.groupToDeck(group); - var hotCue = NumarkMixTrackPro.hotCue[control]; - - // onHotCueChange called automatically - if(NumarkMixTrackPro.deleteKey[deck-1]){ - if (engine.getValue(group, "hotcue_" + hotCue + "_enabled")){ - engine.setValue(group, "hotcue_" + hotCue + "_clear", 1); - } - NumarkMixTrackPro.toggleDeleteKey(channel, control, value, status, group); - } else { - if (value) { - engine.setValue(group, "hotcue_" + hotCue + "_activate", 1); - - }else{ - - engine.setValue(group, "hotcue_" + hotCue + "_activate", 0); - } - } -} - - -NumarkMixTrackPro.toggleDeleteKey = function(channel, control, value, status, group){ - if (!value) return; - - var deck = NumarkMixTrackPro.groupToDeck(group); - NumarkMixTrackPro.deleteKey[deck-1] = !NumarkMixTrackPro.deleteKey[deck-1]; - NumarkMixTrackPro.setLED(NumarkMixTrackPro.leds[deck]["deleteKey"], NumarkMixTrackPro.deleteKey[deck-1]); -} + // Inertia debounce: Compare timestamp of last wheel movement + if ( + Date.now() - NumarkMixTrackPro.scratchLast[deck - 1] > 20 || + !engine.isScratching(deck) + ) { + engine.stopTimer(NumarkMixTrackPro.scratchTimer[deck - 1]); + NumarkMixTrackPro.scratchTimer[deck - 1] = -1; + NumarkMixTrackPro.scratchLast[deck - 1] = -1; + engine.scratchDisable(deck); + } +}; + +NumarkMixTrackPro.wheelTouch = function( + channel, + control, + value, + status, + group +) { + const deck = script.deckFromGroup(group); + NumarkMixTrackPro.touch[deck - 1] = !!value; + + if (!value) { + // Untouch! + // Reset loopEditIn + NumarkMixTrackPro.loopEditIn[deck - 1] = -1; + + // Disable scratching / backspin after untouch and wheel inertia after + + // Stop any previous timer + if (NumarkMixTrackPro.scratchTimer[deck - 1] !== -1) { + engine.stopTimer(NumarkMixTrackPro.scratchTimer[deck - 1]); + NumarkMixTrackPro.scratchTimer[deck - 1] = -1; + } + + // Start a timer + NumarkMixTrackPro.scratchTimer[deck - 1] = engine.beginTimer( + 20, // (20 ms minimal resolution) + () => { + NumarkMixTrackPro.jogWheelStopScratch(deck); + }, + false // non one-shot + ); + } else { + // Touch! + // if playing and scratch mode is disabled, do nothing on press + if ( + !NumarkMixTrackPro.scratchMode[deck - 1] && + engine.getParameter(group, "play") + ) { + return; + } + + // scratch disables braking, so stop if is braking to avoid re-play + if (typeof engine.isBrakeActive === "function") { + // Mixxx v.2.6+ required + + if (engine.isBrakeActive(deck) && NumarkMixTrackPro.settings.brakeEnabled) { + engine.setParameter(group, "play", 0); // Stop + } + + // TODO: little bug if engine.isSoftStartActive(deck), workaround: double-touch + // I don't understand why. + /* + if (engine.isSoftStartActive(deck) && NumarkMixTrackPro.settings.softStartEnabled) { + // force exit from SoftStart + engine.setParameter(group, "play", 0); // Stop + // not work + // engine.setParameter(group, "play", 1); // Play + } + */ + } + + // Cancel timer + if (NumarkMixTrackPro.scratchTimer[deck - 1] !== -1) { + engine.stopTimer(NumarkMixTrackPro.scratchTimer[deck - 1]); + NumarkMixTrackPro.scratchTimer[deck - 1] = -1; + } + + const sensibility = + NumarkMixTrackPro.settings.scratchSensibility || 600; + const alpha = 1.0 / 8; + const beta = alpha / 32; + engine.scratchEnable(deck, sensibility, 33 + 1 / 3, alpha, beta); + } +}; + +NumarkMixTrackPro.toggleDirectoryMode = function( + channel, + control, + value +) { + // Toggle setting and light + if (value) { + NumarkMixTrackPro.directoryMode = !NumarkMixTrackPro.directoryMode; + // https://manual.mixxx.org/latest/chapters/appendix/mixxx_controls.html#control-[Library]-focused_widget + /* + if (NumarkMixTrackPro.directoryMode) { + script.triggerControl('[Library]', 'MoveFocusBackward', 50); // [Shift+TAB]; [TAB]: MoveFocusForward + } + */ + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[0].directory, + NumarkMixTrackPro.directoryMode + ); + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[0].file, + !NumarkMixTrackPro.directoryMode + ); + } +}; + +NumarkMixTrackPro.onCentralKnobPress = function( + channel, + control, + value +) { + if (!value) { return; } + + // DEPRECADED mode but better + if (NumarkMixTrackPro.directoryMode) { + script.triggerControl("[Playlist]", "ToggleSelectedSidebarItem", 50); + } else { + script.triggerControl("[Playlist]", "LoadSelectedIntoFirstStopped", 50); + } + + // New Mode: TODO: fix leds in toggleDirectoryMode + // script.triggerControl('[Library]', 'GoToItem', 50); +}; + +NumarkMixTrackPro.toggleScratchMode = function( + channel, + control, + value, + status, + group +) { + if (!value) { + return; + } + + const deck = script.deckFromGroup(group); + // Toggle setting and light + NumarkMixTrackPro.scratchMode[deck - 1] = + !NumarkMixTrackPro.scratchMode[deck - 1]; + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].scratchMode, + NumarkMixTrackPro.scratchMode[deck - 1] + ); +}; + +NumarkMixTrackPro.onHotCueChange = function(value, group, key) { + const deck = script.deckFromGroup(group); + const hotCueNum = key[7]; + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck][`hotCue${hotCueNum}`], + !!value + ); +}; + +NumarkMixTrackPro.changeHotCue = function( + channel, + control, + value, + status, + group +) { + const deck = script.deckFromGroup(group); + const hotCue = NumarkMixTrackPro.hotCue[control]; + + // onHotCueChange called automatically + if (NumarkMixTrackPro.shiftKey[deck - 1]) { + if (engine.getParameter(group, `hotcue_${hotCue}_enabled`)) { + script.triggerControl(group, `hotcue_${hotCue}_clear`, 50); + } + NumarkMixTrackPro.toggleShiftKey(channel, control, value, status, group); + } else { + // Press and realise button (no trigger) + if (value) { + engine.setParameter(group, `hotcue_${hotCue}_activate`, 1); + } else { + engine.setParameter(group, `hotcue_${hotCue}_activate`, 0); + } + } +}; + +NumarkMixTrackPro.toggleShiftKey = function( + channel, + control, + value, + status, + group +) { + // used as [Shift], aka "VIEW" and "TICK" buttons + // was toggleDeleteKey + + if (!value) { + return; + } + + const deck = script.deckFromGroup(group); + NumarkMixTrackPro.shiftKey[deck - 1] = !NumarkMixTrackPro.shiftKey[deck - 1]; + NumarkMixTrackPro.setLED( + NumarkMixTrackPro.leds[deck].shiftKey, + NumarkMixTrackPro.shiftKey[deck - 1] + ); +}; + +NumarkMixTrackPro.mid = function(channel, control, value, status, group) { + // used as Mid or Filter if Shift* is on + if (isNaN(value)) { return; } + + const deck = script.deckFromGroup(group); + const _value = script.absoluteLin(value, 0, 1); + + if ( + (NumarkMixTrackPro.settings.quickFxActivator === "cue" && + NumarkMixTrackPro.isPflOn[deck - 1]) || + (NumarkMixTrackPro.settings.quickFxActivator === "shift" && + NumarkMixTrackPro.shiftKey[deck - 1]) || + (NumarkMixTrackPro.settings.quickFxActivator === "effect" && + NumarkMixTrackPro.isFxOn[deck - 1]) + ) { + // Filter, or the selected FX in Quick Effect Rack + // TODO: Add soft takeover? + engine.setParameter(`[QuickEffectRack1_${group}]`, "super1", _value); + } else { + // Mid + engine.setParameter( + `[EqualizerRack1_${group}_Effect1]`, + "parameter2", + _value + ); + } +}; + +NumarkMixTrackPro.fxSelectKnobPress = function( + channel, + control, + value, + status, + group +) { + const deck = script.deckFromGroup(group); + + // [QuickEffectRack1_[Channel1]] or [QuickEffectRack1_[Channel2]] + if (value === 127) { + script.triggerControl( + `[QuickEffectRack1_${group}]`, + "super1_set_default", + 100 + ); + NumarkMixTrackPro.fxKnobPressed[deck - 1] = true; + } else { + NumarkMixTrackPro.fxKnobPressed[deck - 1] = false; + } +}; + +NumarkMixTrackPro.fxSelectKnobRotate = function( + channel, + control, + value, + status, + group +) { + const deck = script.deckFromGroup(group); + if (NumarkMixTrackPro.fxKnobPressed[deck - 1]) { + if (deck === 1) { + if (value === 0x7f) { + script.triggerControl(group, "waveform_zoom_down", 100); + } else { + script.triggerControl(group, "waveform_zoom_up", 100); + } + } + } else { + // Select FX + const deck = script.deckFromGroup(group); + const fxGroup = `[EffectRack1_EffectUnit${deck}_Effect1]`; + if (value === 1) { + engine.setParameter(fxGroup, "effect_selector", -1); + } else { + engine.setParameter(fxGroup, "effect_selector", +1); + } + } +}; diff --git a/res/controllers/Traktor Kontrol S4 MK3.bulk.xml b/res/controllers/Traktor Kontrol S4 MK3.bulk.xml new file mode 100644 index 000000000000..9ff549336099 --- /dev/null +++ b/res/controllers/Traktor Kontrol S4 MK3.bulk.xml @@ -0,0 +1,636 @@ + + + + Traktor Kontrol S4 MK3 (Screens) + A. Colombier + Mapping for Traktor Kontrol S4 MK3 screens + native_instruments_traktor_kontrol_s4_mk3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/controllers/TraktorKontrolS4MK3Screens.qml b/res/controllers/TraktorKontrolS4MK3Screens.qml new file mode 100644 index 000000000000..10a2df52539c --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens.qml @@ -0,0 +1,217 @@ +import QtQuick 2.15 +import QtQuick.Window 2.3 + +import QtQuick.Controls 2.15 +import QtQuick.Shapes 1.11 +import QtQuick.Layouts 1.3 +import QtQuick.Window 2.15 + +import Qt5Compat.GraphicalEffects + +import "." as Skin +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +import S4MK3 as S4MK3 + +Mixxx.ControllerScreen { + id: root + + required property string screenId + property color fontColor: Qt.rgba(242/255,242/255,242/255, 1) + property color smallBoxBorder: Qt.rgba(44/255,44/255,44/255, 1) + + property string group: screenId == "rightdeck" ? "[Channel2]" : "[Channel1]" + property string theme: engine.getSetting("theme") || "stock" + + readonly property bool isStockTheme: theme == "stock" + + property var lastFrame: null + + init: function(_controllerName, isDebug) { + console.log(`Screen ${root.screenId} has started with theme ${root.theme}`) + root.state = "Live" + } + + shutdown: function() { + console.log(`Screen ${root.screenId} is stopping`) + root.state = "Stop" + } + + transformFrame: function(input, timestamp) { + let updated = new Uint8Array(320*240); + updated.fill(0) + + let updatedPixelCount = 0; + let updated_zones = []; + + if (!root.lastFrame) { + root.lastFrame = new ArrayBuffer(input.byteLength); + updatedPixelCount = input.byteLength / 2; + updated_zones.push({ + x: 0, + y: 0, + width: 320, + height: 240, + }) + } else { + const view_input = new Uint8Array(input); + const view_last = new Uint8Array(root.lastFrame); + + for (let i = 0; i < 320 * 240; i++) { + } + + let current_rect = null; + + for (let y = 0; y < 240; y++) { + let line_changed = false; + for (let x = 0; x < 320; x++) { + let i = y * 320 + x; + if (view_input[2 * i] != view_last[2 * i] || view_input[2 * i + 1] != view_last[2 * i + 1]) { + line_changed = true; + updatedPixelCount++; + break; + } + } + if (current_rect !== null && line_changed) { + current_rect.height++; + } else if (current_rect !== null) { + updated_zones.push(current_rect); + current_rect = null; + } else if (current_rect === null && line_changed) { + current_rect = { + x: 0, + y, + width: 320, + height: 1, + }; + } + } + if (current_rect !== null) { + updated_zones.push(current_rect); + } + } + new Uint8Array(root.lastFrame).set(new Uint8Array(input)); + + if (!updatedPixelCount) { + return new ArrayBuffer(0); + } else if (root.renderDebug) { + console.log(`Pixel updated: ${updatedPixelCount}, ${updated_zones.length} areas`); + } + + // No redraw needed, stop right there + + let totalPixelToDraw = 0; + for (const area of updated_zones) { + area.x -= Math.min(2, area.x); + area.y -= Math.min(2, area.y); + area.width += Math.min(4, 320 - area.x - area.width); + area.height += Math.min(4, 240 - area.y - area.height); + totalPixelToDraw += area.width*area.height; + } + + if (totalPixelToDraw != 320*240 && (totalPixelToDraw > 320 * 180 || updated_zones.length > 20)) { + if (root.renderDebug) { + console.log(`Full redraw instead of ${totalPixelToDraw} pixels/${updated_zones.length} areas`) + } + totalPixelToDraw = 320*240 + updated_zones = [{ + x: 0, + y: 0, + width: 320, + height: 240, + }] + } else if (root.renderDebug) { + console.log(`Redrawing ${totalPixelToDraw} pixels`) + } + + const screenIdx = screenId === "leftdeck" ? 0 : 1; + + const outputData = new ArrayBuffer(totalPixelToDraw*2 + 20*updated_zones.length); // Number of pixel + 20 (header/footer size) x the number of region + let offset = 0; + + for (const area of updated_zones) { + const header = new Uint8Array(outputData, offset, 16); + const payload = new Uint8Array(outputData, offset + 16, area.width*area.height*2); + const footer = new Uint8Array(outputData, offset + area.width*area.height*2 + 16, 4); + + header.fill(0) + footer.fill(0) + header[0] = 0x84; + header[2] = screenIdx; + header[3] = 0x21; + + header[8] = area.x >> 8; + header[9] = area.x & 0xff; + header[10] = area.y >> 8; + header[11] = area.y & 0xff; + + header[12] = area.width >> 8; + header[13] = area.width & 0xff; + header[14] = area.height >> 8; + header[15] = area.height & 0xff; + + if (area.x === 0 && area.width === 320) { + payload.set(new Uint8Array(input, area.y * 320 * 2, area.width*area.height*2)); + } else { + for (let y = 0; y < area.height; y++) { + payload.set( + new Uint8Array(input, ((area.y + y) * 320 + area.x) * 2, area.width * 2), + y * area.width * 2); + } + } + footer[0] = 0x40; + footer[2] = screenIdx; + offset += area.width*area.height*2 + 20 + } + if (root.renderDebug) { + console.log(`Generated ${offset} bytes to be sent`) + } + // return new ArrayBuffer(0); + return outputData; + } + + Component { + id: splashOff + S4MK3.SplashOff { + anchors.fill: parent + } + } + Component { + id: stockLive + S4MK3.StockScreen { + group: root.group + screenId: root.screenId + anchors.fill: parent + } + } + Component { + id: advancedLive + S4MK3.AdvancedScreen { + isLeftScreen: root.screenId == "leftdeck" + } + } + + Loader { + id: loader + anchors.fill: parent + sourceComponent: splashOff + } + + states: [ + State { + name: "Live" + PropertyChanges { + target: loader + sourceComponent: isStockTheme ? stockLive : advancedLive + } + }, + State { + name: "Stop" + PropertyChanges { + target: loader + sourceComponent: splashOff + } + } + ] +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen.qml new file mode 100755 index 000000000000..77032739cda1 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen.qml @@ -0,0 +1,64 @@ +import QtQuick 2.15 + +import './AdvancedScreen/Defines' as Defines +import './AdvancedScreen/Views' as Views +import './AdvancedScreen' as S4MK3 + +//---------------------------------------------------------------------------------------------------------------------- +// S4MK3 Screen - manage top/bottom deck of one screen +//---------------------------------------------------------------------------------------------------------------------- + +Item { + id: screen + + required property bool isLeftScreen + + //-------------------------------------------------------------------------------------------------------------------- + + readonly property int topDeckId: isLeftScreen ? 1 : 2 + readonly property int bottomDeckId: isLeftScreen ? 3 : 4 + property bool propTopDeckFocus: true + + Defines.Font {id: fonts} + Defines.Utils {id: utils} + Defines.Settings {id: settings} + Defines.Durations {id: durations} + Defines.Colors {id: colors} + + Component.onCompleted: { + if (typeof engine.makeSharedDataConnection === "function") { + engine.makeSharedDataConnection(screen.onSharedDataUpdate) + screen.onSharedDataUpdate(engine.getSharedData()) + } + } + + function onSharedDataUpdate(data) { + if (typeof data === "object" && typeof data.group === "object") { + propTopDeckFocus = data.group[isLeftScreen ? 'leftdeck' : 'rightdeck'] === `[Channel${screen.topDeckId}]` + } + } + + width: 320 + height: 240 + clip: true + + /* + A screen is visible if - + The deck is in focus and the linked deck is not selecting a sample slot + OR + The deck is not in focus but a sample slot is selected + */ + S4MK3.DeckScreen { + id: topDeckScreen + deckId: topDeckId + visible: propTopDeckFocus + anchors.fill: parent + } + + S4MK3.DeckScreen { + id: bottomDeckScreen + deckId: bottomDeckId + visible: !propTopDeckFocus + anchors.fill: parent + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/BrowserFooter.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/BrowserFooter.qml new file mode 100755 index 000000000000..edd2dea43929 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/BrowserFooter.qml @@ -0,0 +1,340 @@ +import QtQuick 2.15 + +import Mixxx 1.0 as Mixxx + +import '../Defines' as Defines +import '../Defines' as Defines +import '../ViewModels' as ViewModels + +//------------------------------------------------------------------------------------------------------------------ +// LIST ITEM - DEFINES THE INFORMATION CONTAINED IN ONE LIST ITEM +//------------------------------------------------------------------------------------------------------------------ +Rectangle { + id: footer + + Defines.Colors { id: colors } + + required property var deckInfo + + property string propertiesPath: "" + property real sortingKnobValue: 0.0 + property bool isContentList: qmlBrowser.isContentList + property int maxCount: 0 + property int count: 0 + + // the given numbers are determined by the EContentListColumns in Traktor + readonly property variant sortIds: [0 ,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + readonly property variant sortNames: ["Sort By #", "Sort By #", "Title", "Artist", "Time", "BPM", "Track #", "Release", "Label", "Genre", "Key Text", "Comment", "Lyrics", "Comment 2", "Path", "Analysed", "Remixer", "Producer", "Mix", "CAT #", "Rel. Date", "Bitrate", "Rating", "Count", "Sort By #", "Cover Art", "Last Played", "Import Date", "Key", "Color", "File Name"] + readonly property int selectedFooterId: (selectedFooterItem.value === undefined) ? 0 : ( ( selectedFooterItem.value % 2 === 1 ) ? 1 : 4 ) // selectedFooterItem.value takes values from 1 to 4. + + property real preSortingKnobValue: 0.0 + + //-------------------------------------------------------------------------------------------------------------------- + + // AppProperty { id: previewIsLoaded; path : "app.traktor.browser.preview_player.is_loaded" } + QtObject { + id: previewIsLoaded + property string description: "Description" + property var value: 0 + } + // AppProperty { id: previewTrackLenght; path : "app.traktor.browser.preview_content.track_length" } + QtObject { + id: previewTrackLenght + property string description: "Description" + property var value: 0 + } + // AppProperty { id: previewTrackElapsed; path : "app.traktor.browser.preview_player.elapsed_time" } + QtObject { + id: previewTrackElapsed + property string description: "Description" + property var value: 0 + } + + // MappingProperty { id: overlayState; path: propertiesPath + ".overlay" } + QtObject { + id: overlayState + property string description: "Description" + property var value: 0 + } + // MappingProperty { id: isContentListProp; path: propertiesPath + ".browser.is_content_list" } + QtObject { + id: isContentListProp + property string description: "Description" + property var value: 0 + } + // MappingProperty { id: selectedFooterItem; path: propertiesPath + ".selected_footer_item" } + QtObject { + id: selectedFooterItem + property string description: "Description" + property var value: 0 + } + + //-------------------------------------------------------------------------------------------------------------------- + // Behavior on Sorting Changes (show/hide sorting widget, select next allowed sorting) + //-------------------------------------------------------------------------------------------------------------------- + + onIsContentListChanged: { + // We need this to be able do disable mappings (e.g. sorting ascend/descend) + isContentListProp.value = isContentList; + } + + onSortingKnobValueChanged: { + if (!footer.isContentList) + return; + + overlayState.value = Overlay.sorting; + sortingOverlayTimer.restart(); + + var val = clamp(footer.sortingKnobValue - footer.preSortingKnobValue, -1, 1); + val = parseInt(val); + if (val != 0) { + qmlBrowser.sortingId = getSortingIdWithDelta( val ); + footer.preSortingKnobValue = footer.sortingKnobValue; + } + } + + Timer { + id: sortingOverlayTimer + interval: 800 // duration of the scrollbar opacity + repeat: false + + onTriggered: overlayState.value = Overlay.none; + } + + //-------------------------------------------------------------------------------------------------------------------- + // View + //-------------------------------------------------------------------------------------------------------------------- + + clip: true + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 21 + (settings.raiseBrowserFooter ? 4 : 0) // set in state + color: "transparent" + + // background color + Rectangle { + id: browserFooterBg + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 15 + (settings.raiseBrowserFooter ? 4 : 0) + color: colors.colorBrowserHeader // footer background color + } + + Row { + id: sortingRow + anchors.left: browserFooterBg.left + anchors.leftMargin: 1 + anchors.top: browserFooterBg.top + + Item { + width: 100 + height: 15 + (settings.raiseBrowserFooter ? 4 : 0) + + Text { + font.pixelSize: fonts.scale(12) + anchors.left: parent.left + anchors.leftMargin: 3 + font.capitalization: Font.AllUppercase + color: selectedFooterId == 1 ? "white" : colors.colorFontBrowserHeader + text: getSortingNameForSortId(qmlBrowser.sortingId) + visible: qmlBrowser.isContentList + } + // Arrow (Sorting Direction Indicator) + Triangle { + id: sortDirArrow + width: 10 + height: 10 + anchors.top: parent.top + anchors.right: parent.right + anchors.topMargin: 2 + anchors.rightMargin: 6 + antialiasing: false + visible: qmlBrowser.sortingId > 0 + color: colors.colorGrey80 + rotation: ((qmlBrowser.sortingDirection == 1) ? 0 : 180) + } + Rectangle { + id: divider + height: 15 + width: 1 + color: colors.colorGrey40 // footer divider color + anchors.right: parent.right + } + } + + // Preview Player footer + Item { + width: 120 + height: 15 + + Text { + font.pixelSize: fonts.scale(12) + anchors.left: parent.left + anchors.leftMargin: 5 + font.capitalization: Font.AllUppercase + visible: !previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : "green" + text: deckInfo.masterDeckLetter + } + + Text { + font.pixelSize: fonts.scale(12) + anchors.left: parent.left + anchors.leftMargin: 20 + font.capitalization: Font.AllUppercase + visible: !previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : colors.colorFontBrowserHeader + text: deckInfo.masterBPMFooter + } + + Text { + font.pixelSize: fonts.scale(12) + anchors.right: parent.right + anchors.rightMargin: 5 + font.capitalization: Font.AllUppercase + visible: !previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : colors.musicalKeyColorsDark[deckInfo.masterKeyIndex] + text: settings.camelotKey ? utils.camelotConvert(deckInfo.masterKey) : deckInfo.masterKey + } + + Text { + font.pixelSize: fonts.scale(12) + anchors.left: parent.left + anchors.leftMargin: 5 + font.capitalization: Font.AllUppercase + visible: previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : colors.colorFontBrowserHeader + text: "Preview" + } + + // Image { + // anchors.top: parent.top + // anchors.right: parent.right + // anchors.topMargin: 2 + // anchors.rightMargin: 45 + // visible: previewIsLoaded.value + // antialiasing: false + // source: "../Images/PreviewIcon_Small.png" + // fillMode: Image.Pad + // clip: true + // cache: false + // sourceSize.width: width + // sourceSize.height: height + // } + Text { + width: 40 + clip: true + horizontalAlignment: Text.AlignRight + visible: previewIsLoaded.value + anchors.top: parent.top + anchors.right: parent.right + anchors.topMargin: 2 + anchors.rightMargin: 7 + font.pixelSize: fonts.scale(12) + font.capitalization: Font.AllUppercase + font.family: "Pragmatica" + color: colors.browser.prelisten + text: utils.convertToTimeString(previewTrackElapsed.value) + } + Rectangle { + id: divider2 + height: 15 + width: 1 + color: colors.colorGrey40 // footer divider color + anchors.right: parent.right + } + } + + Item { + width: 80 + height: 15 + + Text { + Text { + font.pixelSize: fonts.scale(12) + anchors.left: parent.left + anchors.leftMargin: 5 + font.capitalization: Font.AllUppercase + visible: true + color: colors.colorFontBrowserHeader + text: count+"/"+maxCount + } + } + } + } + + //-------------------------------------------------------------------------------------------------------------------- + // black border & shadow + //-------------------------------------------------------------------------------------------------------------------- + + Rectangle { + id: browserHeaderBottomGradient + height: 3 + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: browserHeaderBlackBottomLine.top + gradient: Gradient { + GradientStop { position: 0.0; color: colors.colorBlack0 } + GradientStop { position: 1.0; color: colors.colorBlack38 } + } + } + + Rectangle { + id: browserHeaderBlackBottomLine + height: 2 + color: colors.colorBlack + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: browserFooterBg.top + } + + //------------------------------------------------------------------------------------------------------------------ + + state: "show" + states: [ + State { + name: "show" + PropertyChanges { target: footer; height: 21 + (settings.raiseBrowserFooter ? 4 : 0) } + }, + State { + name: "hide" + PropertyChanges { target: footer; height: 0 } + } + ] + + //-------------------------------------------------------------------------------------------------------------------- + // Necessary Functions + //-------------------------------------------------------------------------------------------------------------------- + + function getSortingIdWithDelta( delta ) { + var curPos = getPosForSortId( qmlBrowser.sortingId ); + var pos = curPos + delta; + var count = sortIds.length; + + pos = (pos < 0) ? count-1 : pos; + pos = (pos >= count) ? 0 : pos; + + return sortIds[pos]; + } + + function getPosForSortId(id) { + if (id == -1) return 0; // -1 is a special case which should be interpreted as "0" + for (var i=0; i= 0 && pos < sortNames.length) + return sortNames[pos]; + return "SORTED"; + } + + function clamp(val, min, max) { + return Math.max( Math.min(val, max) , min ); + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/BrowserHeader.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/BrowserHeader.qml new file mode 100755 index 000000000000..5e258cd4995b --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/BrowserHeader.qml @@ -0,0 +1,223 @@ +import QtQuick 2.15 + +import Mixxx 1.0 as Mixxx + +import '../Defines' as Defines +import '../ViewModels' as ViewModels + +//------------------------------------------------------------------------------------------------------------------ +// BROWSER HEADER - SHOWS THE CURRENT BROWSER PATH +//------------------------------------------------------------------------------------------------------------------ +Item { + id: header + + Defines.Colors { id: colors } + + property int currentDeck: 0 + property int nodeIconId: 0 + + readonly property color itemColor: colors.colorWhite19 + property int highlightIndex: 0 + + readonly property var letters: ["","A", "B", "C", "D"] + + property string pathStrings: "" // the complete path in one string given by QBrowser with separator " | " + property var stringList: [""] // list of separated path elements (calculated in "updateStringList") + property int stringListModelSize: 0 // nr of entries which can be displayed in the header ( calc in updateStringList) + readonly property int maxTextWidth: 150 // if a single text path block is bigger than this: ElideMiddle + readonly property int arrowContainerWidth: 18 // width of the graphical separator arrow. includes left / right spacing + readonly property int fontSize: 13 + + clip: true + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: 17 // set in state + + onPathStringsChanged: { updateStringList(textLengthDummy) } + + //-------------------------------------------------------------------------------------------------------------------- + // NOTE: text item used within the 'updateStringList' function to determine how many of the stringList items can be fit + // in the header! + // IMPORTANT EXTRA NOTE: all texts in the header should have the same Capitalization and font size settings as the "dummy" + // as the dummy is used to calculate the number of text blocks fitting into the header. + //-------------------------------------------------------------------------------------------------------------------- + Text { + id: textLengthDummy + visible: false + font.capitalization: Font.AllUppercase + font.pixelSize: header.fontSize + } + + // calculates the number of entries to be displayed in the header + function updateStringList(dummy) { + var sum = 0 + var count = 0 + + stringList = pathStrings.split(" | ") + + for (var i = 0; i < stringList.length; ++i) { + dummy.text = header.stringList[stringList.length - i - 1] + + sum += (dummy.width) > maxTextWidth ? header.maxTextWidth : dummy.width + sum += arrowContainerWidth + + if (sum > (textContainter.width - header.arrowContainerWidth)) { + header.stringListModelSize = count + return + } + count++ + } + header.stringListModelSize = stringList.length; + } + + //-------------------------------------------------------------------------------------------------------------------- + // background color + Rectangle { + id: browserHeaderBg + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: 17 + color: colors.colorBrowserHeader //colors.colorGrey24 + } + + //-------------------------------------------------------------------------------------------------------------------- + + Item { + id: textContainter + readonly property int spaceToDeckLetter: 20 + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: deckLetter.left + anchors.leftMargin: 3 + anchors.rightMargin: spaceToDeckLetter + clip: true + + // dots appear at the left side of the browser in case the full path does not fit into the header anymore. + Item { + id: dots + anchors.left: parent.left + anchors.top: parent.top + anchors.leftMargin: (stringListModelSize < stringList.length) ? 0 : -width + visible: (stringListModelSize < stringList.length) + width: 30 + + Text { + anchors.left: parent.left + anchors.top: parent.top + text: "..." + font.capitalization: Font.AllUppercase + font.pixelSize: header.fontSize + color: colors.colorFontBrowserHeader + } + } + + // the text flow + Flow { + id: textFlow + layoutDirection: Qt.RightToLeft + + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: dots.right + + Repeater { + model: stringListModelSize + Item { + id: textContainer + property string displayTxt: (stringList[stringList.length - index - 1] == undefined) ? "" : stringList[stringList.length - index - 1] + + width: headerPath.width + arrowContainerWidth + height: 20 + + // arrows + // the graphical separator between texts anchors on the left side of each text block. The space of "arrowContainerWidth" is reserved for that + // Widgets.TextSeparatorArrow { + // color: colors.colorGrey80 + // visible: true + // anchors.top: parent.top + // anchors.right: headerPath.left + // anchors.topMargin: 4 + // anchors.rightMargin: 6 // left margin is set via "arrowContainerWidth" + // } + + Text { + id: dummy + // NOTE: dummyTextPath is only used to get the displayWidth of the strings. (otherwise dynamic text sizes are hard/impossible) + text: displayTxt + visible: false + font.capitalization: Font.AllUppercase + font.pixelSize: header.fontSize + } + + Text { + id: headerPath + // dummy.width is determined by the string contained in it and ceil to whole pixels (ceil instead of round to avoid unwanted elides) + width: (dummy.width > maxTextWidth) ? maxTextWidth : Math.ceil(dummy.width ) + elide: Text.ElideMiddle + text: displayTxt + visible: true + color: (index == 0) ? colors.colorDeckBlueBright : colors.colorGrey88 + font.capitalization: Font.AllUppercase + font.pixelSize: header.fontSize + } + } + } + } + } + + //-------------------------------------------------------------------------------------------------------------------- + + Text { + id: deckLetter + anchors.right: parent.right + anchors.top: parent.top + height: parent.height + width: parent.height + + text: header.letters[header.currentDeck] + font.capitalization: Font.AllUppercase + font.pixelSize: header.fontSize + color: colors.colorDeckBlueBright + } + + //-------------------------------------------------------------------------------------------------------------------- + // black border & shadow + + Rectangle { + id: browserHeaderBlackBottomLine + anchors.left: parent.left + anchors.right: parent.right + anchors.top: browserHeaderBg.bottom + height: 2 + color: colors.colorBlack + } + + Rectangle { + id: browserHeaderBottomGradient + anchors.left: parent.left + anchors.right: parent.right + anchors.top: browserHeaderBlackBottomLine.bottom + height: 3 + gradient: Gradient { + GradientStop { position: 0.0; color: colors.colorBlack38 } + GradientStop { position: 1.0; color: colors.colorBlack0 } + } + } + + //-------------------------------------------------------------------------------------------------------------------- + + state: "show" + states: [ + State { + name: "show" + PropertyChanges {target: header; height: 15} + }, + State { + name: "hide" + PropertyChanges {target: header; height: 0} + } + ] +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/ListDelegate.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/ListDelegate.qml new file mode 100755 index 000000000000..54e8525fa5e6 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/ListDelegate.qml @@ -0,0 +1,262 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +//------------------------------------------------------------------------------------------------------------------ +// LIST ITEM - DEFINES THE INFORMATION CONTAINED IN ONE LIST ITEM +//------------------------------------------------------------------------------------------------------------------ + +// the model contains the following roles: +// dataType, nodeIconId, nodeName, nrOfSubnodes, coverUrl, artistName, trackName, bpm, key, keyIndex, rating, loadedInDeck, prevPlayed, prelisten + +Item { + id: contactDelegate + + Defines.Settings {id: settings} + + property string masterBPM: "" + property string masterKey: "" + property int keyIndex: 0 + property bool isPlaying: false + property bool adjacentKeys: false + property string newIndex: keyIndex || "" + property string masterKeyIndex: keyIndex + property color deckColor: qmlBrowser.focusColor + property color textColor: !ListView.isCurrentItem ? "White" : deckColor + property bool isCurrentItem: ListView.isCurrentItem + readonly property int textTopMargin: 5 // centers text vertically + // readonly property bool isLoaded: (dataType == "Track") ? model.loadedInDeck.length > 0 : false + readonly property bool isLoaded: false + // visible: !ListView.isCurrentItem + readonly property string dataType: "Track" + readonly property string artistName: model.artist + readonly property string trackName: model.title + readonly property string key: "" + readonly property string bpmText: "---" + readonly property real bpm: 0 + + readonly property string bpmMatch: tempoNeeded(masterBPM, bpm).toFixed(2).toString() + + property bool deck1: deckInfo.is1Playing + property bool deck2: deckInfo.is2Playing + property bool deck3: deckInfo.is3Playing + property bool deck4: deckInfo.is4Playing + + readonly property bool deckPlaying: deck1 || deck2 || deck3 || deck4 + + function tempoNeeded(master, current) { + if (master > current) { + return (1-(current/master))*100; + } + + return ((master/current)-1)*100; + } + + readonly property int key1m: 21 + readonly property int key2m: 16 + readonly property int key3m: 23 + readonly property int key4m: 18 + readonly property int key5m: 13 + readonly property int key6m: 20 + readonly property int key7m: 15 + readonly property int key8m: 22 + readonly property int key9m: 17 + readonly property int key10m: 12 + readonly property int key11m: 19 + readonly property int key12m: 14 + readonly property int key1d: 0 + readonly property int key2d: 7 + readonly property int key3d: 2 + readonly property int key4d: 9 + readonly property int key5d: 4 + readonly property int key6d: 11 + readonly property int key7d: 6 + readonly property int key8d: 1 + readonly property int key9d: 8 + readonly property int key10d: 3 + readonly property int key11d: 10 + readonly property int key12d: 5 + + function colorKey(newKey,masterKey) { + if (!contactDelegate.adjacentKeys) {return true} + else if ((newKey == masterKey)) {return true} + else if (masterKey == "") {return false} + else if (masterKey == "21" && (newKey == "14" || newKey == "16" || newKey == "0")) {return true} + else if (masterKey == "16" && (newKey == "21" || newKey == "23" || newKey == "7")) {return true} + else if (masterKey == "23" && (newKey == "16" || newKey == "18" || newKey == "2")) {return true} + else if (masterKey == "18" && (newKey == "23" || newKey == "13" || newKey == "9")) {return true} + else if (masterKey == "13" && (newKey == "18" || newKey == "20" || newKey == "4")) {return true} + else if (masterKey == "20" && (newKey == "13" || newKey == "15" || newKey == "11")) {return true} + else if (masterKey == "15" && (newKey == "20" || newKey == "22" || newKey == "6")) {return true} + else if (masterKey == "22" && (newKey == "15" || newKey == "17" || newKey == "1")) {return true} + else if (masterKey == "17" && (newKey == "22" || newKey == "12" || newKey == "8")) {return true} + else if (masterKey == "12" && (newKey == "17" || newKey == "19" || newKey == "3")) {return true} + else if (masterKey == "19" && (newKey == "12" || newKey == "14" || newKey == "10")) {return true} + else if (masterKey == "14" && (newKey == "19" || newKey == "21" || newKey == "5")) {return true} + else if (masterKey == "0" && (newKey == "5" || newKey == "7" || newKey == "21")) {return true} + else if (masterKey == "7" && (newKey == "0" || newKey == "2" || newKey == "16")) {return true} + else if (masterKey == "2" && (newKey == "7" || newKey == "9" || newKey == "23")) {return true} + else if (masterKey == "9" && (newKey == "2" || newKey == "4" || newKey == "18")) {return true} + else if (masterKey == "4" && (newKey == "9" || newKey == "11" || newKey == "13")) {return true} + else if (masterKey == "11" && (newKey == "4" || newKey == "6" || newKey == "20")) {return true} + else if (masterKey == "6" && (newKey == "11" || newKey == "1" || newKey == "15")) {return true} + else if (masterKey == "1" && (newKey == "6" || newKey == "8" || newKey == "22")) {return true} + else if (masterKey == "8" && (newKey == "1" || newKey == "3" || newKey == "17")) {return true} + else if (masterKey == "3" && (newKey == "8" || newKey == "10" || newKey == "12")) {return true} + else if (masterKey == "10" && (newKey == "3" || newKey == "5" || newKey == "19")) {return true} + else if (masterKey == "5" && (newKey == "10" || newKey == "0" || newKey == "14")) {return true} + else {return false}; + } + + // MappingProperty { id: propShift1; path: "mapping.state.left.shift" } + QtObject { + id: propShift1 + property string description: "Description" + property var value: 0 + } + // MappingProperty { id: propShift2; path: "mapping.state.right.shift" } + QtObject { + id: propShift2 + property string description: "Description" + property var value: 0 + } + readonly property bool isShift: propShift1.value || propShift2.value + readonly property bool isShiftleft: propShift1.value + readonly property bool isShiftRight: propShift2.value + + height: settings.browserFontSize*2 + anchors.left: parent.left + anchors.right: parent.right + + // container for zebra & track infos + Rectangle { + // when changing colors here please remember to change it in the GridView in Templates/Browser.qml + color: (index%2 == 0) ? colors.colorGrey32 : "Black" + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: settings.showTrackTitleColumn ? 3 : 0 + anchors.rightMargin: 3 + height: parent.height + + // folder name + Text { + id: firstFieldFolder + anchors.left: parent.left + anchors.top: parent.top + anchors.topMargin: contactDelegate.textTopMargin + anchors.leftMargin: 37 + color: textColor + clip: true + text: (dataType == "Folder") ? model.nodeName : "" + font.pixelSize: settings.browserFontSize + elide: Text.ElideRight + visible: (dataType != "Track") + width: 190 + } + + // Image { + // id: prepListIcon + // visible: (dataType == "Track") ? model.prepared : false + // source: "../Images/PrepListIcon" + (!contactDelegate.isCurrentItem ? "White" : "Blue") + ".png" + // width: 10 + // height: 17 + // // anchors.left: firstFieldText.right + // anchors.top: parent.top + // anchors.topMargin: 6 + // anchors.leftMargin: 5 + // } + + // track name + Text { + id: firstFieldTrack + width: settings.swapArtistTitleColumns ? (settings.showArtistColumn ? (settings.hideBPM ? 110 : 77) + (settings.hideKey ? 30 : 0) : 0) + (!settings.showTrackTitleColumn ? 150 : 0) : !settings.showTrackTitleColumn ? 0 : (!settings.showArtistColumn && settings.hideBPM ? 280 : (settings.showArtistColumn ? 150 : 230)) + (!settings.showArtistColumn && settings.hideKey ? 30 : 0) + visible: (dataType == "Track") + anchors.top: parent.top + anchors.topMargin: contactDelegate.textTopMargin + anchors.left: parent.left + anchors.leftMargin: model.prepared ? 10 : 0 + elide: Text.ElideRight + text: settings.swapArtistTitleColumns ? ((dataType == "Track") ? artistName : "") : (settings.showArtistColumn && settings.showTrackTitleColumn ? ((dataType == "Track") ? trackName : "") : (!isShift && !settings.showArtistColumn && settings.showTrackTitleColumn ? ((dataType == "Track") ? trackName : "") : ((dataType == "Track") ? artistName : ""))) + font.pixelSize: settings.browserFontSize + color: isLoaded ? "lime" : ((model.prevPlayed && !model.prelisten) ? "yellow" : (!bpm ? "red" : textColor)) + } + + // artist name + Text { + id: trackTitleField + anchors.leftMargin: settings.showArtistColumn && settings.showTrackTitleColumn ? 4 : 0 + anchors.left: (dataType == "Track") ? firstFieldTrack.right : firstFieldFolder.right + anchors.top: parent.top + anchors.topMargin: contactDelegate.textTopMargin + width: settings.swapArtistTitleColumns ? !settings.showTrackTitleColumn ? 0 : (!settings.showArtistColumn && settings.hideBPM ? 280 : (settings.showArtistColumn ? 150 : 230)) + (!settings.showArtistColumn && settings.hideKey ? 30 : 0) : (settings.showArtistColumn ? (settings.hideBPM ? 110 : 77) + (settings.hideKey ? 30 : 0) : 0) + (!settings.showTrackTitleColumn ? 150 : 0) + color: isLoaded ? "lime" : ((model.prevPlayed && !model.prelisten) ? "yellow" : (!bpm ? "red" : textColor)) + clip: true + text: settings.swapArtistTitleColumns ? (dataType == "Track") ? trackName : "" : (settings.showArtistColumn && settings.showTrackTitleColumn ? ((dataType == "Track") ? artistName : "") : (!isShift && settings.showArtistColumn && !settings.showTrackTitleColumn ? ((dataType == "Track") ? artistName : "") : (dataType == "Track") ? trackName : "")) + font.pixelSize: settings.browserFontSize + elide: Text.ElideRight + } + + // bpm + Text { + id: bpmField + anchors.right: keyField.left + anchors.top: parent.top + anchors.topMargin: contactDelegate.textTopMargin + horizontalAlignment: Text.AlignLeft + width: settings.hideBPM ? 0 :53 + color: settings.bpmBrowserTextColor ? (bpm == "0.00") ? "red" : (bpmMatch <= settings.browserBpmGreen) && (bpmMatch >= -(settings.browserBpmGreen)) ? "lime" : (!((bpmMatch >= settings.browserBpmRed) || (bpmMatch <= -(settings.browserBpmRed)) && (masterBPM != "0.00")) ? textColor : settings.accentColor) : textColor + clip: true + text: (dataType == "Track") ? bpmText : "" + font.pixelSize: settings.browserFontSize + } + + function colorForKey(keyIndex) { + return colors.musicalKeyColors[keyIndex] + } + + // key + Text { + id: keyField + anchors.right: parent.right + anchors.top: parent.top + anchors.topMargin: contactDelegate.textTopMargin + anchors.leftMargin: 5 + + color: (dataType == "Track") ? (((key == "none") || (key == "None")) ? "White" : ((colorKey(contactDelegate.newIndex, contactDelegate.masterKeyIndex) && contactDelegate.deckPlaying) ? parent.colorForKey(keyIndex) : "White")) : "White" + width: settings.hideKey ? 0 : 30 + clip: true + text: (dataType == "Track") ? (((key == "none") || (key == "None")) ? "n.a." : (settings.camelotKey ? utils.camelotConvert(key) : key)) : "" + font.pixelSize: settings.browserFontSize + } + + ListHighlight { + anchors.fill: parent + visible: contactDelegate.isCurrentItem + anchors.leftMargin: 0 + anchors.rightMargin: 0 + } + + // folder icon + Image { + id: folderIcon + source: (dataType == "Folder") ? ("image://icons/" + model.nodeIconId ) : "" + width: 33 + height: 33 + fillMode: Image.PreserveAspectFit + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 3 + clip: true + cache: false + visible: (dataType == "Folder") + } + + // ColorOverlay { + // id: folderIconColorOverlay + // color: isCurrentItem == false ? colors.colorFontsListBrowser : contactDelegate.deckColor // unselected vs. selected + // anchors.fill: folderIcon + // source: folderIcon + // } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/ListHighlight.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/ListHighlight.qml new file mode 100755 index 000000000000..28dadb00bdb5 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/ListHighlight.qml @@ -0,0 +1,19 @@ +import QtQuick 2.15 + +Item { + Rectangle { + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + height: 1 + color: "blue" + } + + Rectangle { + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + height: 1 + color: "blue" + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/TrackFooter.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/TrackFooter.qml new file mode 100755 index 000000000000..f6c0213cb83b --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/TrackFooter.qml @@ -0,0 +1,353 @@ +import QtQuick 2.15 + +import Mixxx 1.0 as Mixxx + +import '../Defines' as Defines +import '../Defines' as Defines +import '../ViewModels' as ViewModels + +//------------------------------------------------------------------------------------------------------------------ +// LIST ITEM - DEFINES THE INFORMATION CONTAINED IN ONE LIST ITEM +//------------------------------------------------------------------------------------------------------------------ +Rectangle { + id: footer + + Defines.Colors { id: colors } + + required property var deckInfo + + property string propertiesPath: "" + property real sortingKnobValue: 0.0 + property bool isContentList: qmlBrowser.isContentList + property int maxCount: 0 + property int count: 0 + + // the given numbers are determined by the EContentListColumns in Traktor + readonly property variant sortIds: [0 ,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + readonly property variant sortNames: ["Sort By #", "Sort By #", "Title", "Artist", "Time", "BPM", "Track #", "Label", "Release", "Label", "Key Text", "Comment", "Lyrics", "Comment 2", "Path", "Analysed", "Remixer", "Producer", "Mix", "CAT #", "Rel. Date", "Bitrate", "Rating", "Count", "Sort By #", "Cover Art", "Last Played", "Import Date", "Key", "Color", "File Name"] + readonly property int selectedFooterId: (selectedFooterItem.value === undefined) ? 0 : ( ( selectedFooterItem.value % 2 === 1 ) ? 1 : 4 ) // selectedFooterItem.value takes values from 1 to 4. + + property real preSortingKnobValue: 0.0 + + //-------------------------------------------------------------------------------------------------------------------- + + // AppProperty { id: previewIsLoaded; path : "app.traktor.browser.preview_player.is_loaded" } + QtObject { + id: previewIsLoaded + property string description: "Description" + property var value: 0 + } + // AppProperty { id: previewTrackLenght; path : "app.traktor.browser.preview_content.track_length" } + QtObject { + id: previewTrackLenght + property string description: "Description" + property var value: 0 + } + // AppProperty { id: previewTrackElapsed; path : "app.traktor.browser.preview_player.elapsed_time" } + QtObject { + id: previewTrackElapsed + property string description: "Description" + property var value: 0 + } + + // MappingProperty { id: overlayState; path: propertiesPath + ".overlay" } + QtObject { + id: overlayState + property string description: "Description" + property var value: 0 + } + // MappingProperty { id: isContentListProp; path: propertiesPath + ".browser.is_content_list" } + QtObject { + id: isContentListProp + property string description: "Description" + property var value: 0 + } + // MappingProperty { id: selectedFooterItem; path: propertiesPath + ".selected_footer_item" } + QtObject { + id: selectedFooterItem + property string description: "Description" + property var value: 0 + } + + //-------------------------------------------------------------------------------------------------------------------- + // Behavior on Sorting Changes (show/hide sorting widget, select next allowed sorting) + //-------------------------------------------------------------------------------------------------------------------- + + onIsContentListChanged: { + // We need this to be able do disable mappings (e.g. sorting ascend/descend) + isContentListProp.value = isContentList; + } + + onSortingKnobValueChanged: { + if (!footer.isContentList) + return; + + overlayState.value = Overlay.sorting; + sortingOverlayTimer.restart(); + + var val = clamp(footer.sortingKnobValue - footer.preSortingKnobValue, -1, 1); + val = parseInt(val); + if (val != 0) { + qmlBrowser.sortingId = getSortingIdWithDelta( val ); + footer.preSortingKnobValue = footer.sortingKnobValue; + } + } + + Timer { + id: sortingOverlayTimer + interval: 800 // duration of the scrollbar opacity + repeat: false + + onTriggered: overlayState.value = Overlay.none; + } + + //-------------------------------------------------------------------------------------------------------------------- + // View + //-------------------------------------------------------------------------------------------------------------------- + + clip: false + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 36 + (settings.raiseBrowserFooter ? 4 : 0) // set in state + color: "transparent" + + // background color + Rectangle { + id: browserFooterBg + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 30 + (settings.raiseBrowserFooter ? 4 : 0) + color: colors.colorBrowserHeader // footer background color + } + + Row { + id: sortingRow + anchors.left: browserFooterBg.left + anchors.leftMargin: 1 + anchors.top: browserFooterBg.top + + Item { + width: 100 + height: 30 + (settings.raiseBrowserFooter ? 4 : 0) + + Text { + font.pixelSize: fonts.scale(15) + anchors.left: parent.left + anchors.leftMargin: 3 + anchors.top: parent.top + anchors.topMargin: 3 + font.capitalization: Font.AllUppercase + color: selectedFooterId == 1 ? "white" : colors.colorFontBrowserHeader + text: getSortingNameForSortId(qmlBrowser.sortingId) + visible: qmlBrowser.isContentList + } + // Arrow (Sorting Direction Indicator) + Triangle { + id: sortDirArrow + width: 15 + height: 15 + anchors.top: parent.top + anchors.right: parent.right + anchors.topMargin: 4 + anchors.rightMargin: 6 + antialiasing: false + visible: qmlBrowser.sortingId > 0 + color: colors.colorGrey80 + rotation: ((qmlBrowser.sortingDirection == 1) ? 0 : 180) + } + Rectangle { + id: divider + height: 30 + width: 1 + color: colors.colorGrey40 // footer divider color + anchors.right: parent.right + } + } + + // Preview Player footer + Item { + width: 150 + height: 30 + + Text { + font.pixelSize: fonts.scale(18) + anchors.left: parent.left + anchors.leftMargin: 1 + anchors.top: parent.top + anchors.topMargin: 3 + font.capitalization: Font.AllUppercase + visible: !previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : "green" + text: deckInfo.masterDeckLetter + } + + Text { + font.pixelSize: fonts.scale(18) + anchors.left: parent.left + anchors.leftMargin: 15 + anchors.top: parent.top + anchors.topMargin: 3 + font.capitalization: Font.AllUppercase + visible: !previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : colors.colorFontBrowserHeader + text: deckInfo.masterBPMFooter2 + } + + Text { + font.pixelSize: fonts.scale(18) + anchors.right: parent.right + anchors.rightMargin: 2 + anchors.top: parent.top + anchors.topMargin: 3 + font.capitalization: Font.AllUppercase + visible: !previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : colors.musicalKeyColorsDark[deckInfo.masterKeyIndex] + text: settings.camelotKey ? utils.camelotConvert(deckInfo.masterKey) : deckInfo.masterKey + } + + Text { + font.pixelSize: fonts.scale(16) + anchors.left: parent.left + anchors.leftMargin: 5 + anchors.top: parent.top + anchors.topMargin: 3 + font.capitalization: Font.AllUppercase + visible: previewIsLoaded.value + color: selectedFooterId == 4 ? "white" : colors.colorFontBrowserHeader + text: "Preview" + } + + // Image { + // anchors.top: parent.top + // anchors.right: parent.right + // anchors.topMargin: 3 + // anchors.rightMargin: 49 + // visible: previewIsLoaded.value + // antialiasing: false + // source: "../Images/PreviewIcon_Small.png" + // fillMode: Image.Pad + // clip: true + // cache: false + // width: 20 + // height: 20 + // } + Text { + width: 40 + clip: true + horizontalAlignment: Text.AlignRight + visible: previewIsLoaded.value + anchors.top: parent.top + anchors.right: parent.right + anchors.topMargin: 2 + anchors.rightMargin: 7 + font.pixelSize: fonts.scale(18) + font.capitalization: Font.AllUppercase + font.family: "Pragmatica" + color: colors.browser.prelisten + text: utils.convertToTimeString(previewTrackElapsed.value) + } + Rectangle { + id: divider2 + height: 30 + width: 1 + color: colors.colorGrey40 // footer divider color + anchors.right: parent.right + } + } + + Item { + + width: 150 + height: 30 + + Text { + Text { + font.pixelSize: fonts.scale(20) + anchors.left: parent.right + anchors.leftMargin: 3 + anchors.top: parent.top + anchors.topMargin: 3 + font.capitalization: Font.AllUppercase + visible: true + color: colors.colorFontBrowserHeader + text: count + } + } + } + } + + //-------------------------------------------------------------------------------------------------------------------- + // black border & shadow + //-------------------------------------------------------------------------------------------------------------------- + + Rectangle { + id: browserHeaderBottomGradient + height: 3 + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: browserHeaderBlackBottomLine.top + gradient: Gradient { + GradientStop { position: 0.0; color: colors.colorBlack0 } + GradientStop { position: 1.0; color: colors.colorBlack38 } + } + } + + Rectangle { + id: browserHeaderBlackBottomLine + height: 2 + color: colors.colorBlack + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: browserFooterBg.top + } + + //------------------------------------------------------------------------------------------------------------------ + + state: "show" + states: [ + State { + name: "show" + PropertyChanges { target: footer; height: 36 + (settings.raiseBrowserFooter ? 4 : 0) } + }, + State { + name: "hide" + PropertyChanges { target: footer; height: 0 } + } + ] + + //-------------------------------------------------------------------------------------------------------------------- + // Necessary Functions + //-------------------------------------------------------------------------------------------------------------------- + + function getSortingIdWithDelta( delta ) { + var curPos = getPosForSortId( qmlBrowser.sortingId ); + var pos = curPos + delta; + var count = sortIds.length; + + pos = (pos < 0) ? count-1 : pos; + pos = (pos >= count) ? 0 : pos; + + return sortIds[pos]; + } + + function getPosForSortId(id) { + if (id == -1) return 0; // -1 is a special case which should be interpreted as "0" + for (var i=0; i= 0 && pos < sortNames.length) + return sortNames[pos]; + return "SORTED"; + } + + function clamp(val, min, max) { + return Math.max( Math.min(val, max) , min ); + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/TrackView.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/TrackView.qml new file mode 100755 index 000000000000..7ec1eb1a2f64 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/TrackView.qml @@ -0,0 +1,202 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +//------------------------------------------------------------------------------------------------------------------ +// LIST ITEM - DEFINES THE INFORMATION CONTAINED IN ONE LIST ITEM +//------------------------------------------------------------------------------------------------------------------ + +// the model contains the following roles: +// dataType, nodeIconId, nodeName, nrOfSubnodes, coverUrl, artistName, trackName, bpm, key, keyIndex, rating, loadedInDeck, prevPlayed, prelisten + +Item { + id: contactDelegate + + Defines.Settings {id: settings} + + property string masterBPM: "" + property color deckColor: qmlBrowser.focusColor + property color textColor: !ListView.isCurrentItem ? "White" : deckColor + property bool isCurrentItem: ListView.isCurrentItem + readonly property int textTopMargin: 5 // centers text vertically + readonly property bool isLoaded: (model.dataType == "Track") ? model.loadedInDeck.length > 0 : false + readonly property int rating: (model.dataType == "Track") ? ((model.rating == "") ? 0 : model.rating ) : 0 + // visible: !ListView.isCurrentItem + readonly property string bpm: (model.bpm || 0).toFixed(2).toString() + + readonly property string bpmMatch: tempoNeeded(masterBPM, bpm).toFixed(2).toString() + + function tempoNeeded(master, current) { + if (master > current) { + + return (1-(current/master))*100; + + } else if (master < current) { + + return ((master/current)-1)*100; + } + } + + // MappingProperty { id: propShift1; path: "mapping.state.left.shift" } + QtObject { + id: propShift1 + property string description: "Description" + property var value: 0 + } + // MappingProperty { id: propShift2; path: "mapping.state.right.shift" } + QtObject { + id: propShift2 + property string description: "Description" + property var value: 0 + } + readonly property bool isShift: propShift1.value || propShift2.value + readonly property bool isShiftleft: propShift1.value + readonly property bool isShiftRight: propShift2.value + + height: 240 + anchors.left: parent.left + anchors.right: parent.right + + // container for zebra & track infos + Rectangle { + // when changing colors here please remember to change it in the GridView in Templates/Browser.qml + color: (index%2 == 0) ? colors.colorGrey32 : "Black" + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: settings.showTrackTitleColumn ? 3 : 0 + anchors.rightMargin: 3 + height: parent.height + + // track name + Text { + id: firstFieldTrack + width: 300 + clip: true + anchors.top: trackImage.bottom + anchors.topMargin: contactDelegate.textTopMargin + anchors.left: parent.left + anchors.leftMargin: 5 + text: (model.dataType == "Track") ? model.trackName : "" + font.pixelSize: 20 + color: isLoaded ? "lime" : ((model.prevPlayed && !model.prelisten) ? "yellow" : (((model.bpm || 0).toFixed(4) == "0.0000" ) ? "red" : textColor)) + } + + // artist name + Text { + id: trackTitleField + anchors.top: firstFieldTrack.bottom + anchors.topMargin: contactDelegate.textTopMargin + anchors.left: parent.left + anchors.leftMargin: 5 + width: 300 + color: isLoaded ? "lime" : ((model.prevPlayed && !model.prelisten) ? "yellow" : (((model.bpm || 0).toFixed(4) == "0.0000" ) ? "red" : textColor)) + clip: true + text: (model.dataType == "Track") ? model.artistName : "" + font.pixelSize: 20 + } + + //bpm text + Text { + id: bpmFieldText + anchors.top: parent.top + anchors.left: trackImage.right + anchors.leftMargin: 5 + anchors.topMargin: 5 + horizontalAlignment: Text.AlignLeft + + color: "white" + text: "BPM:" + font.pixelSize: 28 + } + + //bpm + Text { + id: bpmField + anchors.top: parent.top + anchors.rightMargin: 0 + anchors.right: parent.right + anchors.topMargin: 5 + horizontalAlignment: Text.AlignRight + + color: settings.bpmBrowserTextColor ? (bpm == "0.00") ? "red" : (bpmMatch <= settings.browserBpmGreen) && (bpmMatch >= -(settings.browserBpmGreen)) ? "lime" : (!((bpmMatch >= settings.browserBpmRed) || (bpmMatch <= -(settings.browserBpmRed)) && (masterBPM != "0.00")) ? textColor : settings.accentColor) : textColor + clip: true + text: (model.dataType == "Track") ? bpm : "" + font.pixelSize: 30 + } + + function colorForKey(keyIndex) { + return colors.musicalKeyColors[keyIndex] + } + + // key text + Text { + id: keyFieldText + anchors.top: bpmField.bottom + anchors.left: trackImage.right + anchors.topMargin: 8 + anchors.leftMargin: 5 + + color: "white" + clip: true + text: "Key:" + font.pixelSize: 30 + } + + // key + Text { + id: keyField + anchors.top: bpmField.bottom + anchors.right: parent.right + anchors.topMargin: 8 + anchors.rightMargin: 0 + + color: (model.dataType == "Track") ? (((model.key == "none") || (model.key == "None")) ? textColor : parent.colorForKey(model.keyIndex)) : textColor + clip: true + text: (model.dataType == "Track") ? (((model.key == "none") || (model.key == "None")) ? "n.a." : (settings.camelotKey ? utils.camelotConvert(model.key) : model.key)) : "" + font.pixelSize: 30 + } + + Widgets.TrackRating { + id: trackRating + + anchors.top: keyFieldText.bottom + anchors.left: trackImage.right + anchors.topMargin: 8 + anchors.leftMargin: 5 + rating: (model.dataType == "Track") ? ((model.rating == "") ? 0 : model.rating ) : 0 + } + + ListHighlight { + anchors.fill: parent + visible: contactDelegate.isCurrentItem + anchors.leftMargin: 0 + anchors.rightMargin: 0 + } + + Rectangle { + id: trackImage + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 5 + anchors.topMargin: 10 + width: 125 + height: 125 + color: (model.coverUrl != "") ? "transparent" : ((contactDelegate.screenFocus < 2) ? colors.colorDeckBlueBright50Full : colors.colorGrey128 ) + visible: (model.dataType == "Track") && !settings.hideAlbumArt + + Image { + id: cover + anchors.fill: parent + source: (model.dataType == "Track") ? ("image://covers/" + model.coverUrl ) : "" + fillMode: Image.PreserveAspectFit + clip: true + cache: false + sourceSize.width: width + sourceSize.height: height + // the image either provides the cover of the track, or if not available the traktor logo on colored background ( opacity == 0.3) + opacity: (model.coverUrl != "") ? 1.0 : 0.3 + } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/Triangle.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/Triangle.qml new file mode 100755 index 000000000000..97cbe25ab4da --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Browser/Triangle.qml @@ -0,0 +1,29 @@ +import QtQuick 2.15 +import QtQuick.Shapes 1.7 + +Item { + id: root + + property int borderWidth: 0 + property color color: "black" + property color borderColor: "transparent" + + property alias antialiasing: triangle.antialiasing + + clip: false + + Shape { + id: triangle + anchors.centerIn: parent + + ShapePath { + strokeWidth: root.borderWidth + strokeColor: root.borderColor + fillColor: root.color + startX: 0; startY: 0 + PathLine { x: root.width; y: 0 } + PathLine { x: 0.5* root.width; y: root.height } + PathLine { x: 0; y: 0 } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/DeckScreen.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/DeckScreen.qml new file mode 100755 index 000000000000..bb4fccc836f8 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/DeckScreen.qml @@ -0,0 +1,185 @@ +import QtQuick 2.15 +import './Defines' as Dfeines +import './Views' as Views +import './ViewModels' as ViewModels +import './Overlays' as Overlays + +Item { + id: deckscreen + + property int deckId: 1 + + property bool active: true + + //-------------------------------------------------------------------------------------------------------------------- + // Deck Screen: show information for track, stem, remix decks + //-------------------------------------------------------------------------------------------------------------------- + QtObject { + id: deckType + property string description: deckInfoModel.isStemsActive ? "Stem Deck" : "Track Deck" + property var value: 1 + } + + QtObject { + id: propShift1 + property var value: false + } + QtObject { + id: propShift2 + property var value: false + } + readonly property bool isShift: propShift1.value || propShift2.value + + property bool browser: settings.showBrowserOnFavorites ? ((deckInfoModel.viewButton) || (deckInfoModel.favorites)) : (deckInfoModel.viewButton) + + Component.onCompleted: { + if (typeof engine.makeSharedDataConnection === "function") { + engine.makeSharedDataConnection(deckscreen.onSharedDataUpdate) + deckscreen.onSharedDataUpdate(engine.getSharedData()) + } + } + + function isLeftScreen(deckId) { + return deckId == 1 || deckId == 3; + } + + function onSharedDataUpdate(data) { + if (typeof data === "object" && typeof data.shift === "object") { + propShift1.value = !!data.shift["leftdeck"] + propShift2.value = !!data.shift["rightdeck"] + } + } + + ViewModels.DeckInfo { + id: deckInfoModel + deckId: deckscreen.deckId + } + + Component { + id: emptyDeckComponent; + + Views.EmptyDeck { + anchors.fill: parent + deckInfo: deckInfoModel + } + } + + Component { + id: trackDeckComponent; + Views.TrackDeck { + id: trackDeck + deckInfo: deckInfoModel + deckId: deckscreen.deckId + anchors.fill: parent + } + } + + Component { + id: browserComponent; + Views.BrowserView { + id: browserView + deckInfo: deckInfoModel + anchors.fill: parent + isActive: (loader.sourceComponent == browserComponent) && deckscreen.active + } + } + + Component { + id: stemDeckComponent; + + Views.StemDeck { + deckInfo: deckInfoModel + anchors.fill: parent + } + } + + Loader { + id: loader + active: true + visible: true + anchors.fill: parent + sourceComponent: trackDeckComponent + } + + Item { + id: content + state: "Empty Deck" + + Component.onCompleted: { + content.state = Qt.binding(function() { + return (browser && settings.enableBrowserMode) ? "Browser" : deckType.description }); + } + + states: [ + State { + name: "Empty Deck" + PropertyChanges { target: loader; sourceComponent: emptyDeckComponent } + }, + State { + name: "Track Deck" + PropertyChanges { target: loader; sourceComponent: trackDeckComponent } + }, + State { + name: "Browser" + PropertyChanges { target: loader; sourceComponent: browserComponent } + }, + State { + name: "Stem Deck" + PropertyChanges { target: loader; sourceComponent: stemDeckComponent } + } + ] + } + + Overlays.GridControls { + id: grid + deckId: deckInfoModel.deckId + showHideState: !settings.hideGridOverlay && deckInfoModel.adjustEnabled && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } + + Overlays.BankInfo { + id: bank1; + bank: 1 + showHideState: deckInfoModel.padsModeBank1 && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } + + Overlays.BankInfo { + id: bank2; + bank: 2 + showHideState: deckInfoModel.padsModeBank2 && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } + + Overlays.CueInfo { + id: cue + hotcue: deckInfoModel.hotcueId + type: deckInfoModel.hotcueType + name: deckInfoModel.hotcueName + showHideState: !settings.hideHotcueOverlay && deckInfoModel.hotcueDisplay && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } + + Overlays.JumpControls { + id: jump; + deckInfo: deckInfoModel + showHideState: !settings.hideJumpOverlay && deckInfoModel.padsModeJump && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } + + Overlays.LoopControls { + id: loop; + deckInfo: deckInfoModel + deckId: deckInfoModel.deckId + showHideState: !settings.hideLoopOverlay && deckInfoModel.padsModeLoop && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } + + Overlays.RollControls { + id: roll; + deckInfo: deckInfoModel + deckId: deckInfoModel.deckId + showHideState: !settings.hideRollOverlay && deckInfoModel.padsModeRoll && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } + + Overlays.ToneControls { + id: tone; + deckId: deckInfoModel.deckId + adjustVal: deckInfoModel.keyAdjustVal + showHideState: !settings.hideToneOverlay && deckInfoModel.padsModeTone && !(loader.sourceComponent == browserComponent) ? "show" : "hide" + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Colors.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Colors.qml new file mode 100755 index 000000000000..ab2c0ceb77da --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Colors.qml @@ -0,0 +1,549 @@ +import QtQuick 2.15 + +QtObject { + + function rgba(r,g,b,a) { return Qt.rgba( neutralizer(r)/255. , neutralizer(g)/255. , neutralizer(b)/255. , neutralizer(a)/255. ) } + + // this categorizes any rgb value to multiples of 8 for each channel to avoid unbalanced colors on the display (r5-g6-b5 bit) + // function neutralizer(value) { if(value%8 > 4) { return value - value%8 + 8} else { return value - value%8 }} + function neutralizer(value) { return value} + + property variant colorBlack: rgba (0, 0, 0, 255) + property variant colorBlack94: rgba (0, 0, 0, 240) + property variant colorBlack88: rgba (0, 0, 0, 224) + property variant colorBlack85: rgba (0, 0, 0, 217) + property variant colorBlack81: rgba (0, 0, 0, 207) + property variant colorBlack78: rgba (0, 0, 0, 199) + property variant colorBlack75: rgba (0, 0, 0, 191) + property variant colorBlack69: rgba (0, 0, 0, 176) + property variant colorBlack66: rgba (0, 0, 0, 168) + property variant colorBlack63: rgba (0, 0, 0, 161) + property variant colorBlack60: rgba (0, 0, 0, 153) // from 59 - 61% + property variant colorBlack56: rgba (0, 0, 0, 143) // + property variant colorBlack53: rgba (0, 0, 0, 135) // from 49 - 51% + property variant colorBlack50: rgba (0, 0, 0, 128) // from 49 - 51% + property variant colorBlack47: rgba (0, 0, 0, 120) // from 46 - 48% + property variant colorBlack44: rgba (0, 0, 0, 112) // from 43 - 45% + property variant colorBlack41: rgba (0, 0, 0, 105) // from 40 - 42% + property variant colorBlack38: rgba (0, 0, 0, 97) // from 37 - 39% + property variant colorBlack35: rgba (0, 0, 0, 89) // from 33 - 36% + property variant colorBlack31: rgba (0, 0, 0, 79) // from 30 - 32% + property variant colorBlack28: rgba (0, 0, 0, 71) // from 27 - 29% + property variant colorBlack25: rgba (0, 0, 0, 64) // from 24 - 26% + property variant colorBlack22: rgba (0, 0, 0, 56) // from 21 - 23% + property variant colorBlack19: rgba (0, 0, 0, 51) // from 18 - 20% + property variant colorBlack16: rgba (0, 0, 0, 41) // from 15 - 17% + property variant colorBlack12: rgba (0, 0, 0, 31) // from 11 - 13% + property variant colorBlack09: rgba (0, 0, 0, 23) // from 8 - 10% + property variant colorBlack0: rgba (0, 0, 0, 0) + + property variant colorWhite: rgba (255, 255, 255, 255) + + property variant colorWhite75: rgba (255, 255, 255, 191) + property variant colorWhite85: rgba (255, 255, 255, 217) + + // property variant colorWhite60: rgba (255, 255, 255, 153) // from 59 - 61% + property variant colorWhite50: rgba (255, 255, 255, 128) // from 49 - 51% + // property variant colorWhite47: rgba (255, 255, 255, 120) // from 46 - 48% + // property variant colorWhite44: rgba (255, 255, 255, 112) // from 43 - 45% + property variant colorWhite41: rgba (255, 255, 255, 105) // from 40 - 42% + // property variant colorWhite38: rgba (255, 255, 255, 97) // from 37 - 39% + property variant colorWhite35: rgba (255, 255, 255, 89) // from 33 - 36% + // property variant colorWhite31: rgba (255, 255, 255, 79) // from 30 - 32% + property variant colorWhite28: rgba (255, 255, 255, 71) // from 27 - 29% + property variant colorWhite25: rgba (255, 255, 255, 64) // from 24 - 26% + property variant colorWhite22: rgba (255, 255, 255, 56) // from 21 - 23% + property variant colorWhite19: rgba (255, 255, 255, 51) // from 18 - 20% + property variant colorWhite16: rgba (255, 255, 255, 41) // from 15 - 17% + property variant colorWhite12: rgba (255, 255, 255, 31) // from 11 - 13% + property variant colorWhite09: rgba (255, 255, 255, 23) // from 8 - 10% + // property variant colorWhite06: rgba (255, 255, 255, 15) // from 5 - 7% + // property variant colorWhite03: rgba (255, 255, 255, 8) // from 2 - 4% + + property variant colorGrey232: rgba (232, 232, 232, 255) + property variant colorGrey216: rgba (216, 216, 216, 255) + property variant colorGrey208: rgba (208, 208, 208, 255) + property variant colorGrey200: rgba (200, 200, 200, 255) + property variant colorGrey192: rgba (192, 192, 192, 255) + property variant colorGrey152: rgba (152, 152, 152, 255) + property variant colorGrey128: rgba (128, 128, 128, 255) + property variant colorGrey120: rgba (120, 120, 120, 255) + property variant colorGrey112: rgba (112, 112, 112, 255) + property variant colorGrey104: rgba (104, 104, 104, 255) + property variant colorGrey96: rgba (96, 96, 96, 255) + property variant colorGrey88: rgba (88, 88, 88, 255) + property variant colorGrey80: rgba (80, 80, 80, 255) + property variant colorGrey72: rgba (72, 72, 72, 255) + property variant colorGrey64: rgba (64, 64, 64, 255) + property variant colorGrey56: rgba (56, 56, 56, 255) + property variant colorGrey48: rgba (48, 48, 48, 255) + property variant colorGrey40: rgba (40, 40, 40, 255) + property variant colorGrey32: rgba (32, 32, 32, 255) + property variant colorGrey24: rgba (24, 24, 24, 255) + property variant colorGrey16: rgba (16, 16, 16, 255) + property variant colorGrey08: rgba (08, 08, 08, 255) + + property variant cueColors: [ + red, + darkOrange, + lightOrange, + colorWhite, + yellow, + lime, + green, + mint, + cyan, + turquoise, + blue, + plum, + violet, + purple, + magenta, + fuchsia, + warmYellow + ] + + property variant cueColorsDark: [ + Qt.darker(red, 0.15), + Qt.darker(darkOrange, 0.15), + Qt.darker(lightOrange, 0.15), + Qt.darker(colorWhite, 0.15), + Qt.darker(yellow, 0.15), + Qt.darker(lime, 0.15), + Qt.darker(green, 0.15), + Qt.darker(mint, 0.15), + Qt.darker(cyan, 0.15), + Qt.darker(turquoise, 0.15), + Qt.darker(blue, 0.15), + Qt.darker(plum, 0.15), + Qt.darker(violet, 0.15), + Qt.darker(purple, 0.15), + Qt.darker(magenta, 0.15), + Qt.darker(fuchsia, 0.15), + Qt.darker(warmYellow, 0.15) + ] + + property variant colorOrange: rgba(208, 104, 0, 255) // FX Selection; FX Faders etc + property variant colorOrangeDimmed: rgba(96, 48, 0, 255) + + property variant colorRed: rgba(255, 0, 0, 255) + property variant colorRed70: rgba(185, 6, 6, 255) + + // Playmarker + property variant colorRedPlaymarker: rgba(255, 0, 0, 255) + property variant colorRedPlaymarker75: rgba(255, 56, 26, 191) + property variant colorRedPlaymarker06: rgba(255, 56, 26, 31) + + // Playmarker + property variant colorBluePlaymarker: rgba(96, 184, 192, 255) //rgba(136, 224, 232, 255) + + property variant colorGreen: rgba(0, 255, 0, 255) + property variant colorGreen50: rgba(0, 255, 0, 128) + property variant colorGreen12: rgba(0, 255, 0, 31) // used for loop bg (in WaveformCues.qml) + property variant colorGreenLoopOverlay: rgba(96, 192, 128, 16) + property variant colorGreenMint: rgba(0, 219, 138, 255) + + property variant colorGreen08: rgba(0, 255, 0, 20) + property variant colorGreen50Full: rgba(0, 51, 0, 255) + + property variant colorGreenGreyMix: rgba(139, 240, 139, 82) + + // font colors + property variant colorFontsListBrowser: colorGrey72 + property variant colorFontsListFx: colorGrey56 + property variant colorFontBrowserHeader: colorGrey88 + property variant colorFontFxHeader: colorGrey80 // also for FX header, FX select buttons + + // headers & footers backgrounds + property variant colorBgEmpty: colorGrey16 // also for empty decks & Footer Small (used to be colorGrey08) + property variant colorBrowserHeader: colorGrey24 + property variant colorFxHeaderBg: colorGrey16 // also for large footer; fx overlay tabs + property variant colorFxHeaderLightBg: colorGrey24 + + property variant colorProgressBg: colorGrey32 + property variant colorProgressBgLight: colorGrey48 + property variant colorDivider: colorGrey40 + + property variant colorIndicatorBg: rgba(20, 20, 20, 255) + property variant colorIndicatorBg2: rgba(31, 31, 31, 255) + + property variant colorIndicatorLevelGrey: rgba(51, 51, 51, 255) + property variant colorIndicatorLevelOrange: rgba(247, 143, 30, 255) + + property variant colorCenterOverlayHeadline: colorGrey88 + +// blue + property variant colorDeckBlueBright: rgba(0, 136, 184, 255) + property variant colorDeckBlueDark: rgba(0, 64, 88, 255) + property variant colorDeckBlueBright20: rgba(0, 174, 239, 51) + property variant colorDeckBlueBright50Full: rgba(0, 87, 120, 255) + property variant colorDeckBlueBright12Full: rgba(0, 8, 10, 255) //rgba(0, 23, 31, 255) + property variant colorBrowserBlueBright: rgba(0, 187, 255, 255) + property variant colorBrowserBlueBright56Full:rgba(0, 114, 143, 255) + + property color footerBackgroundBlue: "#011f26" + + // fx Select overlay colors + property variant fxSelectHeaderTextRGB: rgba( 96, 96, 96, 255) + property variant fxSelectHeaderNormalRGB: rgba( 32, 32, 32, 255) + property variant fxSelectHeaderNormalBorderRGB: rgba( 32, 32, 32, 255) + property variant fxSelectHeaderHighlightRGB: rgba( 64, 64, 48, 255) + property variant fxSelectHeaderHighlightBorderRGB: rgba(128, 128, 48, 255) + + // 16 Colors Palette (Bright) + property variant color01Bright: rgba (255, 0, 0, 255) + property variant color02Bright: rgba (255, 16, 16, 255) + property variant color03Bright: rgba (255, 120, 0, 255) + property variant color04Bright: rgba (255, 184, 0, 255) + property variant color05Bright: rgba (255, 255, 0, 255) + property variant color06Bright: rgba (144, 255, 0, 255) + property variant color07Bright: rgba ( 40, 255, 40, 255) + property variant color08Bright: rgba ( 0, 208, 128, 255) + property variant color09Bright: rgba ( 0, 184, 232, 255) + property variant color10Bright: rgba ( 0, 120, 255, 255) + property variant color11Bright: rgba ( 0, 72, 255, 255) + property variant color12Bright: rgba (128, 0, 255, 255) + property variant color13Bright: rgba (160, 0, 200, 255) + property variant color14Bright: rgba (240, 0, 200, 255) + property variant color15Bright: rgba (255, 0, 120, 255) + property variant color16Bright: rgba (248, 8, 64, 255) + + // 16 Colors Palette (Mid) + property variant color01Mid: rgba (112, 8, 8, 255) + property variant color02Mid: rgba (112, 24, 8, 255) + property variant color03Mid: rgba (112, 56, 0, 255) + property variant color04Mid: rgba (112, 80, 0, 255) + property variant color05Mid: rgba (96, 96, 0, 255) + property variant color06Mid: rgba (56, 96, 0, 255) + property variant color07Mid: rgba (8, 96, 8, 255) + property variant color08Mid: rgba (0, 90, 60, 255) + property variant color09Mid: rgba (0, 77, 77, 255) + property variant color10Mid: rgba (0, 84, 108, 255) + property variant color11Mid: rgba (32, 56, 112, 255) + property variant color12Mid: rgba (72, 32, 120, 255) + property variant color13Mid: rgba (80, 24, 96, 255) + property variant color14Mid: rgba (111, 12, 149, 255) + property variant color15Mid: rgba (122, 0, 122, 255) + property variant color16Mid: rgba (130, 1, 43, 255) + + // 16 Colors Palette (Dark) + property variant color01Dark: rgba (16, 0, 0, 255) + property variant color02Dark: rgba (16, 8, 0, 255) + property variant color03Dark: rgba (16, 8, 0, 255) + property variant color04Dark: rgba (16, 16, 0, 255) + property variant color05Dark: rgba (16, 16, 0, 255) + property variant color06Dark: rgba (8, 16, 0, 255) + property variant color07Dark: rgba (8, 16, 8, 255) + property variant color08Dark: rgba (0, 16, 8, 255) + property variant color09Dark: rgba (0, 8, 16, 255) + property variant color10Dark: rgba (0, 8, 16, 255) + property variant color11Dark: rgba (0, 0, 16, 255) + property variant color12Dark: rgba (8, 0, 16, 255) + property variant color13Dark: rgba (8, 0, 16, 255) + property variant color14Dark: rgba (16, 0, 16, 255) + property variant color15Dark: rgba (16, 0, 8, 255) + property variant color16Dark: rgba (16, 0, 8, 255) + + //-------------------------------------------------------------------------------------------------------------------- + + // Browser + + //-------------------------------------------------------------------------------------------------------------------- + + property variant browser: + QtObject { + property color prelisten: rgba(223, 178, 30, 255) + property color prevPlayed: rgba(32, 32, 32, 255) + } + + //-------------------------------------------------------------------------------------------------------------------- + + // Hotcues + + //-------------------------------------------------------------------------------------------------------------------- + + property variant hotcue: + QtObject { + property color grid: colorWhite + property color hotcue: colorDeckBlueBright + property color fade: color03Bright + property color load: color05Bright + property color loop: color07Bright + property color temp: "grey" + } + + //-------------------------------------------------------------------------------------------------------------------- + + // Freeze & Slicer + + //-------------------------------------------------------------------------------------------------------------------- + + property variant freeze: + QtObject { + property color box_inactive: "#199be7ef" + property color box_active: "#ff9be7ef" + property color marker: "#4DFFFFFF" + property color slice_overlay: "white" // flashing rectangle + } + + property variant slicer: + QtObject { + property color box_active: rgba(20,195,13,255) + property color box_inrange: rgba(20,195,13,90) + property color box_inactive: rgba(20,195,13,25) + property color marker_default: rgba(20,195,13,77) + property color marker_beat: rgba(20,195,13,150) + property color marker_edge: box_active + } + + //-------------------------------------------------------------------------------------------------------------------- + + // Musical Key coloring for the browser + + //-------------------------------------------------------------------------------------------------------------------- + property variant color01MusicalKey: rgba (255, 0, 0, 255) // not yet in use + property variant color02MusicalKey: rgba (255, 64, 0, 255) + property variant color03MusicalKey: rgba (255, 120, 0, 255) // not yet in use + property variant color04MusicalKey: rgba (255, 200, 0, 255) + property variant color05MusicalKey: rgba (255, 255, 0, 255) + property variant color06MusicalKey: rgba (210, 255, 0, 255) // not yet in use + property variant color07MusicalKey: rgba ( 0, 255, 0, 255) + property variant color08MusicalKey: rgba ( 0, 255, 128, 255) + //property variant color09MusicalKey: rgba ( 0, 200, 232, 255) + property variant color09MusicalKey: colorDeckBlueBright // use the same color as for the browser selection + property variant color10MusicalKey: rgba ( 0, 100, 255, 255) + property variant color11MusicalKey: rgba ( 0, 40, 255, 255) + property variant color12MusicalKey: rgba (128, 0, 255, 255) + property variant color13MusicalKey: rgba (160, 0, 200, 255) // not yet in use + property variant color14MusicalKey: rgba (240, 0, 200, 255) + property variant color15MusicalKey: rgba (255, 0, 120, 255) // not yet in use + property variant color16MusicalKey: rgba (248, 8, 64, 255) + + property variant color01MusicalKey2: rgba (255, 0, 0, 120) // not yet in use + property variant color02MusicalKey2: rgba (255, 64, 0, 120) + property variant color03MusicalKey2: rgba (255, 120, 0, 120) // not yet in use + property variant color04MusicalKey2: rgba (255, 200, 0, 120) + property variant color05MusicalKey2: rgba (255, 255, 0, 120) + property variant color06MusicalKey2: rgba (210, 255, 0, 120) // not yet in use + property variant color07MusicalKey2: rgba ( 0, 255, 0, 120) + property variant color08MusicalKey2: rgba ( 0, 255, 128, 120) + //property variant color09MusicalKey2: rgba ( 0, 200, 232, 120) + property variant color09MusicalKey2: colorDeckBlueBright // use the same color as for the browser selection + property variant color10MusicalKey2: rgba ( 0, 100, 255, 120) + property variant color11MusicalKey2: rgba ( 0, 40, 255, 120) + property variant color12MusicalKey2: rgba (128, 0, 255, 120) + property variant color13MusicalKey2: rgba (160, 0, 200, 120) // not yet in use + property variant color14MusicalKey2: rgba (240, 0, 200, 120) + property variant color15MusicalKey2: rgba (255, 0, 120, 120) // not yet in use + property variant color16MusicalKey2: rgba (248, 8, 64, 120) + + // 16 Colors Palette (Bright) + property variant color01Bright2: rgba (255, 0, 0, 120) + property variant color02Bright2: rgba (255, 16, 16, 120) + property variant color03Bright2: rgba (255, 120, 0, 120) + property variant color04Bright2: rgba (255, 184, 0, 120) + property variant color05Bright2: rgba (255, 255, 0, 120) + property variant color06Bright2: rgba (144, 255, 0, 120) + property variant color07Bright2: rgba ( 40, 255, 40, 120) + property variant color08Bright2: rgba ( 0, 208, 128, 120) + property variant color09Bright2: rgba ( 0, 184, 232, 120) + property variant color10Bright2: rgba ( 0, 120, 255, 120) + property variant color11Bright2: rgba ( 0, 72, 255, 120) + property variant color12Bright2: rgba (128, 0, 255, 120) + property variant color13Bright2: rgba (160, 0, 200, 120) + property variant color14Bright2: rgba (240, 0, 200, 120) + property variant color15Bright2: rgba (255, 0, 120, 120) + property variant color16Bright2: rgba (248, 8, 64, 120) + + property variant musicalKeyColors: [ + 'grey', //0 No key + color15Bright, //1 -11 c + color06Bright, //2 -4 c#, db + color11MusicalKey, //3 -13 d + color03Bright, //4 -6 d#, eb + color09MusicalKey, //5 -16 e + color01Bright, //6 -9 f + color07MusicalKey, //7 -2 f#, gb + color13Bright, //8 -12 g + color04MusicalKey, //9 -5 g#, ab + color10MusicalKey, //10 -15 a + color02MusicalKey, //11 -7 a#, bb + color08MusicalKey, //12 -1 b + color03Bright, //13 -6 cm + color09MusicalKey, //14 -16 c#m, dbm + color01Bright, //15 -9 dm + color07MusicalKey, //16 -2 d#m, ebm + color13Bright, //17 -12 em + color04MusicalKey, //18 -5 fm + color10MusicalKey, //19 -15 f#m, gbm + color02MusicalKey, //20 -7 gm + color08MusicalKey, //21 -1 g#m, abm + color15Bright, //22 -11 am + color06Bright, //23 -4 a#m, bbm + color11MusicalKey //24 -13 bm + ] + + property variant musicalKeyColorsDark: [ + 'grey', //0 No key + Qt.darker(color15Bright, 5), //1 -11 c + Qt.darker(color06Bright, 5), //2 -4 c#, db + Qt.darker(color11MusicalKey, 5), //3 -13 d + Qt.darker(color03Bright, 5), //4 -6 d#, eb + Qt.darker(color09MusicalKey, 5), //5 -16 e + Qt.darker(color01Bright, 5), //6 -9 f + Qt.darker(color07MusicalKey, 5), //7 -2 f#, gb + Qt.darker(color13Bright, 5), //8 -12 g + Qt.darker(color04MusicalKey, 5), //9 -5 g#, ab + Qt.darker(color10MusicalKey, 5), //10 -15 a + Qt.darker(color02MusicalKey, 5), //11 -7 a#, bb + Qt.darker(color08MusicalKey, 5), //12 -1 b + Qt.darker(color03Bright, 5), //13 -6 cm + Qt.darker(color09MusicalKey, 5), //14 -16 c#m, dbm + Qt.darker(color01Bright, 5), //15 -9 dm + Qt.darker(color07MusicalKey, 5), //16 -2 d#m, ebm + Qt.darker(color13Bright, 5), //17 -12 em + Qt.darker(color04MusicalKey, 5), //18 -5 fm + Qt.darker(color10MusicalKey, 5), //19 -15 f#m, gbm + Qt.darker(color02MusicalKey, 5), //20 -7 gm + Qt.darker(color08MusicalKey, 5), //21 -1 g#m, abm + Qt.darker(color15Bright, 5), //22 -11 am + Qt.darker(color06Bright, 5), //23 -4 a#m, bbm + Qt.darker(color11MusicalKey, 5) //24 -13 bm + ] + + //-------------------------------------------------------------------------------------------------------------------- + + // Waveform coloring + + //-------------------------------------------------------------------------------------------------------------------- + + property color defaultBackground: "black" + property color defaultTextColor: "white" + property color loopActiveColor: rgba(0,255,70,255) + property color loopFlashColor: rgba ( 20, 235, 165, 120) + + property color loopActiveDimmedColor: rgba(0,255,70,190) + property color grayBackground: "#ff333333" + + property variant colorDeckBrightGrey: rgba (85, 85, 85, 255) + property variant colorDeckGrey: rgba (70, 70, 70, 255) + property variant colorDeckDarkGrey: rgba (40, 40, 40, 255) + + property variant colorDeckOrangeBright: rgba (253, 186, 16, 255) + + property variant colorQuantizeOn: rgba ( 20, 255, 255, 170) + property variant colorQuantizeOff: Qt.darker(colorQuantizeOn, 0.7) + + property color red: "#ff0000" + property color darkOrange: "#ff8c00" + property color lightOrange: "#fccf3e" + property color warmYellow: "#f9d71c" + property color yellow: "#ffff00" + property color lime: "#effd5f" + property color green: "#00FF00" + property color mint: "#98ff98" + property color cyan: "#00FFFF" + property color turquoise: "#40e0d0" + property color blue: "#0080FF" + property color plum: "#ff7eff" + property color violet: "#ee82ee" + property color purple: "#9f00c5" + property color magenta: "#ff6fff" + property color fuchsia: "#ff0080" + property color white: "#ff0080" + property color phaseColor: "#90550C" + + //-------------------------------------------------------------------------------------------------------------------- + + // Waveform coloring + + //-------------------------------------------------------------------------------------------------------------------- + + property variant low1: settings.low1 + property variant low2: settings.low2 + property variant mid1: settings.mid1 + property variant mid2: settings.mid2 + property variant high1: settings.high1 + property variant high2: settings.high2 + + function getWaveformColors(colorId) { + if (colorId <= 17) { + return waveformColorsMap[colorId]; + } + + return waveformColorsMap[0]; + } + + function palette(brightness, colorId) { + if ( brightness >= 0.666 && brightness <= 1.0 ) { // bright color + switch(colorId) { + case 0: return defaultBackground // default color for this palette! + case 1: return color01Bright + case 2: return color02Bright + case 3: return color03Bright + case 4: return color04Bright + case 5: return color05Bright + case 6: return color06Bright + case 7: return color07Bright + case 8: return color08Bright + case 9: return color09Bright + case 10: return color10Bright + case 11: return color11Bright + case 12: return color12Bright + case 13: return color13Bright + case 14: return color14Bright + case 15: return color15Bright + case 16: return color16Bright + case 17: return "grey" + case 18: return colorGrey232 + } + } else if ( brightness >= 0.333 && brightness < 0.666 ) { // mid color + switch(colorId) { + case 0: return defaultBackground // default color for this palette! + case 1: return color01Mid + case 2: return color02Mid + case 3: return color03Mid + case 4: return color04Mid + case 5: return color05Mid + case 6: return color06Mid + case 7: return color07Mid + case 8: return color08Mid + case 9: return color09Mid + case 10: return color10Mid + case 11: return color11Mid + case 12: return color12Mid + case 13: return color13Mid + case 14: return color14Mid + case 15: return color15Mid + case 16: return color16Mid + case 17: return "grey" + case 18: return colorGrey232 + } + } else if ( brightness >= 0 && brightness < 0.333 ) { // dimmed color + switch(colorId) { + case 0: return defaultBackground // default color for this palette! + case 1: return color01Dark + case 2: return color02Dark + case 3: return color03Dark + case 4: return color04Dark + case 5: return color05Dark + case 6: return color06Dark + case 7: return color07Dark + case 8: return color08Dark + case 9: return color09Dark + case 10: return color10Dark + case 11: return color11Dark + case 12: return color12Dark + case 13: return color13Dark + case 14: return color14Dark + case 15: return color15Dark + case 16: return color16Dark + case 17: return "grey" + case 18: return colorGrey232 + } + } else if ( brightness < 0) { // color Off + return defaultBackground; + } + return defaultBackground; // default color if no palette is set + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Durations.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Durations.qml new file mode 100755 index 000000000000..d91643a23e39 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Durations.qml @@ -0,0 +1,8 @@ +import QtQuick 2.15 + +QtObject { + readonly property int mainTransitionSpeed: 100 + readonly property int overlayTransition: 100 + readonly property int bottomInfoColor: 75 + readonly property int deckTransition: 90 +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Font.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Font.qml new file mode 100755 index 000000000000..833870d29e21 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Font.qml @@ -0,0 +1,17 @@ +import QtQuick 2.15 + +QtObject { + +// currently mapped to unity but you can use to bulk scale fonsize if needed + function scale(fontSize) { return fontSize; } + +// Font Size Variables + readonly property int miniFontSize: scale(10) + readonly property int smallFontSize: scale(12) + readonly property int middleFontSize: scale(15) + readonly property int largeFontSize: scale(18) + readonly property int largeValueFontSize: scale(21) + readonly property int moreLargeValueFontSize: scale(33) + readonly property int extraLargeValueFontSize: scale(45) + readonly property int superLargeValueFontSize: scale(55) +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Margins.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Margins.qml new file mode 100755 index 000000000000..6bedda675a5c --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Margins.qml @@ -0,0 +1,7 @@ +import QtQuick 2.15 + +QtObject { + +// Margin Variables + readonly property int topMarginCenterOverlayHeadline: 11 // 17 +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Settings.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Settings.qml new file mode 100755 index 000000000000..bd2dbc8e712f --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Settings.qml @@ -0,0 +1,296 @@ +import QtQuick 2.5 + +QtObject { + + // = comments + + ////////////////// + //EXTRA SETTINGS// + ////////////////// + + //show only decks A&B or C&D - SELECT ONLY ONE + readonly property color accentColor: engine.getSetting('accentColor') || 'green' + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /////////////////////////////// + //PAD TYPE SELECTION SETTINGS// + /////////////////////////////// + + //Please only use the values in the line below. Using other values could have unexpected effects. + //0 = disabled, 4 = freeze, 5 = loop, 7 = roll, 8 = jump/move, 9 = fx1, 10 = fx2, 11 = tone + readonly property int recordButton: 8 + readonly property int samplesButton: 4 + readonly property int muteButton: 7 + readonly property int stemsButton: 5 + readonly property int cueButton: 11 + readonly property int fxLeftButton: 9 + readonly property int fxRightButton: 10 + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////// + //BPM/TEMPO DISPLAY SETTINGS// + ////////////////////////////// + + //Change to true to always show tempo/bpm info + readonly property bool alwaysShowTempoInfo: engine.getSetting('alwaysShowTempoInfo') || false + + //amount of time the bpm overlay will stay on the screen in ms. 1000 = 1 second. + readonly property int bpmOverlayTimer: (engine.getSetting('bpmOverlayTimer') || 5.0) * 1000 + + //0 = Hidden, 1 = Master BPM, 2 = BPM, 3 = Tempo, 4 = BPM Offset, 5 = Tempo Offset, 6 = Master Deck Letter, 7 = Tempo Range, 8 = Key, 9 = Original BPM + readonly property int tempoDisplayLeft: parseInt(engine.getSetting('tempoDisplayLeft')) || 2 + readonly property int tempoDisplayCenter: parseInt(engine.getSetting('tempoDisplayCenter')) || 1 + readonly property int tempoDisplayRight: parseInt(engine.getSetting('tempoDisplayRight')) || 3 + readonly property int tempoDisplayLeftShift: parseInt(engine.getSetting('tempoDisplayLeftShift')) || 4 + readonly property int tempoDisplayCenterShift: parseInt(engine.getSetting('tempoDisplayCenterShift')) || 6 + readonly property int tempoDisplayRightShift: parseInt(engine.getSetting('tempoDisplayRightShift')) || 5 + + //set to true to enable the text Color to aid with your mixing. + readonly property bool enableBpmTextColor: engine.getSetting('enableBpmTextColor') || false + readonly property bool enableMasterBpmTextColor: engine.getSetting('enableMasterBpmTextColor') || false + readonly property bool enableTempoTextColor: engine.getSetting('enableTempoTextColor') || false + readonly property bool enableBpmOffsetTextColor: engine.getSetting('enableBpmOffsetTextColor') || false + readonly property bool enableTempoOffsetTextColor: engine.getSetting('enableTempoOffsetTextColor') || false + readonly property bool enableMasterDeckTextColor: engine.getSetting('enableMasterDeckTextColor') || false + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ///////////////////// + //WAVEFORM SETTINGS// + ///////////////////// + + //change to true to disable the moving waveforms + readonly property bool hideWaveforms: engine.getSetting('hideWaveforms') || false + + //Change to false to hide loop size indicator (after 10 seconds of loop inactivity) + readonly property bool alwaysShowLoopSize: engine.getSetting('alwaysShowLoopSize') || false + + //amount of time the loop overlay will stay on the screen in ms. 1000 = 1 second. + readonly property int loopOverlayTimer: (engine.getSetting('loopOverlayTimer') || 10) * 1000 + + //set to true to hide the beatgrid + readonly property bool hideBeatgrid: engine.getSetting('hideBeatgrid') || false + + //this value is the visibility of the beatgrid lines in %. Values are 0 to 100 + readonly property real beatgridVisibility: engine.getSetting('beatgridVisibility') || 0.75 + + //set to true to show time to next cue on waveform + readonly property bool showTimeToCue: engine.getSetting('showTimeToCue') || false + + //set to true to show beats to next cue on waveform + readonly property bool showBeatToCue: engine.getSetting('showBeatToCue') || false + + //set to true to show beats to next cue on waveform + readonly property int distanceToCueFontSize: engine.getSetting('distanceToCueFontSize') || 12 + + //set to true to show beats to next cue on waveform + readonly property string distanceToCueAlignment: engine.getSetting('distanceToCueAlignment') || "bottom" + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //////////////////// + //BROWSER SETTINGS// + //////////////////// + + // NOTE the following setting are currently unused due to the lack of QML support for Mixxx library + + // //set to false to disable browser view and pads + // readonly property bool enableBrowserMode: engine.getSetting('enableBrowserMode') || true + + // //set to false to disable the adjacent key Coloring and return to all keys Colored + // readonly property bool adjacentKeys: engine.getSetting('adjacentKeys') || true + + // //change to true to enable camelot key + // readonly property bool camelotKey: engine.getSetting('camelotKey') || false + + // //set to true to disable the preview player toggle button and change it back to hold + // readonly property bool disablePreviewPlayerToggle: engine.getSetting('disablePreviewPlayerToggle') || false + + // //Set to false to disable browser on screen when pressing favorites button + // readonly property bool showBrowserOnFavourites: engine.getSetting('showBrowserOnFavourites') || true + + // //set to true to swap the functions of the view and add to prep buttons + // readonly property bool swapViewButtons: engine.getSetting('swapViewButtons') || false + + // //Set to false to disable browser on screen when open in full screen mode. + // //This will also revert the view and prep button functions back to default except opening the browser on the S4 instead of the laptop. + // readonly property bool showBrowserOnFullScreen: engine.getSetting('showBrowserOnFullScreen') || true + + // //set to true to disable the led output on the browser sort buttons + // readonly property bool disableSortButtonOutput: engine.getSetting('disableSortButtonOutput') || false + + // // 1 = "Sort By #", 2 = "Title", 3 = "Artist", 4 = "Time", 5 = "BPM", 6 = "Track #", 7 = "Release", 8 = "Label", 9 = "Genre", 10 = "Key Text", 11 = "Comment", 12 = "Lyrics", 13 = "Comment 2", 14 = "Path", 15 = "Analysed" + // // 16 = "Remixer", 17 = "Producer", 18 = "Mix", 19 = "CAT #", 20 = "Release Date", 21 = "Bitrate", 22 = "Rating", 23 = "Count", 24 = "Sort By #", 25 = "Cover Art", 26 = "Last Played", 27 = "Import Date", 28 = "Key", 29 = "Color" + // readonly property int hotcueButtonSort: parseInt(engine.getSetting('hotcueButtonSort')) || 2 + // readonly property int recordButtonSort: parseInt(engine.getSetting('recordButtonSort')) || 3 + // readonly property int samplesButtonSort: parseInt(engine.getSetting('samplesButtonSort')) || 5 + // readonly property int muteButtonSort: parseInt(engine.getSetting('muteButtonSort')) || 28 + // readonly property int stemsButtonSort: parseInt(engine.getSetting('stemsButtonSort')) || 22 + + // //Change this setting to true to change the browser encoder to a list scroll when holding shift. + // readonly property bool browserEncoderShiftScroll: engine.getSetting('browserEncoderShiftScroll') || false + + // //This is the size of the page scroll. + // readonly property int scrollPageSize: parseInt(engine.getSetting('scrollPageSize')) || 6 + + // //change to false to disable the browser view displaying artist data whilst holding shift + // readonly property bool browserShift: engine.getSetting('browserShift') || true + + // //only enable when both artist and title columns are shown + // readonly property bool swapArtistTitleColumns: engine.getSetting('swapArtistTitleColumns') || false + + // readonly property bool hideBPM: engine.getSetting('hideBPM') || false + // readonly property bool hideKey: engine.getSetting('hideKey') || false + // readonly property bool hideAlbumArt: engine.getSetting('hideAlbumArt') || false + // readonly property bool showArtistColumn: engine.getSetting('showArtistColumn') || false + // readonly property bool showTrackTitleColumn: engine.getSetting('showTrackTitleColumn') || true + // readonly property int browserFontSize: parseInt(engine.getSetting('browserFontSize')) || 15 + // readonly property bool raiseBrowserFooter: engine.getSetting('raiseBrowserFooter') || false + + // //change the values below to determine the bpm text Color in the browser + // //the number values represent the percentage difference of the master tempo and the selected song + // readonly property bool bpmBrowserTextColor: engine.getSetting('bpmBrowserTextColor') || true + // readonly property int browserBpmGreen: 3 + // readonly property int browserBpmRed: 12 + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////// + //WAVEFORM OVERVIEW SETTINGS// + ////////////////////////////// + + //change to true to hide stripe + readonly property bool hideWaveformOverview: engine.getSetting('hideWaveformOverview') || false + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /////////////////////////// + //TIME/BEATS BOX SETTINGS// + /////////////////////////// + + // 0 = Remaining Time, 1 = Elapsed Time, 2 = Time To Cue, 3 = Beats (0.0.0), 4 = Beats Alt (0.0), 5 = Beats To Cue (0.0.0), 6 = Beats To Cue Alt (0.0) + readonly property int timeBox: parseInt(engine.getSetting('timeBox')) || 0 + readonly property int timeBoxShift: parseInt(engine.getSetting('timeBoxShift')) || 1 + + //set to true to have the time text change to black when the box is red. + readonly property bool timeTextColorChange: engine.getSetting('timeTextColorChange') || false + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ///////////////////////////////// + //PHASE & PHRASE METER SETTINGS// + ///////////////////////////////// + + //0 = Red, 1 = Dark Orange, 2 = Light Orange, 3 = Default, 4 = Yellow, 5 = Lime, 6 = Green, 7 = Mint, 8 = Cyan, 9 = Turquoise, 10 = Blue, 11 = Plum, 12 = Violet, 13 = Purple, 14 = Magenta, 15 = Fuchsia, 16 = White, 17 = Warm Yellow + readonly property int phaseAColor: parseInt(engine.getSetting('phaseAColor')) || 3 + readonly property int phaseBColor: parseInt(engine.getSetting('phaseBColor')) || 3 + readonly property int phaseCColor: parseInt(engine.getSetting('phaseCColor')) || 3 + readonly property int phaseDColor: parseInt(engine.getSetting('phaseDColor')) || 3 + + //change to true to hide the phase meter + readonly property bool hidePhase: engine.getSetting('hidePhase') || false + + //change to true to hide the phrase meter + readonly property bool hidePhrase: engine.getSetting('hidePhrase') || true + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ////////////////////// + //GRID EDIT SETTINGS// + ////////////////////// + + //change to false to hide the bpm overlay when in grid adjust mode. + readonly property bool showBPMGridAdjust: engine.getSetting('showBPMGridAdjust') || true + readonly property int rateAdjustTimer: (engine.getSetting('rateAdjustTimer') || 2) * 1000 + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /////////////////// + //HOTCUE SETTINGS// + /////////////////// + + //set to true to disable the hotcue overlay appearing + readonly property bool hideHotcueOverlay: engine.getSetting('hideHotcueOverlay') || false + + //0 = Red, 1 = Dark Orange, 2 = Light Orange, 3 = White, 4 = Yellow, 5 = Lime, 6 = Green, 7 = Mint, 8 = Cyan, 9 = Turquoise, 10 = Blue, 11 = Plum, 12 = Violet, 13 = Purple, 14 = Magenta, 15 = Fuchsia, 16 = Warm Yellow + //change these values to change default cue type Colors. + //This will change the cue markers and also the loop indicator. + readonly property int cueCueColor: parseInt(engine.getSetting('cueCueColor')) || 10 + readonly property int cueLoopColor: parseInt(engine.getSetting('cueLoopColor')) || 6 + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //////////////////// + //EFFECTS SETTINGS// + //////////////////// + + //change to false to disable FX overlays + readonly property bool fxOverlays: (engine.getSetting('fxOverlays') || 'both') !== 'off' + + //amount of time the fx overlay will stay on the screen in ms. 1000 = 1 second. + readonly property int fxOverlayTimer: (engine.getSetting('fxOverlayTimer') || 2) * 1000 + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////// + //EFFECTS PAD 1 SETTINGS// + ////////////////////////// + + //set to true to disable the effects pads 1 overlay appearing + readonly property bool hideEffectsOverlay1: (engine.getSetting('fxOverlays') || 'both') === 'right' + + //The fx unit used by fx pads 1 + readonly property int fx1unit: 1 + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////// + //EFFECTS PAD 2 SETTINGS// + ////////////////////////// + + //set to true to disable the effects pads 2 overlay appearing + readonly property bool hideEffectsOverlay2: (engine.getSetting('fxOverlays') || 'both') === 'left' + + //The fx unit used by fx pads 2 + readonly property int fx2unit: 2 + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ///////////////////// + //TONE PAD SETTINGS// + ///////////////////// + + //set to true to disable the tone pads overlay appearing + readonly property bool hideToneOverlay: engine.getSetting('hideToneOverlay') || false + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ///////////////////// + //JUMP PAD SETTINGS// + ///////////////////// + + //set to true to disable the tone pads overlay appearing + readonly property bool hideJumpOverlay: engine.getSetting('hideJumpOverlay') || false + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ///////////////////// + //LOOP PAD SETTINGS// + ///////////////////// + + //set to true to disable the loop pads overlay appearing + readonly property bool hideLoopOverlay: engine.getSetting('hideLoopOverlay') || false + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ///////////////////// + //ROLL PAD SETTINGS// + ///////////////////// + + //set to true to disable the tone pads overlay appearing + readonly property bool hideRollOverlay: engine.getSetting('hideRollOverlay') || false + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Utils.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Utils.qml new file mode 100755 index 000000000000..b5f59ac7649a --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Defines/Utils.qml @@ -0,0 +1,126 @@ +import QtQuick 2.15 + +QtObject { + + function convertToTimeString(inSeconds) { + var neg = (inSeconds < 0); + var roundedSec = Math.floor(inSeconds); + + if (neg) { + roundedSec = -roundedSec; + } + + var sec = roundedSec % 60; + var min = (roundedSec - sec) / 60; + + var secStr = sec.toString(); + if (sec < 10) secStr = "0" + secStr; + + var minStr = min.toString(); + if (min < 10) minStr = "0" + minStr; + + return (neg ? "-" : "") + minStr + ":" + secStr; + } + + function computeRemainingTimeString(length, elapsed) { + return ((elapsed > length) ? convertToTimeString(0) : convertToTimeString( Math.floor(elapsed) - Math.floor(length))); + } + + function camelotConvert(keyToConvert) { + if (keyToConvert == "") return "-"; + + switch(keyToConvert) { + case "1d": return "8B"; + case "2d": return "9B"; + case "3d": return "10B"; + case "4d": return "11B"; + case "5d": return "12B"; + case "6d": return "1B"; + case "7d": return "2B"; + case "8d": return "3B"; + case "9d": return "4B"; + case "10d": return "5B"; + case "11d": return "6B"; + case "12d": return "7B"; + + case "1m": return "8A"; + case "2m": return "9A"; + case "3m": return "10A"; + case "4m": return "11A"; + case "5m": return "12A"; + case "6m": return "1A"; + case "7m": return "2A"; + case "8m": return "3A"; + case "9m": return "4A"; + case "10m": return "5A"; + case "11m": return "6A"; + case "12m": return "7A"; + + case "1D": return "8B"; + case "2D": return "9B"; + case "3D": return "10B"; + case "4D": return "11B"; + case "5D": return "12B"; + case "6D": return "1B"; + case "7D": return "2B"; + case "8D": return "3B"; + case "9D": return "4B"; + case "10D": return "5B"; + case "11D": return "6B"; + case "12D": return "7B"; + + case "1M": return "8A"; + case "2M": return "9A"; + case "3M": return "10A"; + case "4M": return "11A"; + case "5M": return "12A"; + case "6M": return "1A"; + case "7M": return "2A"; + case "8M": return "3A"; + case "9M": return "4A"; + case "10M": return "5A"; + case "11M": return "6A"; + case "12M": return "7A"; + + case "B": return "1B"; + case "F#": return "2B"; + case "C#": return "3B"; + case "G#": return "4B"; + case "D#": return "5B"; + case "A#": return "6B"; + case "F": return "7B"; + case "C": return "8B"; + case "G": return "9B"; + case "D": return "10B"; + case "A": return "11B"; + case "E": return "12B"; + + case "G#m": return "1A"; + case "D#m": return "2A"; + case "A#m": return "3A"; + case "Fm": return "4A"; + case "Cm": return "5A"; + case "Gm": return "6A"; + case "Dm": return "7A"; + case "Am": return "8A"; + case "Em": return "9A"; + case "Bm": return "10A"; + case "F#m": return "11A"; + case "C#m": return "12A"; + + case "G#M": return "1A"; + case "D#M": return "2A"; + case "A#M": return "3A"; + case "FM": return "4A"; + case "CM": return "5A"; + case "GM": return "6A"; + case "DM": return "7A"; + case "AM": return "8A"; + case "EM": return "9A"; + case "BM": return "10A"; + case "F#M": return "11A"; + case "C#M": return "12A"; + } + return "ERR"; + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/BankInfo.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/BankInfo.qml new file mode 100755 index 000000000000..0104aca56629 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/BankInfo.qml @@ -0,0 +1,193 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: bottomLabels + + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (240 - height) + property int deckId: 1 + property int hotcue: 0 + property int type: 0 + property string name: "" + readonly property color barBgColor: "black" + property int bank: 1 + + // AppProperty { id: type; path: "app.traktor.fx." + bank + ".type"} + QtObject { + id: type2 + property string description: "Description" + property var value: 0 + } + + // AppProperty { id: routing; path: "app.traktor.fx." + bank + ".routing"} + QtObject { + id: routing + property string description: "Description" + property var value: 0 + } + property string routingText: routing.value == 0 ? "Send" : routing.value == 1 ? "Insert" : routing.value == 2 ? "Post" : "ERROR" + + // AppProperty { id: fxSelect1; path: "app.traktor.fx." + bank + ".select.1"} + QtObject { + id: fxSelect1 + property string description: "Description" + property var value: 0 + } + // AppProperty { id: fxSelect2; path: "app.traktor.fx." + bank + ".select.2"} + QtObject { + id: fxSelect2 + property string description: "Description" + property var value: 0 + } + // AppProperty { id: fxSelect3; path: "app.traktor.fx." + bank + ".select.3"} + QtObject { + id: fxSelect3 + property string description: "Description" + property var value: 0 + } + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + + height: type2.value == 2 ? 25 : 50 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: bottomLabels.height + color: colors.colorFxHeaderBg + } + + // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:63; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 25 + anchors.left: parent.left + anchors.leftMargin: 320/3 + } + + // dividers + Rectangle { + id: fxInfoDivider1 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 25 + anchors.left: parent.left + anchors.leftMargin: (320/3) * 2 + height: 63 + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Row { + BankInfoDetails { + id: bottomInfoDetails1 + finalLabel: (type2.value == 2 ? "Pattern Player " : "FX Bank ") + bank + " - " + routingText + hideValue: true + hideTitle: false + width: 240 + } + } + + Row { + BankInfoDetails { + id: bottomInfoDetails2 + finalValue: fxSelect1.description + hideValue: (type2.value == 2 ? true : false) + hideTitle: true + width: 320/3 + } + + BankInfoDetails { + id: bottomInfoDetails3 + finalValue: fxSelect2.description + hideValue: (type2.value != 0) ? true : false + hideTitle: true + width: 320/3 + } + + BankInfoDetails { + id: bottomInfoDetails4 + finalValue: fxSelect3.description + hideValue: (type2.value != 0) ? true : false + hideTitle: true + width: 320/3 + } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: bottomLabels.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: bottomLabels; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: bottomLabels; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/BankInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/BankInfoDetails.qml new file mode 100755 index 000000000000..026bca41f4f3 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/BankInfoDetails.qml @@ -0,0 +1,77 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + Defines.Settings {id: settings} + + property var parameter: ({description:"Description",value: 0, valueRange: {isDiscrete: true, steps: 1}}) // set from outside + property bool isOn: false + property string label: "DRUMLOOP" + property string buttonLabel: "HP ON" + + property bool hideValue: false + property bool hideTitle: false + property bool fxEnabled: false + + property bool indicatorEnabled: fxEnabled && label.length > 0 + property string finalValue: "" + property string finalLabel: "" + + function toInt_round(val) { return parseInt(val+0.5); } + + property alias textColor: colors.colorFontFxHeader + + readonly property int macroEffectChar: 0x00B6 + readonly property bool isMacroFx: (finalLabel.charCodeAt(0) == macroEffectChar) + + width: 0 + height: 25 + + Defines.Colors { id: colors } + + // Level indicator for knobs + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 25 + width: parent.width + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: finalLabel + visible: !hideTitle + color: settings.accentColor + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 2 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: 4 + elide: Text.ElideRight + } + + // value + Text { + id: fxInfoValueLarge + width: 320/3 + text: finalValue + font.family: "Pragmatica" // is monospaced + color: colors.colorWhite + visible: !hideValue + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 4 + font.pixelSize: 15 + anchors.topMargin: 25 + elide: Text.ElideRight + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/CueInfo.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/CueInfo.qml new file mode 100755 index 000000000000..dbc47d841456 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/CueInfo.qml @@ -0,0 +1,152 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: bottomLabels + + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (195 - bottomMargin) + property int hotcue: 0 + property int type: 0 + property string name: "" + readonly property color barBgColor: "black" + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + + height: 40 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: bottomLabels.height + color: colors.colorFxHeaderBg + // light grey background + Rectangle { + id:bottomInfoDetailsPanelLightBg + anchors { + top: parent.top + left: parent.left + } + height: bottomLabels.height + width: 18 + color: colors.colorFxHeaderLightBg + } + } + +// // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:63; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 18 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 240 + height: 63 + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Row { + CueInfoDetails { + id: bottomInfoDetails1 + finalValue: hotcue + finalLabel: "#" + width: 18 + } + + CueInfoDetails { + id: bottomInfoDetails2 + finalValue: name + finalLabel: "NAME" + width: 222 + } + + CueInfoDetails { + id: bottomInfoDetails3 + finalValue: (type == 0 ? "Cue" : type == 1 ? "Fade-In" : type == 2 ? "Fade-Out" : type == 3 ? "Load" : type == 4 ? "Grid" : type == 5 ? "Loop" : "-") + finalLabel: "TYPE" + width: 50 + } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: bottomLabels.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: bottomLabels; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: bottomLabels; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/CueInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/CueInfoDetails.qml new file mode 100755 index 000000000000..5f0d2b102835 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/CueInfoDetails.qml @@ -0,0 +1,73 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + Defines.Settings {id: settings} + + property var parameter: ({description:"Description",value: 0, valueRange: {isDiscrete: true, steps: 1}}) // set from outside + property bool isOn: false + property string label: "DRUMLOOP" + property string buttonLabel: "HP ON" + + property bool hideValue: true + property bool fxEnabled: false + + property bool indicatorEnabled: fxEnabled && label.length > 0 + property string finalValue: "" + property string finalLabel: "" + + function toInt_round(val) { return parseInt(val+0.5); } + + property alias textColor: colors.colorFontFxHeader + + readonly property int macroEffectChar: 0x00B6 + readonly property bool isMacroFx: (finalLabel.charCodeAt(0) == macroEffectChar) + + width: 0 + height: 45 + + Defines.Colors { id: colors } + + // Level indicator for knobs + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 45 + width: parent.width + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: finalLabel + color: settings.accentColor + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 2 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: 4 + elide: Text.ElideRight + } + + // value + Text { + id: fxInfoValueLarge + text: finalValue + font.family: "Pragmatica" // is monospaced + color: colors.colorWhite + visible: true + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 4 + font.pixelSize: 15 + anchors.topMargin: 22 + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/FXInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/FXInfoDetails.qml new file mode 100755 index 000000000000..70b52426b30d --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/FXInfoDetails.qml @@ -0,0 +1,66 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + property var parameter: ({description:"Description",value: 0, valueRange: {isDiscrete: true, steps: 1}}) // set from outside + property string label: "DRUMLOOP" + + property alias textColor: colors.colorFontFxHeader + property bool header: false + property int effectID: 0 + property int fxUnit: 1 + + // AppProperty {id: slot1; path: "app.traktor.fx." + fxUnit + ".select.1"} + QtObject { + id: slot1 + property string description: "Description" + property var value: 0 + } + // AppProperty {id: slot2; path: "app.traktor.fx." + fxUnit + ".select.2"} + QtObject { + id: slot2 + property string description: "Description" + property var value: 0 + } + // AppProperty {id: slot3; path: "app.traktor.fx." + fxUnit + ".select.3"} + QtObject { + id: slot3 + property string description: "Description" + property var value: 0 + } + + width: 0 + height: 20 + + Defines.Colors { id: colors } + Defines.Settings {id: settings} + + // Level indicator for knobs + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 20 + width: parent.width + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: label + color: header ? settings.accentColor : (slot1.value == effectID || slot2.value == effectID || slot3.value == effectID ? "lime" : "white") + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 2 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: 4 + elide: Text.ElideRight + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/GridControls.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/GridControls.qml new file mode 100755 index 000000000000..0da2209b2edf --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/GridControls.qml @@ -0,0 +1,209 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +import Mixxx 1.0 as Mixxx + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: bottomLabels + + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (180 - bottomMargin) + property int deckId: 1 + + // AppProperty { id: waveZoomProp; path: "app.traktor.decks." + deckId + ".track.waveform_zoom" } + Mixxx.ControlProxy { + group: `[Channel${deckId}]` + key: "waveform_zoom" + id: waveZoomProp + } + // AppProperty { id: tick; path: "app.traktor.decks." + deckId + ".track.grid.enable_tick" } + QtObject { + id: tick + property string description: "Description" + property var value: 0 + } + Mixxx.ControlProxy { + group: `[Channel${deckId}]` + id: range + key: "rateRange" + property string description: "Description" + property var valueRange: ({isDiscrete: false, steps: 1}) + } + + readonly property color barBgColor: "black" + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + + height: 60 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: bottomLabels.height + color: colors.colorFxHeaderBg + // light grey background + Rectangle { + id:bottomInfoDetailsPanelLightBg + anchors { + top: parent.top + left: parent.left + } + height: bottomLabels.height + width: 80 + color: colors.colorFxHeaderLightBg + } + } + +// // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:63; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider1 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 160 + height: 63 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 240 + height: 63 + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Row { + GridInfoDetails { + id: bottomInfoDetails1 + parameter: waveZoomProp + label: "ZOOM" + fxEnabled: true + barBgColor: bottomLabels.barBgColor + hideButton: true + zoom: true + hideValue: false + } + + GridInfoDetails { + id: bottomInfoDetails2 + parameter: tick + label: "TICK" + fxEnabled: false + isOn: tick.value + barBgColor: bottomLabels.barBgColor + hideButton: true + zoom: true + hideValue: true + } + + GridInfoDetails { + id: bottomInfoDetails3 + parameter: tick + label: "TICK" + fxEnabled: false + isOn: tick.value + barBgColor: bottomLabels.barBgColor + hideButton: true + zoom: true + hideValue: true + } + + GridInfoDetails { + id: bottomInfoDetails4 + parameter: range + label: "RANGE" + fxEnabled: true + barBgColor: bottomLabels.barBgColor + hideButton: true + zoom: false + hideValue: false + } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: bottomLabels.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: bottomLabels; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: bottomLabels; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/GridInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/GridInfoDetails.qml new file mode 100755 index 000000000000..4d54ee03c285 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/GridInfoDetails.qml @@ -0,0 +1,160 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + Defines.Settings {id: settings} + + property var parameter: ({description:"Description",value: 0}) // set from outside + property bool isOn: false + property string label: "DRUMLOOP" + property string sizeState: "small" + property string buttonLabel: "HP ON" + property bool fxEnabled: false + property bool zoom: true + property bool hideButton: true + property bool hideValue: true + + property bool indicatorEnabled: fxEnabled && label.length > 0 + property string finalValue: zoom ? (((10 - parameter.value) / 9)*100).toFixed(2)+"%" : toInt_round(parameter.value*100).toString() + "%" + property string finalLabel: fxEnabled ? label : "" + property string finalButtonLabel: "ON" + property color barBgColor // set from outside + + function toInt_round(val) { return parseInt(val+0.5); } + + property alias textColor: colors.colorFontFxHeader + + readonly property int macroEffectChar: 0x00B6 + readonly property bool isMacroFx: (finalLabel.charCodeAt(0) == macroEffectChar) + + readonly property var valueRange: parameter.valueRange || {} + + width: 80 + height: 45 + + Defines.Colors { id: colors } + + // Level indicator for knobs + Widgets.ProgressBar { + id: slider + progressBarHeight: (sizeState == "small") ? 6 : 9 + progressBarWidth: 76 + anchors.left: parent.left + anchors.top: parent.top + anchors.topMargin: 3 + anchors.leftMargin: 2 + + value: label == "ZOOM" ? (10 - parameter.value) / 9 : parameter.value + visible: !(valueRange.isDiscrete && fxEnabled) + + drawAsEnabled: indicatorEnabled + + progressBarBackgroundColor: parent.barBgColor + } + + // stepped progress bar + Widgets.StateBar { + id: slider2 + height: (sizeState == "small") ? 6 : 9 + width: 76 + anchors.left: parent.left + anchors.top: parent.top + anchors.leftMargin: 2 + anchors.topMargin: 3 + + stateCount: valueRange.steps || 0 + currentState: (valueRange.steps - 1.0 + 0.2) * parameter.value // +.2 to make sure we round in the right direction + visible: !slider.visible + barBgColor: parent.barBgColor + } + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 100 + width: parent.width + + Rectangle { + id: macroIconDetails + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 4 + anchors.topMargin: 50 + + width: 12 + height: 11 + radius: 1 + visible: isMacroFx + color: colors.colorGrey216 + + Text { + anchors.fill: parent + anchors.topMargin: -1 + anchors.leftMargin: 1 + text: "M" + font.pixelSize: fonts.miniFontSize + color: colors.colorBlack + } + } + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: finalLabel + color: settings.accentColor + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 40 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: isMacroFx ? 26 : 4 + anchors.rightMargin: 12 + elide: Text.ElideRight + } + + // value + Text { + id: fxInfoValueLarge + text: finalValue + font.family: "Pragmatica" // is monospaced + color: colors.colorWhite + visible: (label.length > 0) && !hideValue + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 4 + font.pixelSize: 15 + anchors.topMargin: 22 + } + + // button + Rectangle { + id: fxInfoFilterButton + width: 30 + + color: ( fxEnabled ? (isOn ? colors.colorIndicatorLevelOrange : colors.colorBlack) : "transparent" ) + visible: (buttonLabel.length > 0) && !hideButton + radius: 1 + anchors.right: parent.right + anchors.rightMargin: 2 + anchors.top: parent.top + height: 15 + anchors.topMargin: 24 + + Text { + id: fxInfoFilterButtonText + font.capitalization: Font.AllUppercase + text: finalButtonLabel + color: ( fxEnabled ? (isOn ? colors.colorBlack : colors.colorGrey128) : colors.colorGrey128 ) + font.pixelSize: fonts.miniFontSize + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/JumpControls.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/JumpControls.qml new file mode 100755 index 000000000000..57c4e97d8adb --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/JumpControls.qml @@ -0,0 +1,239 @@ +import QtQuick 2.15 + +import Mixxx 1.0 as Mixxx + +import '../Widgets' as Widgets +import '../Defines' as Defines + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: fxLabels + + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (240 - height) + property string name: "" + readonly property color barBgColor: "black" + + required property var deckInfo + readonly property bool shift: deckInfo.shift + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + Defines.Settings { id: settings } + + height: 65 + anchors.left: parent.left + anchors.right: parent.right + + Mixxx.ControlProxy { + id: beatjump + group: deckInfo.group + key: "beatjump_size" + } + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: fxLabels.height + color: colors.colorFxHeaderBg + } + + // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:80; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider1 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 160 + height: 80 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 240 + height: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider3 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + } + + // dividers + Rectangle { + id: fxInfoDivider4 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 40 + anchors.left: parent.left + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Column { + Row { + JumpInfoDetails { + id: header + label: "MOVE/BEATJUMP" + width: 200 + header: true + } + } + + Row { + JumpInfoDetails { + id: bottomInfoDetails1 + label: deckInfo.jumpSizePad1 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad1, shift) + back: shift + width: 80 + } + JumpInfoDetails { + id: bottomInfoDetails2 + label: deckInfo.jumpSizePad2 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad2, shift) + back: shift + width: 80 + } + JumpInfoDetails { + id: bottomInfoDetails3 + label: deckInfo.jumpSizePad3 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad3, shift) + back: shift + width: 80 + } + JumpInfoDetails { + id: bottomInfoDetails4 + label: deckInfo.jumpSizePad4 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad4, shift) + back: shift + width: 80 + } + } + + Row { + JumpInfoDetails { + id: bottomInfoDetails5 + label: deckInfo.jumpSizePad5 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad5, shift) + back: shift + width: 80 + } + JumpInfoDetails { + id: bottomInfoDetails6 + label: deckInfo.jumpSizePad6 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad6, shift) + back: shift + width: 80 + } + JumpInfoDetails { + id: bottomInfoDetails7 + label: deckInfo.jumpSizePad7 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad7, shift) + back: shift + width: 80 + } + JumpInfoDetails { + id: bottomInfoDetails8 + label: deckInfo.jumpSizePad8 === "??" ? (shift ? "- " : " ") + (beatjump.value < 1 ? `1 / ${1/beatjump.value}` : `${beatjump.value}`) : getValue(deckInfo.jumpSizePad8, shift) + back: shift + width: 80 + } + } + } + } + + function getValue(size, shift) { + if (parseFloat(size)) { + return (shift ? "- " : " ") + (size < 1 ? `1 / ${1/size}` : `${size}`) + } else if (size === "??") { + return null; + } else { + return size + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: fxLabels.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: fxLabels; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: fxLabels; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/JumpInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/JumpInfoDetails.qml new file mode 100755 index 000000000000..6b220097ade5 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/JumpInfoDetails.qml @@ -0,0 +1,45 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + Defines.Settings {id: settings} + + property string label: "DRUMLOOP" + property bool back: false + property bool header: false + + width: 0 + height: 20 + + Defines.Colors { id: colors } + + // Level indicator for knobs + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 20 + width: parent.width + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: label + color: header ? settings.accentColor : (label == "n/a" || label == "" ? "white" : back == true ? "red" : "lime") + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 0 + font.pixelSize: fonts.scale(18) + anchors.leftMargin: 4 + elide: Text.ElideRight + horizontalAlignment: header ? Text.AlignLeft : Text.AlignHCenter + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/LoopControls.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/LoopControls.qml new file mode 100755 index 000000000000..ea9f5c29fe72 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/LoopControls.qml @@ -0,0 +1,230 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines +import '../ViewModels' as ViewModels + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: view + + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (240 - height) + property string name: "" + readonly property color barBgColor: "black" + property int deckId: 1 + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + Defines.Settings { id: settings } + + required property var deckInfo + + height: 65 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: view.height + color: colors.colorFxHeaderBg + } + + // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:80; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider1 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 160 + height: 80 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 240 + height: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider3 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + } + + // dividers + Rectangle { + id: fxInfoDivider4 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 40 + anchors.left: parent.left + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Column { + Row { + LoopInfoDetails { + id: header + label: "LOOP" + width: 200 + header: true + } + } + + Row { + LoopInfoDetails { + id: bottomInfoDetails1 + label: deckInfo.loopSizePad1 + label2: deckInfo.loopSizePad1 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails2 + label: deckInfo.loopSizePad2 + label2: deckInfo.loopSizePad2 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails3 + label: deckInfo.loopSizePad3 + label2: deckInfo.loopSizePad3 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails4 + label: deckInfo.loopSizePad4 + label2: deckInfo.loopSizePad4 + deckId: deckId + width: 80 + } + } + + Row { + LoopInfoDetails { + id: bottomInfoDetails5 + label: deckInfo.loopSizePad5 + label2: deckInfo.loopSizePad5 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails6 + label: deckInfo.loopSizePad6 + label2: deckInfo.loopSizePad6 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails7 + label: deckInfo.loopSizePad7 + label2: deckInfo.loopSizePad7 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails8 + label: deckInfo.loopSizePad8 + label2: deckInfo.loopSizePad8 + deckId: deckId + width: 80 + } + } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: view.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: view; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: view; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/LoopInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/LoopInfoDetails.qml new file mode 100755 index 000000000000..12ab2ff7c036 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/LoopInfoDetails.qml @@ -0,0 +1,57 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + property string label: "" + property string label2: "" + property bool header: false + property int deckId: 1 + + // AppProperty { id: enabled; path: "app.traktor.decks." + deckId + ".loop.is_in_active_loop" } + QtObject { + id: enabled + property string description: "Description" + property var value: 0 + } + // AppProperty { id: size; path: "app.traktor.decks." + deckId + ".loop.size" } + QtObject { + id: size + property string description: "Description" + property var value: 0 + } + + width: 0 + height: 20 + + Defines.Colors { id: colors } + + // Level indicator for knobs + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 20 + width: parent.width + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: header ? label : label2 + color: header ? settings.accentColor : (enabled.value && (size.value == label) ? "lime" : "white") + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 0 + font.pixelSize: fonts.scale(18) + anchors.leftMargin: 4 + elide: Text.ElideRight + horizontalAlignment: header ? Text.AlignLeft : Text.AlignHCenter + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/QuickFXSelector.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/QuickFXSelector.qml new file mode 100755 index 000000000000..930ce608e7ce --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/QuickFXSelector.qml @@ -0,0 +1,151 @@ +import QtQuick 2.15 + +import '../Defines' as Defines +import '../Widgets' as Widgets + +import Mixxx 1.0 as Mixxx + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: topLabels + + required property var deckInfo + + property int topMargin: 0 + + property int yPositionWhenHidden: -25 + property int yPositionWhenShown: topMargin + + readonly property color barBgColor: "black" + + property var fxModel: Mixxx.EffectsManager.quickChainPresetModel + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + Defines.Settings {id: settings} + + height: 25 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: topInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: topLabels.height + color: colors.colorFxHeaderBg + // light grey background + // Rectangle { + // id:topInfoDetailsPanelLightBg + // anchors { + // top: parent.top + // left: parent.left + // } + // height: topLabels.height + // width: 240 + // color: colors.colorFxHeaderLightBg + // } + } + + // Info Details + Rectangle { + id: topInfoDetailsPanel + + height: parent.height + // clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + // Row { + // id: controlRow + + // Item { + // id: quickFxDetailsPanel + + // height: display.height + // width: 260 + + // name + Text { + id: stemInfoName + font.capitalization: Font.AllUppercase + text: "SELECTED QUICK FX" + color: settings.accentColor + + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: 10 + + font.pixelSize: fonts.scale(13.5) + elide: Text.ElideRight + } + + // value + Text { + id: nameValue + font.capitalization: Font.AllUppercase + text: fxModel.get(deckInfo.quickFXSelected).display || "---" + color: colors.colorWhite + + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 10 + + font.pixelSize: fonts.scale(13.5) + elide: Text.ElideRight + } + // } + // } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: topLabels.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + state: deckInfo.quickFXSelected != null ? "show" : "hide" + states: [ + State { + name: "show"; + PropertyChanges { target: topLabels; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: topLabels; y: -height} + } + ] +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/RollControls.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/RollControls.qml new file mode 100755 index 000000000000..0b85f5b4e983 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/RollControls.qml @@ -0,0 +1,230 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines +import '../ViewModels' as ViewModels + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: view + + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (240 - height) + property string name: "" + readonly property color barBgColor: "black" + property int deckId: 1 + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + Defines.Settings { id: settings } + + required property var deckInfo + + height: 65 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: view.height + color: colors.colorFxHeaderBg + } + + // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:80; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider1 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 160 + height: 80 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 240 + height: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider3 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + } + + // dividers + Rectangle { + id: fxInfoDivider4 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 40 + anchors.left: parent.left + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Column { + Row { + LoopInfoDetails { + id: header + label: "ROLL" + width: 200 + header: true + } + } + + Row { + LoopInfoDetails { + id: bottomInfoDetails1 + label: deckInfo.rollSizePad1 + label2: deckInfo.rollSizePad1 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails2 + label: deckInfo.rollSizePad2 + label2: deckInfo.rollSizePad2 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails3 + label: deckInfo.rollSizePad3 + label2: deckInfo.rollSizePad3 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails4 + label: deckInfo.rollSizePad4 + label2: deckInfo.rollSizePad4 + deckId: deckId + width: 80 + } + } + + Row { + LoopInfoDetails { + id: bottomInfoDetails5 + label: deckInfo.rollSizePad5 + label2: deckInfo.rollSizePad5 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails6 + label: deckInfo.rollSizePad6 + label2: deckInfo.rollSizePad6 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails7 + label: deckInfo.rollSizePad7 + label2: deckInfo.rollSizePad7 + deckId: deckId + width: 80 + } + LoopInfoDetails { + id: bottomInfoDetails8 + label: deckInfo.rollSizePad8 + label2: deckInfo.rollSizePad8 + deckId: deckId + width: 80 + } + } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: view.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: view; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: view; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/ToneControls.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/ToneControls.qml new file mode 100755 index 000000000000..0ecebfade340 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/ToneControls.qml @@ -0,0 +1,247 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: fxLabels + + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (240 - height) + property string name: "" + readonly property color barBgColor: "black" + property int deckId: 1 + property real adjustVal: 0.00 + property string adjust: adjustVal.toFixed(0) + + Timer { + id: toneTimer + property bool blink: false + + interval: 250 + repeat: true + running: adjust != 0 + + onTriggered: { + blink = !blink; + } + + onRunningChanged: { + blink = running; + } + } + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + Defines.Settings { id: settings } + + // MappingProperty { id: forward; path: "mapping.state." + deckId + ".forward"} + QtObject { + id: forward + property string description: "Description" + property var value: 0 + } + + property bool forwardVal: forward.value + + height: 65 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: fxLabels.height + color: colors.colorFxHeaderBg + } + + // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:80; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider1 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 160 + height: 80 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 240 + height: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider3 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + } + + // dividers + Rectangle { + id: fxInfoDivider4 + width:360; + height:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.topMargin: 40 + anchors.left: parent.left + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Column { + Row { + ToneInfoDetails { + id: header + label: "TONE" + width: 200 + header: true + } + } + + Row { + ToneInfoDetails { + id: bottomInfoDetails1 + label: "0" + color: adjust != 0 ? "grey" : "white" + width: 80 + } + ToneInfoDetails { + id: bottomInfoDetails2 + label: forwardVal ? "+1" : "-1" + color: forwardVal ? ((adjust == 1) && toneTimer.blink ? "white" : "lime") : ((adjust == -1) && toneTimer.blink ? "white" : "red") + width: 80 + } + ToneInfoDetails { + id: bottomInfoDetails3 + label: forwardVal ? "+2" : "-2" + color: forwardVal ? ((adjust == 2) && toneTimer.blink ? "white" : "lime") : ((adjust == -2) && toneTimer.blink ? "white" : "red") + width: 80 + } + ToneInfoDetails { + id: bottomInfoDetails4 + label: forwardVal ? "+3" : "-3" + color: forwardVal ? ((adjust == 3) && toneTimer.blink ? "white" : "lime") : ((adjust == -3) && toneTimer.blink ? "white" : "red") + width: 80 + } + } + + Row { + ToneInfoDetails { + id: bottomInfoDetails5 + label: forwardVal ? "+4" : "-4" + color: forwardVal ? ((adjust == 4) && toneTimer.blink ? "white" : "lime") : ((adjust == -4) && toneTimer.blink ? "white" : "red") + width: 80 + } + ToneInfoDetails { + id: bottomInfoDetails6 + label: forwardVal ? "+5" : "-5" + color: forwardVal ? ((adjust == 5) && toneTimer.blink ? "white" : "lime") : ((adjust == -5) && toneTimer.blink ? "white" : "red") + width: 80 + } + ToneInfoDetails { + id: bottomInfoDetails7 + label: forwardVal ? "+6" : "-6" + color: forwardVal ? ((adjust == 6) && toneTimer.blink ? "white" : "lime") : ((adjust == -6) && toneTimer.blink ? "white" : "red") + width: 80 + } + ToneInfoDetails { + id: bottomInfoDetails8 + label: forwardVal ? "+7" : "-7" + color: forwardVal ? ((adjust == 7) && toneTimer.blink ? "white" : "lime") : ((adjust == -7) && toneTimer.blink ? "white" : "red") + width: 80 + } + } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: fxLabels.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: fxLabels; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: fxLabels; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/ToneInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/ToneInfoDetails.qml new file mode 100755 index 000000000000..0e39735a4f92 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/ToneInfoDetails.qml @@ -0,0 +1,44 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + property string label: "" + property bool header: false + property string color: "white" + + width: 0 + height: 20 + + Defines.Colors { id: colors } + Defines.Settings {id: settings} + + // Level indicator for knobs + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 20 + width: parent.width + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: label + color: header ? settings.accentColor : fxInfoDetails.color + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 0 + font.pixelSize: fonts.scale(18) + anchors.leftMargin: 4 + elide: Text.ElideRight + horizontalAlignment: header ? Text.AlignLeft : Text.AlignHCenter + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/TopControls.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/TopControls.qml new file mode 100755 index 000000000000..3fb7fa1defa3 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/TopControls.qml @@ -0,0 +1,348 @@ +import QtQuick 2.15 + +import '../Defines' as Defines +import '../Widgets' as Widgets + +import Mixxx 1.0 as Mixxx + +//-------------------------------------------------------------------------------------------------------------------- +// FX CONTROLS +//-------------------------------------------------------------------------------------------------------------------- + +// The FxControls are located on the top of the screen and blend in if one of the top knobs is touched/changed + +Item { + id: topLabels + + property int topMargin: 0 + + property string showHideState: "hide" + property int fxUnit: 0 + property int yPositionWhenHidden: 0 - topLabels.height - headerBlackLine.height - headerShadow.height // also hides black border & shadow + property int yPositionWhenShown: topMargin + + readonly property color barBgColor: "black" + + property var fxModel: Mixxx.EffectsManager.visibleEffectsModel + + Defines.Colors { id: colors } + Defines.Durations { id: durations } + + height: 40 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: topInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: topLabels.height + color: colors.colorFxHeaderBg + // light grey background + Rectangle { + id:topInfoDetailsPanelLightBg + anchors { + top: parent.top + left: parent.left + } + height: topLabels.height + width: 80 + color: colors.colorFxHeaderLightBg + } + } + +// // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:40; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 80 + } + + // dividers + Rectangle { + id: fxInfoDivider1 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 160 + height: 40 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 240 + height: 40 + } + + // Info Details + Rectangle { + id: topInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + // AppProperty { id: fxDryWet; path: "app.traktor.fx." + (fxUnit + 1) + ".dry_wet" } + + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}]` + key: `mix` + id: fxDryWet + property string description: "" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + + // AppProperty { id: fxParam1; path: "app.traktor.fx." + (fxUnit + 1) + ".parameters.1" } + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect1]` + key: `meta` + id: fxParam1 + property string description: "" + property var valueRange: ({isDiscrete: false, steps: 0}) + } + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect1]` + key: `enabled` + id: fxEnabled1 + } + QtObject { + id: fxKnob1name + + property Mixxx.EffectSlotProxy slot: Mixxx.EffectsManager.getEffectSlot(1, 1) + property string description: "Description" + property var value: "---" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + Mixxx.ControlProxy { + id: fxSelect1 + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect1]` + key: `loaded_effect` + onValueChanged: { + fxKnob1name.value = topLabels.fxModel.get(value).display + } + } + + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect2]` + key: `meta` + id: fxParam2 + property string description: "" + property var valueRange: ({isDiscrete: false, steps: 0}) + } + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect2]` + key: `enabled` + id: fxEnabled2 + } + QtObject { + id: fxKnob2name + + property Mixxx.EffectSlotProxy slot: Mixxx.EffectsManager.getEffectSlot(1, 2) + property string description: "Description" + property var value: "---" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + Mixxx.ControlProxy { + id: fxSelect2 + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect2]` + key: `loaded_effect` + onValueChanged: { + fxKnob2name.value = topLabels.fxModel.get(value).display + } + } + + // AppProperty { id: fxParam3; path: "app.traktor.fx." + (fxUnit + 1) + ".parameters.3" } + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect3]` + key: `meta` + id: fxParam3 + property string description: "" + property var valueRange: ({isDiscrete: false, steps: 0}) + } + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect3]` + key: `enabled` + id: fxEnabled3 + } + QtObject { + id: fxKnob3name + + property Mixxx.EffectSlotProxy slot: Mixxx.EffectsManager.getEffectSlot(1, 3) + property string description: "Description" + property var value: "---" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + Mixxx.ControlProxy { + id: fxSelect3 + group: `[EffectRack1_EffectUnit${fxUnit + 1}_Effect3]` + key: `loaded_effect` + onValueChanged: { + fxKnob3name.value = topLabels.fxModel.get(value).display + } + } + + Mixxx.ControlProxy { + group: `[EffectRack1_EffectUnit${fxUnit + 1}]` + key: "enabled" + id: fxOn + property string description: "Description" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: fxButton1; path: "app.traktor.fx." + (fxUnit + 1) + ".buttons.1" } + QtObject { + id: fxButton1 + property string description: "Description" + property var value: fxEnabled1.value + property var valueRange: ({isDiscrete: true, steps: 1}) + } + + // AppProperty { id: fxButton1name; path: "app.traktor.fx." + (fxUnit + 1) + ".buttons.1.name" } + QtObject { + id: fxButton1name + property string description: "Description" + property var value: "ON" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: fxButton2; path: "app.traktor.fx." + (fxUnit + 1) + ".buttons.2" } + QtObject { + id: fxButton2 + property string description: "Description" + property var value: fxEnabled2.value + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: fxButton2name; path: "app.traktor.fx." + (fxUnit + 1) + ".buttons.2.name" } + QtObject { + id: fxButton2name + property string description: "Description" + property var value: "ON" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: fxButton3; path: "app.traktor.fx." + (fxUnit + 1) + ".buttons.3" } + QtObject { + id: fxButton3 + property string description: "Description" + property var value: fxEnabled3.value + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: fxButton3name; path: "app.traktor.fx." + (fxUnit + 1) + ".buttons.3.name" } + QtObject { + id: fxButton3name + property string description: "Description" + property var value: "ON" + property var valueRange: ({isDiscrete: true, steps: 1}) + } + + // AppProperty { id: fxType; path: "app.traktor.fx." + (fxUnit + 1) + ".type" } // singleMode -> fxSelect1.description else "DRY/WET" + QtObject { + id: fxType + property string description: "Description" + property var value: 0 + property var valueRange: ({isDiscrete: true, steps: 1}) + } + + Row { + id: controlRow + TopInfoDetails { + id: topInfoDetails1 + parameter: fxDryWet + isOn: fxOn.value + label: fxType.value == 1 ? ((fxSelect1.description == "Delay") ? "DELAY" : (fxSelect1.description == "Reverb") ? "REVRB" : (fxSelect1.description == "Flanger") ? "FLANG" : (fxSelect1.description == "Flanger Pulse") ? "FLN-P" : (fxSelect1.description == "Flanger Flux") ? "FLN-F" : (fxSelect1.description == "Gater") ? "GATER" : (fxSelect1.description == "Beatmasher 2") ? "BEATM" : (fxSelect1.description == "Delay T3") ? "T3DELAY" : (fxSelect1.description == "Filter LFO") ? "FLT-O" : (fxSelect1.description == "Filter Pulse") ? "FLT-P" : (fxSelect1.description == "Filter") ? "FILTR" : (fxSelect1.description == "Filter:92 Pulse") ? "F92-O" : (fxSelect1.description == "Filter:92 Pulse") ? "F92-P" : (fxSelect1.description == "Filter:92") ? "FLT92" : (fxSelect1.description == "Phaser") ? "PHFXASR" : (fxSelect1.description == "Phaser Pulse") ? "PHS-P" : (fxSelect1.description == "Phaser Flux") ? "PHS-F" : (fxSelect1.description == "Reverse Grain") ? "REVGR" : (fxSelect1.description == "Turntable FX") ? "TTFX" : (fxSelect1.description == "Iceverb") ? "ICEVB" : (fxSelect1.description == "Reverb T3") ? "T3REVRB" : (fxSelect1.description == "Ringmodulator") ? "RINGM" : (fxSelect1.description == "Digital LoFi") ? "LOFI" : (fxSelect1.description == "Mulholland Drive") ? "MHDRV" : (fxSelect1.description == "Transpose Stretch") ? "TRANS" : (fxSelect1.description == "BeatSlicer") ? "SLICER" : (fxSelect1.description == "Formant Filter") ? "FFTR" : (fxSelect1.description == "Peak Filter") ? "PFTR" : (fxSelect1.description == "Tape Delay") ? "TPDELAY" : (fxSelect1.description == "Ramp Delay") ? "RMPDLY" : (fxSelect1.description == "Auto Bouncer") ? "ABOUNCE" : (fxSelect1.description == "Bouncer") ? "BOUNCER" : (fxKnob3name.value == "LASLI") ? "LASLI" : (fxKnob3name.value == "GRANP") ? "GRANP" : (fxKnob3name.value == "B-O-M") ? "B-O-M" : (fxKnob3name.value == "POWIN") ? "POWIN" : (fxKnob3name.value == "EVNHR") ? "EVNHR" : (fxKnob3name.value == "ZZZRP") ? "ZZZRP" : (fxKnob3name.value == "STRRS") ? "STRRS" : (fxKnob3name.value == "STRRF") ? "STRRF" : (fxKnob3name.value == "DARKM") ? "DARKM" : (fxKnob3name.value == "FTEST") ? "FTEST" : fxSelect1.description) : "DRY/WET" + buttonLabel: fxType.value == 1 ? "ON" : "" + fxEnabled: (fxType.value != 1) || fxSelect1.value + barBgColor: topLabels.barBgColor + isPatternPlayer: (fxType.value == 2 ? true : false) + } + TopInfoDetails { + id: topInfoDetails2 + parameter: fxParam1 + isOn: fxButton1.value + label: fxKnob1name.value + buttonLabel: fxButton1name.value + fxEnabled: (fxSelect1.value || ((fxType.value == 1) && fxSelect1.value) ) + barBgColor: topLabels.barBgColor + isPatternPlayer: (fxType.value == 2 ? true : false) + } + + TopInfoDetails { + id: topInfoDetails3 + parameter: fxParam2 + isOn: fxButton2.value + label: fxKnob2name.value + buttonLabel: fxButton2name.value + fxEnabled: (fxSelect2.value || ((fxType.value == 1) && fxSelect1.value) ) + barBgColor: topLabels.barBgColor + isPatternPlayer: (fxType.value == 2 ? true : false) + } + + TopInfoDetails { + id: topInfoDetails4 + parameter: fxParam3 + isOn: fxButton3.value + label: fxKnob3name.value + buttonLabel: fxButton3name.value + fxEnabled: (fxSelect3.value || ((fxType.value == 1) && fxSelect1.value) ) + barBgColor: topLabels.barBgColor + isPatternPlayer: (fxType.value == 2 ? true : false) + } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: topLabels.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.overlayTransition; easing.type: Easing.InOutQuad } } + + Item { + id: showHide + state: showHideState + states: [ + State { + name: "show"; + PropertyChanges { target: topLabels; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: topLabels; y: yPositionWhenHidden} + } + ] + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/TopInfoDetails.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/TopInfoDetails.qml new file mode 100755 index 000000000000..92ea2991b01a --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Overlays/TopInfoDetails.qml @@ -0,0 +1,152 @@ +import QtQuick 2.15 + +import '../Widgets' as Widgets +import '../Defines' as Defines + +Item { + id: fxInfoDetails + + property var parameter: ({}) // set from outside + property bool isOn: false + property string label: "DRUMLOOP" + property string sizeState: "small" + property string buttonLabel: "HP ON" + property bool fxEnabled: false + property bool indicatorEnabled: fxEnabled && label.length > 0 + property string finalValue: fxEnabled ? parameter.description : "" + property string finalLabel: fxEnabled ? label : "" + property string finalButtonLabel: fxEnabled ? buttonLabel : "" + property color barBgColor // set from outside + property bool isPatternPlayer: false + + property alias textColor: colors.colorFontFxHeader + + readonly property int macroEffectChar: 0x00B6 + readonly property bool isMacroFx: (finalLabel.charCodeAt(0) == macroEffectChar) + + width: 80 + height: 45 + + Defines.Colors { id: colors } + Defines.Settings {id: settings} + + // Level indicator for knobs + Widgets.ProgressBar { + id: slider + progressBarHeight: (sizeState == "small") ? 6 : 9 + progressBarWidth: 76 + anchors.left: parent.left + anchors.top: parent.top + anchors.topMargin: 3 + anchors.leftMargin: 2 + + value: parameter.value + visible: fxEnabled + + drawAsEnabled: indicatorEnabled + + progressBarBackgroundColor: parent.barBgColor + } + + // stepped progress bar + Widgets.StateBar { + id: slider2 + height: (sizeState == "small") ? 6 : 9 + width: 76 + anchors.left: parent.left + anchors.top: parent.top + anchors.leftMargin: 2 + anchors.topMargin: 3 + + stateCount: parameter.valueRange.steps + currentState: (slider2.stateCount - 1.0 + 0.2) * parameter.value // +.2 to make sure we round in the right direction + visible: parameter.valueRange != undefined && parameter.valueRange.steps > 1 && fxEnabled && label.length > 0 + barBgColor: parent.barBgColor + } + + // Diverse Elements + Item { + id: fxInfoDetailsPanel + + height: 100 + width: parent.width + + Rectangle { + id: macroIconDetails + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 4 + anchors.topMargin: 15 + + width: 12 + height: 11 + radius: 1 + visible: isMacroFx + color: colors.colorGrey216 + + Text { + anchors.fill: parent + anchors.topMargin: -1 + anchors.leftMargin: 1 + text: "M" + font.pixelSize: fonts.miniFontSize + color: colors.colorBlack + } + } + + // fx name + Text { + id: fxInfoSampleName + font.capitalization: Font.AllUppercase + text: finalLabel + color: isPatternPlayer ? colors.colorGreenMint : settings.accentColor + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 8 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: isMacroFx ? 26 : 4 + anchors.rightMargin: 12 + elide: Text.ElideRight + } + + // value + Text { + id: fxInfoValueLarge + text: finalValue + font.family: "Pragmatica" // is monospaced + color: colors.colorWhite + visible: label.length > 0 + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 4 + font.pixelSize: 15 + anchors.topMargin: 24 + } + + // button + Rectangle { + id: fxInfoFilterButton + width: 30 + + color: ( fxEnabled ? (isOn ? (isPatternPlayer ? colors.colorGreenMint : colors.colorIndicatorLevelOrange) : colors.colorBlack) : "transparent" ) + visible: buttonLabel.length > 0 + radius: 1 + anchors.right: parent.right + anchors.rightMargin: 2 + anchors.top: parent.top + height: 15 + anchors.topMargin: 26 + + Text { + id: fxInfoFilterButtonText + font.capitalization: Font.AllUppercase + text: finalButtonLabel + color: ( fxEnabled ? (isOn ? colors.colorBlack : colors.colorGrey128) : colors.colorGrey128 ) + font.pixelSize: fonts.miniFontSize + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/Cell.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/Cell.qml new file mode 100755 index 000000000000..7df5c69b37ea --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/Cell.qml @@ -0,0 +1,54 @@ +import QtQuick 2.5 + +Item { + id: cell + property int slotId:0 + property int deckId: 0 + property int cellId: 0 + + readonly property bool isEmpty: propState.description == "Empty" + readonly property color color: isEmpty ? colors.colorDeckBrightGrey : colors.palette(computeBrightness(propState.description, propDisplayState.description), propColorId.value) + readonly property color brightColor: isEmpty ? colors.colorDeckBrightGrey : colors.palette(1., propColorId.value) + readonly property color midColor: isEmpty ? colors.colorDeckGrey : colors.palette(0.5, propColorId.value) + readonly property color dimmedColor: isEmpty ? colors.colorDeckDarkGrey : colors.palette(0., propColorId.value) + + readonly property string name: propName.value + readonly property bool isLooped: propPlayMode.description == "Looped" + + // AppProperty { id: propColorId; path: "app.traktor.decks." + deckId + ".remix.cell.columns." + slotId + ".rows." + cellId + ".color_id" } + QtObject { + id: propColorId + property string description: "Description" + property var value: 0 + } + // AppProperty { id: propName; path: "app.traktor.decks." + deckId + ".remix.cell.columns." + slotId + ".rows." + cellId + ".name" } + QtObject { + id: propName + property string description: "Description" + property var value: 0 + } + //PlayMode can be "Looped" or "OneShot" + // AppProperty { id: propPlayMode; path: "app.traktor.decks." + deckId + ".remix.cell.columns." + slotId + ".rows." + cellId + ".play_mode" } + QtObject { + id: propPlayMode + property string description: "Description" + property var value: 0 + } + // AppProperty { id: propState; path: "app.traktor.decks." + deckId + ".remix.cell.columns." + slotId + ".rows." + cellId + ".state" } + QtObject { + id: propState + property string description: "Description" + property var value: 0 + } + // AppProperty { id: propDisplayState; path: "app.traktor.decks." + deckId + ".remix.cell.columns." + slotId + ".rows." + cellId + ".animation.display_state"} + QtObject { + id: propDisplayState + property string description: "Description" + property var value: 0 + } + + function computeBrightness(state, displayState) { + if (state == "Playing" && displayState == "BrightColor" ) {return 1.;} + return 0.5; + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/DeckInfo.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/DeckInfo.qml new file mode 100755 index 000000000000..bf018e723737 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/DeckInfo.qml @@ -0,0 +1,1568 @@ +import QtQuick 2.5 +import '../Defines' as Defines + +import Mixxx 1.0 as Mixxx + +//---------------------------------------------------------------------------------------------------------------------- +// Track Deck Model - provide data for the track deck view +//---------------------------------------------------------------------------------------------------------------------- + +Item { + id: viewModel + + property string group: `[Channel${viewModel.deckId}]` + readonly property var deckPlayer: Mixxx.PlayerManager.getPlayer(viewModel.group) + readonly property var currentPlayer: viewModel.deckPlayer?.currentTrack + readonly property string screenName: isLeftScreen(viewModel.deckId) ? "leftdeck" : "rightdeck" + + function onSharedDataUpdate(data) { + if (typeof data !== "object") { + return; + } + if (typeof data.group[screenName] === "string") { + viewModel.group = data.group[screenName] + console.log(`Changed group for screen ${screenName} to ${viewModel.group}`); + } + if (typeof data.shift === "object") { + propShift.value = !!data.shift[screenName] + } + if (typeof data.padsMode === "object") { + propPadsMode.value = data.padsMode[viewModel.group] + console.log(`Changed padsMode for screen ${screenName} to ${propPadsMode.value}`); + } + if (typeof data.selectedQuickFX !== "undefined") { + propSelectedQuickFX.value = data.selectedQuickFX + console.log(`Changed selectedQuickFX to ${propSelectedQuickFX.value}`); + } + if (typeof data.selectedStems === "object") { + let firstSelected = (data.selectedStems[viewModel.group] || []).findIndex(x => !!x); + propStemSelected.active = firstSelected >= 0; + if (propStemSelected.active) { + propStemSelected.idx = firstSelected; + } + console.log(`Changed selectedStems for screen ${screenName} to ${propStemSelected.idx}`); + } + if (typeof data.selectedHotcue === "object") { + let hotcue = data.selectedHotcue[viewModel.group]; + + if (hotcue) { + let model = viewModel.currentPlayer?.hotcuesModel?.get(hotcue - 1); + viewModel.hotcueId = hotcue; + viewModel.hotcuePressed = true; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } else { + viewModel.hotcuePressed = false; + } + + console.log(`Changed selectedHotcue for screen ${screenName} to ${hotcue}`); + } + if (typeof data.deckColor === "object") { + propDeckColors.a = data.deckColor["[Channel1]"] + propDeckColors.b = data.deckColor["[Channel2]"] + propDeckColors.c = data.deckColor["[Channel3]"] + propDeckColors.d = data.deckColor["[Channel4]"] + } + if (typeof data.rollpadSize === "object") { + for (let i = 0; i < 8; i++) { + switch (`${data.rollpadSize[i]}`.toLowerCase()) { + case "double": + propRollSizePad[`pad${i+1}`] = "x2" + break; + case "half": + propRollSizePad[`pad${i+1}`] = "/2" + break; + default: + propRollSizePad[`pad${i+1}`] = parseFloat(data.rollpadSize[i]) < 1 ? `1/${1/parseFloat(data.rollpadSize[i])}` : data.rollpadSize[i] + } + } + } + if (typeof data.beatjumpSize === "object") { + for (let i = 0; i < 8; i++) { + switch (`${data.beatjumpSize[i]}`.toLowerCase()) { + case "double": + propJumpSizePad[`pad${i+1}`] = "x2" + break; + case "half": + propJumpSizePad[`pad${i+1}`] = "/2" + break; + case "beatjump": + propJumpSizePad[`pad${i+1}`] = "??" + break; + default: + propJumpSizePad[`pad${i+1}`] = parseFloat(data.beatjumpSize[i]) < 1 ? `1/${1/parseFloat(data.beatjumpSize[i])}` : data.beatjumpSize[i] + } + } + } + } + Component.onCompleted: { + if (typeof engine.makeSharedDataConnection === "function") { + engine.makeSharedDataConnection(viewModel.onSharedDataUpdate) + viewModel.onSharedDataUpdate(engine.getSharedData()) + } + } + + function isLeftScreen(deckId) { + return deckId == 1 || deckId == 3; + } + + function deckLetter(deckId) { + switch (deckId) { + case 1: return "A"; + case 2: return "B"; + case 3: return "C"; + default: + console.error(`Unknown deck ${deckId}. Defaulting to D`); + case 4: + return "D"; + } + } + + function tempoNeeded(master, current) { + if (master > current) { + return (1-(current/master))*100; + } + return (master/current)*100; + } + + function toInt_round(val) { return parseInt(val+0.5); } + + function computeBeatCounterStringFromPosition(beat) { + var phraseLen = 4; + var curBeat = parseInt(beat); + + if (beat < 0.0) + curBeat = curBeat*-1; + + var value1 = parseInt(((curBeat/4)/phraseLen)+1); + var value2 = parseInt(((curBeat/4)%phraseLen)+1); + var value3 = parseInt( (curBeat%4)+1); + + if (beat < 0.0) + return "-" + value1.toString() + "." + value2.toString() + "." + value3.toString(); + + return value1.toString() + "." + value2.toString() + "." + value3.toString(); + } + + function computeBeatCounterStringFromPositionSingle(beat) { + var phraseLen = 4; + var curBeat = parseInt(beat); + + if (beat < 0.0) + curBeat = curBeat*-1; + + var value3 = parseInt( (curBeat%4)+1); + + return value3.toString(); + } + + function computeBeatCounterStringFromPositionAlt(beat) { + var phraseLen = 4; + var curBeat = parseInt(beat); + + if (beat < 0.0) + curBeat = curBeat*-1; + + var value1 = parseInt(((curBeat)/phraseLen)+1); + var value2 = parseInt( (curBeat%4)+1); + + if (beat < 0.0) + return "-" + value1.toString() + "." + value2.toString(); + + return value1.toString() + "." + value2.toString(); + } + + //////////////////////////////////// + ////// Global info properties ////// + //////////////////////////////////// + QtObject { + id: propDeckColors + property int a: 10 + property int b: 10 + property int c: 2 + property int d: 2 + } + QtObject { + id: propRollSizePad + property var pad1: 1/32 + property var pad2: 1/16 + property var pad3: 1/8 + property var pad4: 1/4 + property var pad5: 1/2 + property var pad6: 1 + property var pad7: 2 + property var pad8: 4 + } + QtObject { + id: propJumpSizePad + property var pad1: 0.5 + property var pad2: 1 + property var pad3: 2 + property var pad4: 4 + property var pad5: 8 + property var pad6: 16 + property var pad7: 32 + property var pad8: 64 + } + + readonly property int deckAColor: propDeckColors.a + readonly property int deckBColor: propDeckColors.b + readonly property int deckCColor: propDeckColors.c + readonly property int deckDColor: propDeckColors.d + + //////////////////////////////////// + /////// Track info properties ////// + //////////////////////////////////// + + property int deckId: 1 + readonly property bool trackEndWarning: propTrackEndWarning.value + readonly property bool shift: propShift.value + readonly property string artistString: isLoaded ? propArtist.value : "Mixxx" + readonly property string bpmString: isLoaded ? propBPM.value.toFixed(2).toString() : "0.00" + readonly property string beats: computeBeatCounterStringFromPosition(((propElapsedTime.value*1000-propGridOffset.value)*propMixerBpm.value)/60000.0) + readonly property string beatSingle: computeBeatCounterStringFromPositionSingle(((propElapsedTime.value*1000-propGridOffset.value)*propMixerBpm.value)/60000.0) + readonly property string beatsAlt: computeBeatCounterStringFromPositionAlt(((propElapsedTime.value*1000-propGridOffset.value)*propMixerBpm.value)/60000.0) + readonly property string masterDeckLetter: leaderGroup.replace('[Channel', '').substr(0, 1) + readonly property string masterBPM: isLoaded ? propMasterBPM.value : 0.00 + readonly property string masterBPMShort: isLoaded ? propMasterBPM.value.toFixed(2).toString() : 0.00 + readonly property string masterBPMFooter: isLoaded ? propMasterBPM.value.toFixed(2).toString() + " BPM" : "" + readonly property string masterBPMFooter2: isLoaded ? propMasterBPM.value.toFixed(2).toString() + "BPM" : "" + readonly property string bpmOffset: isLoaded ? (bpmString - masterBPM).toFixed(2).toString() : "0.00" + readonly property string tempoString: isLoaded ? (propTempo.value).toFixed(2).toString() : "0.00" + readonly property string tempoRange: toInt_round(propTempoRange.value*100).toString() + "%" + readonly property string tempoStringPer: tempoString+'%' + readonly property string tempoNeededVal: tempoNeeded(masterBPMShort, bpmString).toFixed(2).toString() + readonly property string tempoNeededString: isLoaded ? (tempoNeededVal == 0) ? "0.00" : (tempoNeededVal < 0) ? tempoNeededVal + "%" : "+" + tempoNeededVal + "%" : "0.00" + readonly property string songBPM: propSongBPM.value.toFixed(2).toString() + readonly property bool hightlightLoop: !shift + readonly property bool hightlightKey: shift + readonly property int isLoaded: (propTrackLength.value > 0) + readonly property bool showLogo: propTrackLength.value == 0 ? true : false + readonly property string keyString: propKeyForDisplay.value + readonly property string masterKey: propMasterKey.value + readonly property int keyIndex: propFinalKeyId.value + readonly property int masterKeyIndex: propMasterKeyId.value + readonly property bool hasKey: isLoaded && keyIndex >= 0 + readonly property bool hasTempo: isLoaded && !!propTempo.value + readonly property bool isKeyLockOn: propKeyLockOn.value + readonly property bool isSyncOn: propIsInSync.value + readonly property bool isStemDeck: (propIsStemDeck.value >= 2) ? true : false + readonly property bool loopActive: propLoopActive.value + readonly property string loopSizeString: propLoopSize.value < 1 ? `1/${1 / propLoopSize.value}` : `${propLoopSize.value}` + readonly property string loopSizeInt: propLoopSize.value + readonly property string remainingTimeString: (!isLoaded) ? "00:00" : utils.computeRemainingTimeString(propTrackLength.value, propElapsedTime.value) + readonly property string elapsedTimeString: (!isLoaded) ? "00:00" : utils.convertToTimeString(Math.floor(propElapsedTime.value)) + readonly property string titleString: isLoaded ? propTitle.value : "Load a Track to Deck " + deckLetter(deckId) + readonly property real phase: isPlaying && leaderGroup != group ? propPhase.value : 0 + readonly property bool touchKey: false // TODO map shift encoder touch event + readonly property bool touchTime: false // TODO map shift encoder touch event + readonly property bool touchLoop: false // TODO map shift encoder touch event + readonly property int deckType: propDeckType.value + readonly property string keyAdjustString: (keyAdjustVal < 0 ? "" : "+") + (keyAdjustVal).toFixed(0).toString() + readonly property real keyAdjustVal: propKeyAdjust.value*12 + readonly property variant loopSizeText: ["1/32", "1/16", "1/8", "1/4", "1/2", "1", "2", "4", "8", "16", "32"] + readonly property bool slicerEnabled: propEnabled.value + readonly property int slicerNo: propSlicerNo.value + readonly property int slicerSize: propSlicerSize.value + + readonly property bool headerEnabled: propHeaderEnabled.value + readonly property string headerText: propHeaderText.value + readonly property string headerTextLong: propHeaderTextLong.value + readonly property int sampleRate: propSampleRate.value + + readonly property bool isPlaying: propIsPlaying.value + + readonly property bool is1Playing: propIs1Playing.value + readonly property bool is2Playing: propIs2Playing.value + readonly property bool is3Playing: propIs3Playing.value + readonly property bool is4Playing: propIs4Playing.value + + Mixxx.ControlProxy { + group: viewModel.group + key: "track_samplerate" + id: propSampleRate + } + Mixxx.ControlProxy { + group: viewModel.leaderGroup + key: "track_samplerate" + id: propLeaderSampleRate + } + Mixxx.ControlProxy { + group: viewModel.group + id: propTempoRange + key: "rateRange" + } + QtObject { + id: propEnabled + property var value: 0 + } + QtObject { + id: propSlicerNo + property var value: 0 + } + QtObject { + id: propSlicerSize + property var value: 0 + } + QtObject { + id: propDeckType + property var value: 0 + } + Mixxx.ControlProxy { + group: viewModel.group + key: "play" + id: propIsPlaying + } + + Mixxx.ControlProxy { + group: "[Channel1]" + id: propIs1Leader + key: "sync_mode" + } + + Mixxx.ControlProxy { + group: "[Channel2]" + id: propIs2Leader + key: "sync_mode" + } + + Mixxx.ControlProxy { + group: "[Channel3]" + id: propIs3Leader + key: "sync_mode" + } + + Mixxx.ControlProxy { + group: "[Channel4]" + id: propIs4Leader + key: "sync_mode" + } + + readonly property string leaderGroup: propIs1Leader.value >= 2 ? `[Channel1]` : propIs2Leader.value >= 2 ? `[Channel2]` : propIs3Leader.value >= 2 ? `[Channel3]` : propIs4Leader.value >= 2 ? `[Channel4]` : viewModel.group + + Mixxx.ControlProxy { + group: "[Channel1]" + key: "play" + id: propIs1Playing + } + Mixxx.ControlProxy { + group: "[Channel2]" + key: "play" + id: propIs2Playing + } + Mixxx.ControlProxy { + group: "[Channel3]" + key: "play" + id: propIs3Playing + } + Mixxx.ControlProxy { + group: "[Channel4]" + key: "play" + id: propIs4Playing + } + + QtObject { + id: propTitle + property var value: viewModel.currentPlayer?.title || "Unknown" + } + QtObject { + id: propArtist + property var value: viewModel.currentPlayer?.artist || "Unknown" + } + Mixxx.ControlProxy { + group: viewModel.group + id: propSongBPM + key: "file_bpm" + } + + Mixxx.ControlProxy { + group: viewModel.group + id: propKey + key: "key" + } + QtObject { + id: propKeyForDisplay + property var value: [ + "No key", + "1d", + "8d", + "3d", + "10d", + "5d", + "12d", + "7d", + "2d", + "9d", + "4d", + "11d", + "6d", + "10m", + "5m", + "12m", + "7m", + "2m", + "9m", + "4m", + "11m", + "6m", + "1m", + "8m", + "3m" + ][propKey.value] + } + QtObject { + id: propMasterKey + property var value: 0 + } + QtObject { + id: propMixerBpm + property var value: 0 + } + QtObject { + id: propMixerBpmMaster + property var value: 160 + } + QtObject { + id: propFinalKeyId + property var value: propKey.value + } + Mixxx.ControlProxy { + group: viewModel.leaderGroup + id: propMasterKeyId + key: "key" + } + QtObject { + id: propKeyAdjust + property var value: 0 + } + QtObject { + id: propGridOffset + property var value: 0 + } + QtObject { + id: propGridOffsetMaster + property var value: 10000 + } + + Mixxx.ControlProxy { + group: viewModel.group + id: propKeyLockOn + key: "keylock" + } + Mixxx.ControlProxy { + group: viewModel.group + key: "bpm" + id: propBPM + } + Mixxx.ControlProxy { + group: '[InternalClock]' + key: "bpm" + id: propMasterBPM + } + Mixxx.ControlProxy { + group: viewModel.group + key: "visual_bpm" + id: propTempo + } + QtObject { + id: propTempoAbsolute + property var value: 0 + } + + Mixxx.ControlProxy { + group: viewModel.group + key: "beat_closest" + id: propBeatClosest + } + Mixxx.ControlProxy { + group: viewModel.group + key: "track_samples" + id: propSample + } + QtObject { + id: propBeatSample + property var value: (propSampleRate.value * 60) / propBPM.value + } + QtObject { + id: propBeatSampleOffset + property var value: propBeatClosest.value % propBeatSample.value + } + QtObject { + id: propBeat + property var value: (propTrackPosition.value * propSample.value / 2) / propBeatSample.value + } + Mixxx.ControlProxy { + group: viewModel.leaderGroup + key: "beat_closest" + id: propLeaderBeatClosest + } + Mixxx.ControlProxy { + group: viewModel.leaderGroup + key: "track_samples" + id: propLeaderSample + } + QtObject { + id: propLeaderBeatSample + property var value: (propLeaderSampleRate.value * 60) / propMasterBPM.value + } + QtObject { + id: propLeaderBeatSampleOffset + property var value: propLeaderBeatClosest.value % propLeaderBeatSample.value + } + QtObject { + id: propLeaderBeat + property var value: (propLeaderTrackPosition.value * propLeaderSample.value / 2) / propLeaderBeatSample.value + } + QtObject { + id: propPhase + property var value: (propLeaderBeat.value-propBeat.value - 0.5) % 1 - 0.5 + } + Mixxx.ControlProxy { + group: viewModel.group + key: "beatloop_size" + id: propLoopSize + } + Mixxx.ControlProxy { + id: propLoopActive + group: viewModel.group + key: "loop_enabled" + } + QtObject { + id: proploopActive + property var value: 0 + } + Mixxx.ControlProxy { + id: propTrackLength + group: viewModel.group + key: "duration" + } + Mixxx.ControlProxy { + id: propTrackPosition + group: viewModel.group + key: "playposition" + } + Mixxx.ControlProxy { + id: propLeaderTrackPosition + group: viewModel.leaderGroup + key: "playposition" + } + QtObject { + id: propElapsedTime + property var value: parseInt(propTrackPosition.value * propTrackLength.value) + } + Mixxx.ControlProxy { + group: viewModel.group + key: `end_of_track` + id: propTrackEndWarning + } + + QtObject { + id: propHeaderEnabled + property var value: false + } + QtObject { + id: propHeaderText + property var value: "HeaderText" + } + QtObject { + id: propHeaderTextLong + property var value: "HeaderTextLong" + } + + Mixxx.ControlProxy { + group: viewModel.group + key: "stem_count" + id: propIsStemDeck + } + + Timer { + id: loopAdjust + property bool show: false + + triggeredOnStart: true + interval: settings.loopOverlayTimer + repeat: false + running: false + + onTriggered: { + show = !show + } + } + + Mixxx.ControlProxy { + group: viewModel.group + key: "beats_translate_curpos" + id: propBeatsTranslateCurpos + onValueChanged: { + loopAdjust.running = true + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: "beats_adjust_faster" + id: propBeatsAdjustFaster + onValueChanged: { + loopAdjust.running = true + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: "beats_adjust_slower" + id: propBeatsAdjustSlower + onValueChanged: { + loopAdjust.running = true + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: "beats_translate_later" + id: propBeatsTranslateLater + onValueChanged: { + loopAdjust.running = true + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: "beats_translate_earlier" + id: propBeatsTranslateEarlier + onValueChanged: { + loopAdjust.running = true + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: "rateRange" + id: propRateRange + onValueChanged: { + loopAdjust.running = true + } + } + + readonly property bool adjustEnabled: settings.showBPMGridAdjust ? loopAdjust.show : false + + QtObject { + id: propPadsMode + property var value: 0 + } + QtObject { + id: propSelectedQuickFX + property var value: null + } + readonly property var quickFXSelected: propSelectedQuickFX.value + property bool padsModeJump: propPadsMode.value == 1 + property bool padsModeLoop: propPadsMode.value == 5 + property bool padsModeRoll: propPadsMode.value == 3 + property bool padsModeTone: propPadsMode.value == 11 + property bool padsModeBank1: propPadsMode.value == 12 + property bool padsModeBank2: propPadsMode.value == 13 + + Mixxx.ControlProxy { + id: propIsInSync + group: root.group + key: "sync_enabled" + } + + Mixxx.ControlProxy { + id: propBrowser + group: "[Skin]" + key: "show_maximized_library" + } + readonly property bool isInBrowserMode: propBrowser.value + + QtObject { + id: propShift + property bool value: false + } + + Mixxx.ControlProxy { + id: propZoom + + group: root.group + key: "waveform_zoom" + onValueChanged: { + loopAdjust.running = true + } + } + + readonly property int zoomLevel: propZoom.value + + //fx and overlays + property var fxModel: Mixxx.EffectsManager.visibleEffectsModel + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: "mix_mode" + id: propFx1Type + } + readonly property int fx1Type: propFx1Type.value + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: "mix_mode" + id: propFx2Type + } + readonly property int fx2Type: propFx2Type.value + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: "mix_mode" + id: propFx3Type + } + readonly property int fx3Type: propFx3Type.value + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: "mix_mode" + id: propFx4Type + } + readonly property int fx4Type: propFx4Type.value + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: "mix" + id: propFx1DryWet + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: "mix" + id: propFx2DryWet + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1_Effect1]" + key: `meta` + id: propFx1Knob1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1_Effect2]" + key: `meta` + id: propFx1Knob2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1_Effect3]" + key: `meta` + id: propFx1Knob3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2_Effect1]" + key: `meta` + id: propFx2Knob1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2_Effect2]" + key: `meta` + id: propFx2Knob2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2_Effect3]" + key: `meta` + id: propFx2Knob3 + } + + Mixxx.ControlProxy { + id: propFx1Knob1Name + group: "[EffectRack1_EffectUnit1_Effect1]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1_Effect2]" + key: "loaded_effect" + id: propFx1Knob2Name + } + Mixxx.ControlProxy { + id: propFx1Knob3Name + group: "[EffectRack1_EffectUnit1_Effect3]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + id: propFx2Knob1Name + group: "[EffectRack1_EffectUnit2_Effect1]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + id: propFx2Knob2Name + group: "[EffectRack1_EffectUnit2_Effect2]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + id: propFx2Knob3Name + group: "[EffectRack1_EffectUnit2_Effect3]" + key: "loaded_effect" + } + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: "enabled" + id: propFx1Enabled + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: `enabled` + id: propFx2Enabled + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1_Effect1]" + key: `enabled` + id: propFx1Button1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1_Effect2]" + key: `enabled` + id: propFx1Button2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1_Effect3]" + key: `enabled` + id: propFx1Button3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2_Effect1]" + key: `enabled` + id: propFx2Button1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2_Effect2]" + key: `enabled` + id: propFx2Button2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2_Effect3]" + key: `enabled` + id: propFx2Button3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: `group_[Channel1]_enable` + id: propFx1Ch1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: `group_[Channel2]_enable` + id: propFx1Ch2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: `group_[Channel3]_enable` + id: propFx1Ch3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: `group_[Channel4]_enable` + id: propFx1Ch4 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: `group_[Channel1]_enable` + id: propFx2Ch1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: `group_[Channel2]_enable` + id: propFx2Ch2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: `group_[Channel3]_enable` + id: propFx2Ch3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: `group_[Channel4]_enable` + id: propFx2Ch4 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: `group_[Channel1]_enable` + id: propFx3Ch1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: `group_[Channel2]_enable` + id: propFx3Ch2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: `group_[Channel3]_enable` + id: propFx3Ch3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: `group_[Channel4]_enable` + id: propFx3Ch4 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: `group_[Channel1]_enable` + id: propFx4Ch1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: `group_[Channel2]_enable` + id: propFx4Ch2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: `group_[Channel3]_enable` + id: propFx4Ch3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: `group_[Channel4]_enable` + id: propFx4Ch4 + } + + readonly property real fx1DryWet: propFx1DryWet.value + readonly property real fx2DryWet: propFx2DryWet.value + readonly property real fx1Knob1: propFx1Knob1.value + readonly property real fx1Knob2: propFx1Knob2.value + readonly property real fx1Knob3: propFx1Knob3.value + readonly property real fx2Knob1: propFx2Knob1.value + readonly property real fx2Knob2: propFx2Knob2.value + readonly property real fx2Knob3: propFx2Knob3.value + + readonly property string fx1Knob1Name: viewModel.fxModel.get(propFx1Knob1Name.value).display + readonly property string fx1Knob2Name: viewModel.fxModel.get(propFx1Knob2Name.value).display + readonly property string fx1Knob3Name: viewModel.fxModel.get(propFx1Knob3Name.value).display + readonly property string fx2Knob1Name: viewModel.fxModel.get(propFx2Knob1Name.value).display + readonly property string fx2Knob2Name: viewModel.fxModel.get(propFx2Knob2Name.value).display + readonly property string fx2Knob3Name: viewModel.fxModel.get(propFx2Knob3Name.value).display + + readonly property bool fx1Enabled: propFx1Enabled.value + readonly property bool fx2Enabled: propFx2Enabled.value + readonly property bool fx1Button1: propFx1Button1.value + readonly property bool fx1Button2: propFx1Button2.value + readonly property bool fx1Button3: propFx1Button3.value + readonly property bool fx2Button1: propFx2Button1.value + readonly property bool fx2Button2: propFx2Button2.value + readonly property bool fx2Button3: propFx2Button3.value + + readonly property bool fx1Ch1: propFx1Ch1.value + readonly property bool fx1Ch2: propFx1Ch2.value + readonly property bool fx1Ch3: propFx1Ch3.value + readonly property bool fx1Ch4: propFx1Ch4.value + readonly property bool fx2Ch1: propFx2Ch1.value + readonly property bool fx2Ch2: propFx2Ch2.value + readonly property bool fx2Ch3: propFx2Ch3.value + readonly property bool fx2Ch4: propFx2Ch4.value + + onFx1DryWetChanged: {fx1Timer.running = true} + onFx2DryWetChanged: {fx2Timer.running = true} + onFx1Knob1Changed: {fx1Timer.running = true} + onFx1Knob2Changed: {fx1Timer.running = true} + onFx1Knob3Changed: {fx1Timer.running = true} + onFx2Knob1Changed: {fx2Timer.running = true} + onFx2Knob2Changed: {fx2Timer.running = true} + onFx2Knob3Changed: {fx2Timer.running = true} + onFx1EnabledChanged: {fx1Timer.running = true} + onFx2EnabledChanged: {fx2Timer.running = true} + onFx1Button1Changed: {fx1Timer.running = true} + onFx1Button2Changed: {fx1Timer.running = true} + onFx1Button3Changed: {fx1Timer.running = true} + onFx2Button1Changed: {fx2Timer.running = true} + onFx2Button2Changed: {fx2Timer.running = true} + onFx2Button3Changed: {fx2Timer.running = true} + onFx1Ch1Changed: {fx1Timer.running = true} + onFx1Ch2Changed: {fx1Timer.running = true} + onFx1Ch3Changed: {fx1Timer.running = true} + onFx1Ch4Changed: {fx1Timer.running = true} + onFx2Ch1Changed: {fx2Timer.running = true} + onFx2Ch2Changed: {fx2Timer.running = true} + onFx2Ch3Changed: {fx2Timer.running = true} + onFx2Ch4Changed: {fx2Timer.running = true} + onFx1Knob1NameChanged: {fx1Timer.running = true} + onFx1Knob2NameChanged: {fx1Timer.running = true} + onFx1Knob3NameChanged: {fx1Timer.running = true} + onFx2Knob1NameChanged: {fx2Timer.running = true} + onFx2Knob2NameChanged: {fx2Timer.running = true} + onFx2Knob3NameChanged: {fx2Timer.running = true} + + onLoopSizeStringChanged: {loopTimer.running = true} + onLoopActiveChanged: {loopTimer.running = true} + + Timer { + id: loopTimer + property bool showLoop: false + + triggeredOnStart: true + interval: settings.loopOverlayTimer + repeat: false + running: false + + onTriggered: { + showLoop = !showLoop + } + } + + property bool showLoopInfo: loopTimer.showLoop + + onBpmStringChanged: {bpmTimer.running = true} + + Timer { + id: bpmTimer + property bool showBPM: false + + triggeredOnStart: true + interval: settings.bpmOverlayTimer + repeat: false + running: false + + onTriggered: { + showBPM = !showBPM + } + } + + property bool showBPMInfo: bpmTimer.showBPM && bpmTimer.running + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: "mix" + id: propFx3DryWet + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: "mix" + id: propFx4DryWet + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3_Effect1]" + key: `meta` + id: propFx3Knob1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3_Effect2]" + key: `meta` + id: propFx3Knob2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3_Effect3]" + key: `meta` + id: propFx3Knob3 + } + Mixxx.ControlProxy { + id: propFx4Knob1 + group: "[EffectRack1_EffectUnit4_Effect1]" + key: `meta` + } + Mixxx.ControlProxy { + id: propFx4Knob2 + group: "[EffectRack1_EffectUnit4_Effect2]" + key: `meta` + } + Mixxx.ControlProxy { + id: propFx4Knob3 + group: "[EffectRack1_EffectUnit4_Effect3]" + key: `meta` + } + + Mixxx.ControlProxy { + id: propFx3Knob1Name + group: "[EffectRack1_EffectUnit3_Effect1]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + id: propFx3Knob2Name + group: "[EffectRack1_EffectUnit3_Effect2]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + id: propFx3Knob3Name + group: "[EffectRack1_EffectUnit3_Effect3]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + id: propFx4Knob1Name + group: "[EffectRack1_EffectUnit4_Effect1]" + key: `loaded_effect` + } + Mixxx.ControlProxy { + id: propFx4Knob2Name + group: "[EffectRack1_EffectUnit4_Effect2]" + key: "loaded_effect" + } + Mixxx.ControlProxy { + id: propFx4Knob3Name + group: "[EffectRack1_EffectUnit4_Effect3]" + key: `loaded_effect` + } + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: "enabled" + id: propFx3Enabled + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: "enabled" + id: propFx4Enabled + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3_Effect1]" + key: `enabled` + id: propFx3Button1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3_Effect2]" + key: `enabled` + id: propFx3Button2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3_Effect3]" + key: `enabled` + id: propFx3Button3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4_Effect1]" + key: `enabled` + id: propFx4Button1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4_Effect2]" + key: `enabled` + id: propFx4Button2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4_Effect3]" + key: `enabled` + id: propFx4Button3 + } + + readonly property real fx3DryWet: propFx3DryWet.value + readonly property real fx4DryWet: propFx3DryWet.value + readonly property real fx3Knob1: propFx3Knob1.value + readonly property real fx3Knob2: propFx3Knob2.value + readonly property real fx3Knob3: propFx3Knob3.value + readonly property real fx4Knob1: propFx4Knob1.value + readonly property real fx4Knob2: propFx4Knob2.value + readonly property real fx4Knob3: propFx4Knob3.value + + readonly property string fx3Knob1Name: viewModel.fxModel.get(propFx3Knob1Name.value).display + readonly property string fx3Knob2Name: viewModel.fxModel.get(propFx3Knob2Name.value).display + readonly property string fx3Knob3Name: viewModel.fxModel.get(propFx3Knob3Name.value).display + readonly property string fx4Knob1Name: viewModel.fxModel.get(propFx4Knob1Name.value).display + readonly property string fx4Knob2Name: viewModel.fxModel.get(propFx4Knob2Name.value).display + readonly property string fx4Knob3Name: viewModel.fxModel.get(propFx4Knob3Name.value).display + + readonly property bool fx3Enabled: propFx3Enabled.value + readonly property bool fx4Enabled: propFx4Enabled.value + readonly property bool fx3Button1: propFx3Button1.value + readonly property bool fx3Button2: propFx3Button2.value + readonly property bool fx3Button3: propFx3Button3.value + readonly property bool fx4Button1: propFx4Button1.value + readonly property bool fx4Button2: propFx4Button2.value + readonly property bool fx4Button3: propFx4Button3.value + + readonly property bool fx3Ch1: propFx3Ch1.value + readonly property bool fx3Ch2: propFx3Ch2.value + readonly property bool fx3Ch3: propFx3Ch3.value + readonly property bool fx3Ch4: propFx3Ch4.value + readonly property bool fx4Ch1: propFx4Ch1.value + readonly property bool fx4Ch2: propFx4Ch2.value + readonly property bool fx4Ch3: propFx4Ch3.value + readonly property bool fx4Ch4: propFx4Ch4.value + + onFx3DryWetChanged: {fx3Timer.running = true} + onFx4DryWetChanged: {fx4Timer.running = true} + onFx3Knob1Changed: {fx3Timer.running = true} + onFx3Knob2Changed: {fx3Timer.running = true} + onFx3Knob3Changed: {fx3Timer.running = true} + onFx4Knob1Changed: {fx4Timer.running = true} + onFx4Knob2Changed: {fx4Timer.running = true} + onFx4Knob3Changed: {fx4Timer.running = true} + onFx3EnabledChanged: {fx3Timer.running = true} + onFx4EnabledChanged: {fx4Timer.running = true} + onFx3Button1Changed: {fx3Timer.running = true} + onFx3Button2Changed: {fx3Timer.running = true} + onFx3Button3Changed: {fx3Timer.running = true} + onFx4Button1Changed: {fx4Timer.running = true} + onFx4Button2Changed: {fx4Timer.running = true} + onFx4Button3Changed: {fx4Timer.running = true} + onFx3Ch1Changed: {fx3Timer.running = true} + onFx3Ch2Changed: {fx3Timer.running = true} + onFx3Ch3Changed: {fx3Timer.running = true} + onFx3Ch4Changed: {fx3Timer.running = true} + onFx4Ch1Changed: {fx4Timer.running = true} + onFx4Ch2Changed: {fx4Timer.running = true} + onFx4Ch3Changed: {fx4Timer.running = true} + onFx4Ch4Changed: {fx4Timer.running = true} + onFx3Knob1NameChanged: {fx3Timer.running = true} + onFx3Knob2NameChanged: {fx3Timer.running = true} + onFx3Knob3NameChanged: {fx3Timer.running = true} + onFx4Knob1NameChanged: {fx4Timer.running = true} + onFx4Knob2NameChanged: {fx4Timer.running = true} + onFx4Knob3NameChanged: {fx4Timer.running = true} + + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit1]" + key: `group_${viewModel.group}_enable` + id: propfx1 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit2]" + key: `group_${viewModel.group}_enable` + id: propfx2 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit3]" + key: `group_${viewModel.group}_enable` + id: propfx3 + } + Mixxx.ControlProxy { + group: "[EffectRack1_EffectUnit4]" + key: `group_${viewModel.group}_enable` + id: propfx4 + } + + readonly property bool fx1On: propfx1.value + readonly property bool fx2On: propfx2.value + readonly property bool fx3On: propfx3.value + readonly property bool fx4On: propfx4.value + + Timer { + id: fx1Timer + property bool blink: false + + triggeredOnStart: true + interval: settings.fxOverlayTimer + repeat: false + running: fx1On + + onTriggered: { + blink = !blink + } + } + + Timer { + id: fx2Timer + property bool blink: false + + triggeredOnStart: true + interval: settings.fxOverlayTimer + repeat: false + running: fx2On + + onTriggered: { + blink = !blink + } + } + + Timer { + id: fx3Timer + property bool blink: false + + triggeredOnStart: true + interval: settings.fxOverlayTimer + repeat: false + running: fx3On + + onTriggered: { + blink = !blink + } + } + + Timer { + id: fx4Timer + property bool blink: false + + triggeredOnStart: true + interval: settings.fxOverlayTimer + repeat: false + running: fx4On + + onTriggered: { + blink = !blink + } + } + + readonly property bool showFx1: fx1On && fx1Timer.blink + readonly property bool showFx2: fx2On && fx2Timer.blink + readonly property bool showFx3: fx3On && fx3Timer.blink + readonly property bool showFx4: fx4On && fx4Timer.blink + + Mixxx.ControlProxy { + id: propView + group: "[Skin]" + key: "show_maximized_library" + } + + readonly property bool viewButton: propView.value && false + + property int hotcueId: 0 + readonly property bool hotcueDisplay: hotcuePressed || cueTimer.running + property string hotcueName: "" + property int hotcueType: 0 + + property bool hotcuePressed: false + onHotcuePressedChanged: {hotcuePressed == false ? cueTimer.restart() : hotcuePressed = hotcuePressed } + + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_1_activate` + id: propHotcue1Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(0); + viewModel.hotcueId = 1; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_2_activate` + id: propHotcue2Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(1); + viewModel.hotcueId = 2; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_3_activate` + id: propHotcue3Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(2); + viewModel.hotcueId = 3; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_4_activate` + id: propHotcue4Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(3); + viewModel.hotcueId = 4; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_5_activate` + id: propHotcue5Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(4); + viewModel.hotcueId = 5; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_6_activate` + id: propHotcue6Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(5); + viewModel.hotcueId = 6; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_7_activate` + id: propHotcue7Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(6); + viewModel.hotcueId = 7; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + Mixxx.ControlProxy { + group: viewModel.group + key: `hotcue_8_activate` + id: propHotcue8Activated + onValueChanged: { + let model = viewModel.currentPlayer?.hotcuesModel?.get(7); + viewModel.hotcueId = 8; + viewModel.hotcuePressed = value; + viewModel.hotcueName = model?.label || "Unnamed cue"; + viewModel.hotcueType = model?.isLoop ? 5 : 0; + } + } + + Timer { + id: cueTimer + property bool blink: false + + triggeredOnStart: true + interval: 1000 + repeat: false + running: false + } + + /////////////////////////////////////////////////// + /////// Stem Deck properties ////////////////////// + /////////////////////////////////////////////////// + + Mixxx.ControlProxy { + group: viewModel.group + key: `stem_count` + id: propStemCount + } + + readonly property bool isStemsActive: propStemCount.value > 0 + readonly property int stemCount: propStemCount.value + + QtObject { + id: propStemSelected + property var idx: 0 + property bool active: false + } + readonly property bool stemSelected: propStemSelected.active + readonly property var stemSelectedIdx: propStemSelected.idx + + readonly property string stemSelectedName: viewModel.currentPlayer?.stemsModel.get(viewModel.stemSelectedIdx).label || "Unknown" + readonly property real stemSelectedVolume: isStemsActive ? [propStem1Volume,propStem2Volume,propStem3Volume,propStem4Volume][viewModel.stemSelectedIdx].value : 0.0 + readonly property bool stemSelectedMuted: isStemsActive ? [propStem1Muted,propStem2Muted,propStem3Muted,propStem4Muted][viewModel.stemSelectedIdx].value : false + readonly property int stemSelectedQuickFXId: isStemsActive ? [propStem1FX,propStem2FX,propStem3FX,propStem4FX][viewModel.stemSelectedIdx].value : 0 + readonly property real stemSelectedQuickFXValue: isStemsActive ? [propStem1FXValue,propStem2FXValue,propStem3FXValue,propStem4FXValue][viewModel.stemSelectedIdx].value : 0.0 + readonly property bool stemSelectedQuickFXOn: isStemsActive ? [propStem1FXOn,propStem2FXOn,propStem3FXOn,propStem4FXOn][viewModel.stemSelectedIdx].value : false + readonly property string stemSelectedQuickFXName: Mixxx.EffectsManager.quickChainPresetModel.get(viewModel.stemSelectedQuickFXId).display || "---" + readonly property color stemSelectedBrightColor: viewModel.currentPlayer?.stemsModel.get(viewModel.stemSelectedIdx).color ?? "grey" + readonly property color stemSelectedMidColor: isStemsActive ? stemSelectedBrightColor : "black" + + Mixxx.ControlProxy { + id: propStem1Volume + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem1]` + key: `volume` + } + Mixxx.ControlProxy { + id: propStem1Muted + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem1]` + key: `mute` + } + Mixxx.ControlProxy { + id: propStem1FX + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem1]]` + key: `loaded_chain_preset` + } + Mixxx.ControlProxy { + id: propStem1FXOn + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem1]]` + key: `enabled` + } + Mixxx.ControlProxy { + id: propStem1FXValue + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem1]]` + key: `super1` + } + Mixxx.ControlProxy { + id: propStem2Volume + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem2]` + key: `volume` + } + Mixxx.ControlProxy { + id: propStem2Muted + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem2]` + key: `mute` + } + Mixxx.ControlProxy { + id: propStem2FX + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem2]]` + key: `loaded_chain_preset` + } + Mixxx.ControlProxy { + id: propStem2FXOn + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem2]]` + key: `enabled` + } + Mixxx.ControlProxy { + id: propStem2FXValue + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem2]]` + key: `super1` + } + Mixxx.ControlProxy { + id: propStem3Volume + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem3]` + key: `volume` + } + Mixxx.ControlProxy { + id: propStem3Muted + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem3]` + key: `mute` + } + Mixxx.ControlProxy { + id: propStem3FX + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem3]]` + key: `loaded_chain_preset` + } + Mixxx.ControlProxy { + id: propStem3FXOn + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem3]]` + key: `enabled` + } + Mixxx.ControlProxy { + id: propStem3FXValue + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem3]]` + key: `super1` + } + Mixxx.ControlProxy { + id: propStem4Volume + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem4]` + key: `volume` + } + Mixxx.ControlProxy { + id: propStem4Muted + group: `${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem4]` + key: `mute` + } + Mixxx.ControlProxy { + id: propStem4FX + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem4]]` + key: `loaded_chain_preset` + } + Mixxx.ControlProxy { + id: propStem4FXOn + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem4]]` + key: `enabled` + } + Mixxx.ControlProxy { + id: propStem4FXValue + group: `[QuickEffectRack1_${viewModel.group.substr(0, viewModel.group.length - 1)}_Stem4]]` + key: `super1` + } + + /////////////////////////////////////////////////// + /////// Stripe properties ///////////////////////// + /////////////////////////////////////////////////// + + readonly property var hotcues: viewModel.currentPlayer?.hotcuesModel + + /// Loop size + readonly property var loopSizePad1: "1/4" + readonly property var loopSizePad2: "1/2" + readonly property var loopSizePad3: "1" + readonly property var loopSizePad4: "2" + readonly property var loopSizePad5: "4" + readonly property var loopSizePad6: "8" + readonly property var loopSizePad7: "16" + readonly property var loopSizePad8: "32" + + readonly property var jumpSizePad1: propJumpSizePad.pad1 + readonly property var jumpSizePad2: propJumpSizePad.pad2 + readonly property var jumpSizePad3: propJumpSizePad.pad3 + readonly property var jumpSizePad4: propJumpSizePad.pad4 + readonly property var jumpSizePad5: propJumpSizePad.pad5 + readonly property var jumpSizePad6: propJumpSizePad.pad6 + readonly property var jumpSizePad7: propJumpSizePad.pad7 + readonly property var jumpSizePad8: propJumpSizePad.pad8 + + readonly property var rollSizePad1: propRollSizePad.pad1 + readonly property var rollSizePad2: propRollSizePad.pad2 + readonly property var rollSizePad3: propRollSizePad.pad3 + readonly property var rollSizePad4: propRollSizePad.pad4 + readonly property var rollSizePad5: propRollSizePad.pad5 + readonly property var rollSizePad6: propRollSizePad.pad6 + readonly property var rollSizePad7: propRollSizePad.pad7 + readonly property var rollSizePad8: propRollSizePad.pad8 + } diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/HotCue.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/HotCue.qml new file mode 100755 index 000000000000..005df81c6fe9 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/HotCue.qml @@ -0,0 +1,42 @@ +import QtQuick 2.5 + +Item { + id: hotcue + readonly property real position: propPosition.value + readonly property real length: propLength.value + readonly property string type: propType.value + readonly property string name: propName.value + readonly property bool exists: propExists.value + property int index: 0 + + // AppProperty { id: propPosition; path: "app.traktor.decks." + deckId + ".track.cue.hotcues." + (index + 1) + ".start_pos" } + QtObject { + id: propPosition + property string description: "Description" + property var value: 0 + } + // AppProperty { id: propLength; path: "app.traktor.decks." + deckId + ".track.cue.hotcues." + (index + 1) + ".length" } + QtObject { + id: propLength + property string description: "Description" + property var value: 0 + } + // AppProperty { id: propType; path: "app.traktor.decks." + deckId + ".track.cue.hotcues." + (index + 1) + ".type" } + QtObject { + id: propType + property string description: "Description" + property var value: 0 + } + // AppProperty { id: propName; path: "app.traktor.decks." + deckId + ".track.cue.hotcues." + (index + 1) + ".name" } + QtObject { + id: propName + property string description: "Description" + property var value: 0 + } + // AppProperty { id: propExists; path: "app.traktor.decks." + deckId + ".track.cue.hotcues." + (index + 1) + ".exists" } + QtObject { + id: propExists + property string description: "Description" + property var value: 0 + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/HotCues.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/HotCues.qml new file mode 100755 index 000000000000..3961fc236235 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/ViewModels/HotCues.qml @@ -0,0 +1,65 @@ +import QtQuick 2.5 + +Item { + id: hotcuesModel + property int deckId: 0 + + readonly property alias activeHotcue: activeHotcueModel + readonly property var array: + [ + hotcueModel1, + hotcueModel2, + hotcueModel3, + hotcueModel4, + hotcueModel5, + hotcueModel6, + hotcueModel7, + hotcueModel8 + ] + + Item { + id: activeHotcueModel + readonly property real position: activePos.value + readonly property real length: activeLength.value + readonly property string type: activeType.value + readonly property string name: activeName.value + + // AppProperty { id: activePos; path: "app.traktor.decks." + deckId + ".track.cue.active.start_pos" } + QtObject { + id: activePos + property string description: "Description" + property var value: 0 + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: activeLength; path: "app.traktor.decks." + deckId + ".track.cue.active.length" } + QtObject { + id: activeLength + property string description: "Description" + property var value: 0 + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: activeType; path: "app.traktor.decks." + deckId + ".track.cue.active.type" } + QtObject { + id: activeType + property string description: "Description" + property var value: 0 + property var valueRange: ({isDiscrete: true, steps: 1}) + } + // AppProperty { id: activeName; path: "app.traktor.decks." + deckId + ".track.cue.active.name" } + QtObject { + id: activeName + property string description: "Description" + property var value: 0 + property var valueRange: ({isDiscrete: true, steps: 1}) + } + } + + HotCue { id: hotcueModel1; index: 0 } + HotCue { id: hotcueModel2; index: 1 } + HotCue { id: hotcueModel3; index: 2 } + HotCue { id: hotcueModel4; index: 3 } + HotCue { id: hotcueModel5; index: 4 } + HotCue { id: hotcueModel6; index: 5 } + HotCue { id: hotcueModel7; index: 6 } + HotCue { id: hotcueModel8; index: 7 } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/BrowserView.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/BrowserView.qml new file mode 100755 index 000000000000..6436f4153330 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/BrowserView.qml @@ -0,0 +1,322 @@ +import QtQuick 2.15 + +import Mixxx 1.0 as Mixxx + +import '../Browser' as BrowserView +import '../Widgets' as Widgets + +//---------------------------------------------------------------------------------------------------------------------- +// BROWSER VIEW +// +// The Browser View is connected to traktors QBrowser from which it receives its data model. The navigation through the +// data is done by calling funcrtions invoked from QBrowser. +//---------------------------------------------------------------------------------------------------------------------- + +Item { + id: qmlBrowser + required property var deckInfo + property string propertiesPath: "" + property bool isActive: false + property bool enterNode: false + property bool exitNode: false + property int increment: 0 + property color focusColor: colors.colorDeckBlueBright + property int speed: 150 + property real sortingKnobValue: 0 + property int pageSize: 10 + property int fastScrollCenter: 3 + property bool leftScreen: deckInfo.isLeftScreen(deckInfo.deckId) + + readonly property int maxItemsOnScreen: 8 + + // This is used by the footer to change/display the sorting! + property alias sortingId: browser.sorting + property alias sortingDirection: browser.sortingDirection + property alias isContentList: browser.isContentList + + anchors.fill: parent + + enum WidgetKind { + None, + Searchbar, + Sidebar, + LibraryView + } + + Mixxx.ControlProxy { + id: focusWidget + + group: "[Library]" + key: "focused_widget" + } + + Mixxx.ControlProxy { + group: "[Playlist]" + key: "SelectTrackKnob" + onValueChanged: (value) => { + console.log("SelectTrackKnob", value) + if (value != 0) { + focusWidget.value = BrowserView.WidgetKind.LibraryView; + moveSelectionVertical(value); + } + } + } + + Mixxx.ControlProxy { + group: "[Playlist]" + key: "SelectPrevTrack" + onValueChanged: (value) => { + console.log("SelectPrevTrack", value) + if (value != 0) { + focusWidget.value = BrowserView.WidgetKind.LibraryView; + moveSelectionVertical(-1); + } + } + } + + Mixxx.ControlProxy { + group: "[Playlist]" + key: "SelectNextTrack" + onValueChanged: (value) => { + console.log("SelectNextTrack", value) + if (value != 0) { + focusWidget.value = BrowserView.WidgetKind.LibraryView; + moveSelectionVertical(1); + } + } + } + + Mixxx.ControlProxy { + group: "[Library]" + key: "MoveVertical" + onValueChanged: (value) => { + console.log("MoveVertical", value, focusWidget.value == BrowserView.WidgetKind.LibraryView) + // if (value != 0 && focusWidget.value == BrowserView.WidgetKind.LibraryView) + moveSelectionVertical(value); + } + } + + Mixxx.ControlProxy { + group: "[Library]" + key: "MoveUp" + onValueChanged: (value) => { + console.log("MoveUp", value) + if (value != 0 && focusWidget.value == BrowserView.WidgetKind.LibraryView) + moveSelectionVertical(-1); + } + } + + Mixxx.ControlProxy { + group: "[Library]" + key: "MoveDown" + onValueChanged: (value) => { + console.log("MoveDown", value) + if (value != 0 && focusWidget.value == BrowserView.WidgetKind.LibraryView) + moveSelectionVertical(1); + } + } + + function moveSelectionVertical(value) { + if (value == 0) + return ; + + const rowCount = browser.dataSet.rowCount(); + if (rowCount == 0) + return ; + + browser.currentIndex = Mixxx.MathUtils.positiveModulo(browser.currentIndex + value, rowCount); + } + + //-------------------------------------------------------------------------------------------------------------------- + + onIncrementChanged: { + if (qmlBrowser.increment != 0) { + var newValue = clamp(browser.currentIndex + qmlBrowser.increment, 0, contentList.count - 1); + + // center selection if user is _fast scrolling_ but we're at the _beginning_ or _end_ of the list + if (qmlBrowser.increment >= pageSize) { + var centerTop = fastScrollCenter; + + if (browser.currentIndex < centerTop) { + newValue = centerTop; + } + } + if (qmlBrowser.increment <= (-pageSize)) { + var centerBottom = contentList.count - 1 - fastScrollCenter; + + if (browser.currentIndex > centerBottom) { + newValue = centerBottom; + } + } + + browser.changeCurrentIndex(newValue); + qmlBrowser.increment = 0; + } + } + + onExitNodeChanged: { + if (qmlBrowser.exitNode) { + browser.exitNode() + } + + qmlBrowser.exitNode = false; + } + + //-------------------------------------------------------------------------------------------------------------------- + + onEnterNodeChanged: { + if (qmlBrowser.enterNode) { + var movedDown = browser.enterNode(screen.focusDeckId, contentList.currentIndex); + if (movedDown) { + browser.relocateCurrentIndex() + } + } + + qmlBrowser.enterNode = false; + } + + function clamp(val, min, max) { + return Math.max(min, Math.min(val, max)); + } + + // Traktor.Browser + // { + // id: browser; + // isActive: qmlBrowser.isActive + // } + Item { + id: browser; + property bool changeCurrentIndex: false + property int currentIndex: 0 + property bool currentPath: false + property var dataSet: Mixxx.Library.model + property bool enterNode: false + property bool exitNode: false + property bool iconId: false + property bool isContentList: false + property bool relocateCurrentIndex: false + property bool sorting: false + property bool sortingDirection: false + } + + Rectangle { + id: background + anchors.fill: parent + color: "black" + } + + //-------------------------------------------------------------------------------------------------------------------- + // LIST VIEW -- NEEDS A MODEL CONTAINING THE LIST OF ITEMS TO SHOW AND A DELEGATE TO DEFINE HOW ONE ITEM LOOKS LIKE + //------------------------------------------------------------------------------------------------------------------- + + // zebra filling up the rest of the list if smaller than maxItemsOnScreen (= 8 entries) + Grid { + anchors.top: contentList.top + anchors.topMargin: contentList.topMargin + contentList.contentHeight + 1 // +1 = for spacing + anchors.right: parent.right + anchors.left: parent.left + anchors.leftMargin: 3 + columns: 1 + spacing: 1 + + Repeater { + model: (contentList.count < qmlBrowser.maxItemsOnScreen) ? (qmlBrowser.maxItemsOnScreen - contentList.count) : 0 + Rectangle { + color: ( (contentList.count + index)%2 == 0) ? colors.colorGrey32 : "Black" + width: qmlBrowser.width; + height: settings.browserFontSize*2 } + } + } + + //-------------------------------------------------------------------------------------------------------------------- + + ListView { + id: contentList + anchors.fill: parent + verticalLayoutDirection: ListView.TopToBottom + // the top/bottom margins are applied only at the beginning/end of the list in order to show half entries while scrolling + // and keep the list delegates in the same position always. + + // the commented out margins caused browser anchor problems leading to a disappearing browser! check later !? + anchors.topMargin: 17 // ( (contentList.count < qmlBrowser.maxItemsOnScreen ) || (currentIndex < 4 )) ? 17 : 0 + anchors.bottomMargin: 18 // ( (contentList.count >= qmlBrowser.maxItemsOnScreen) && (currentIndex >= contentList.count - 4)) ? 18 : 0 + clip: false + spacing: 1 + preferredHighlightBegin: 119 - 17 // -17 because of the reduced height due to the topMargin + preferredHighlightEnd: 152 - 17 // -17 because of the reduced height due to the topMargin + highlightRangeMode: ListView.ApplyRange + highlightMoveDuration: 0 + delegate: BrowserView.ListDelegate {id: listDelegate; masterBPM: deckInfo.masterBPM; masterKey: deckInfo.masterKey; keyIndex: deckInfo.keyIndex; isPlaying: deckInfo.isPlaying; adjacentKeys: settings.adjacentKeys;} + model: browser.dataSet + currentIndex: browser.currentIndex + focus: true + cacheBuffer: 10 + visible: settings.showBrowserOnFullScreen ? ((deckInfo.isInBrowserMode && leftScreen) || (deckInfo.viewButton && !deckInfo.isInBrowserMode) || deckInfo.favorites) : true + } + + ListView { + id: contentListRight + anchors.fill: parent + verticalLayoutDirection: ListView.TopToBottom + // the top/bottom margins are applied only at the beginning/end of the list in order to show half entries while scrolling + // and keep the list delegates in the same position always. + + // the commented out margins caused browser anchor problems leading to a disappearing browser! check later !? + anchors.topMargin: 0 // ( (contentList.count < qmlBrowser.maxItemsOnScreen ) || (currentIndex < 4 )) ? 17 : 0 + anchors.bottomMargin: 0 // ( (contentList.count >= qmlBrowser.maxItemsOnScreen) && (currentIndex >= contentList.count - 4)) ? 18 : 0 + clip: false + spacing: 0 + preferredHighlightBegin: 0 // -17 because of the reduced height due to the topMargin + preferredHighlightEnd: 240 // -17 because of the reduced height due to the topMargin + highlightRangeMode: ListView.ApplyRange + highlightMoveDuration: 0 + delegate: BrowserView.TrackView {id: trackView; masterBPM: deckInfo.masterBPM;} + model: browser.dataSet + currentIndex: browser.currentIndex + focus: true + cacheBuffer: 10 + visible: settings.showBrowserOnFullScreen ? (deckInfo.isInBrowserMode && !leftScreen) : false + } + + BrowserView.BrowserHeader { + id: browserHeader + nodeIconId: browser.iconId + currentDeck: deckInfo.deckId + state: "show" + pathStrings: browser.currentPath + + Behavior on height { NumberAnimation { duration: speed; } } + + visible: settings.showBrowserOnFullScreen ? !(deckInfo.isInBrowserMode && !leftScreen) : true + } + + //-------------------------------------------------------------------------------------------------------------------- + + BrowserView.BrowserFooter { + id: browserFooter + state: "show" + propertiesPath: qmlBrowser.propertiesPath + sortingKnobValue: qmlBrowser.sortingKnobValue + maxCount: contentList.count + count: browser.currentIndex + 1 + deckInfo: qmlBrowser.deckInfo + + Behavior on height { NumberAnimation { duration: speed; } } + + visible: settings.showBrowserOnFullScreen ? !(deckInfo.isInBrowserMode && !leftScreen) : true + } + + BrowserView.TrackFooter { + id: trackFooter + state: "show" + propertiesPath: qmlBrowser.propertiesPath + sortingKnobValue: qmlBrowser.sortingKnobValue + maxCount: contentList.count + count: browser.currentIndex + 1 + deckInfo: qmlBrowser.deckInfo + + Behavior on height { NumberAnimation { duration: speed; } } + + visible: settings.showBrowserOnFullScreen ? (deckInfo.isInBrowserMode && !leftScreen) : false + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/Dimensions.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/Dimensions.qml new file mode 100755 index 000000000000..bedc4e594519 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/Dimensions.qml @@ -0,0 +1,15 @@ +import QtQuick 2.15 + +QtObject { + + readonly property real infoBoxesWidth: 150 + readonly property real firstRowHeight: 33 + readonly property real secondRowHeight: 72 + readonly property real thirdRowHeight: 72 + readonly property real spacing: 6 + readonly property real largeBoxWidth: 2*infoBoxesWidth + spacing + readonly property real cornerRadius: 5 + readonly property real screenTopMargin: 3 // might need to be adapted based on the tolerances of hardware manufacturing + readonly property real screenLeftMargin: spacing // might need to be adapted based on the tolerances of hardware manufacturing + readonly property real titleTextMargin: spacing +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/EmptyDeck.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/EmptyDeck.qml new file mode 100755 index 000000000000..5ceca5ff3d5e --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/EmptyDeck.qml @@ -0,0 +1,47 @@ +import QtQuick 2.15 +import '../Overlays' as Overlays +import '../Defines' as Defines +import '../Widgets' as Widgets + +Item { + id: display + anchors.fill: parent + property color deckColor: "black" + property var deckInfo: ({}) + Dimensions {id: dimensions} + + property real infoBoxesWidth: dimensions.infoBoxesWidth + property real firstRowHeight: dimensions.firstRowHeight + + Rectangle { + id: background + color: colors.defaultBackground + anchors.fill: parent + } + + Image { + id: logoImage + anchors.fill: parent + + source: engine.getSetting("idleBackground") || "../../../../../images/templates/logo_mixxx.png" + fillMode: Image.PreserveAspectFit + } + + // DECK HEADER // + // Widgets.DeckHeader + // { + // id: deckHeader + + // title: deckInfo.headerEnabled ? deckInfo.headerText : "Live Input" + // artist: deckInfo.headerEnabled ? deckInfo.headerTextLong : "Live Input" + + // height: display.firstRowHeight-6 + // width: 4*(display.infoBoxesWidth/2+1)+10 + + // anchors.left: parent.left + // anchors.top: parent.top + // anchors.topMargin: 3 + // anchors.leftMargin: 4 + + // } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/StemDeck.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/StemDeck.qml new file mode 100755 index 000000000000..e0a260721422 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/StemDeck.qml @@ -0,0 +1,28 @@ +import QtQuick 2.5 +import '../Widgets' as Widgets +import '../Overlays' as Overlays + +//---------------------------------------------------------------------------------------------------------------------- +// Stem Screen View - UI of the screen for stems +//---------------------------------------------------------------------------------------------------------------------- + +Item { + id: display + + // MODEL PROPERTIES // + required property var deckInfo + + width: 320 + height: 240 + + TrackDeck { + id: trackScreen + deckInfo: display.deckInfo + anchors.fill: parent + } + + // STEM OVERLAY // + Widgets.StemOverlay { + deckInfo: display.deckInfo + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/TrackDeck.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/TrackDeck.qml new file mode 100755 index 000000000000..2fc98a5117a9 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Views/TrackDeck.qml @@ -0,0 +1,222 @@ +import QtQuick 2.5 +import QtQuick.Layouts 1.1 +import '../Waveform' as WF +import '../Overlays' as Overlays + +import '../Widgets' as Widgets + +//---------------------------------------------------------------------------------------------------------------------- +// Track Screen View - UI of the screen for track +//---------------------------------------------------------------------------------------------------------------------- + +Item { + id: display + Dimensions {id: dimensions} + + // MODEL PROPERTIES // + required property var deckInfo + property int deckId: 1 + property real boxesRadius: dimensions.cornerRadius + property real infoBoxesWidth: dimensions.infoBoxesWidth +4 + property real firstRowHeight: dimensions.firstRowHeight + property real secondRowHeight: dimensions.secondRowHeight + property real spacing: dimensions.spacing-3 + property real screenTopMargin: dimensions.screenTopMargin + property real screenLeftMargin: dimensions.screenLeftMargin-2 + + width: 320 + height: 240 + + Rectangle { + id: displayBackground + anchors.fill: parent + color: colors.defaultBackground + } + + Image { + id: emptyTrackDeckImage + anchors.fill: parent + visible: deckInfo.showLogo + + source: engine.getSetting("idleBackground") || "../../../../../images/templates/logo_mixxx.png" + fillMode: Image.PreserveAspectFit + } + + ColumnLayout { + id: content + spacing: display.spacing + + anchors.left: parent.left + anchors.top: parent.top + anchors.topMargin: display.screenTopMargin + anchors.leftMargin: display.screenLeftMargin + + // FIRST ROW // + RowLayout { + id: firstRow + + spacing: 1 + + // DECK HEADER // + Widgets.DeckHeader { + id: deckHeader + + deckInfo: display.deckInfo + + title: deckInfo.headerEnabled ? deckInfo.headerTextShort : deckInfo.titleString + artist: deckInfo.headerEnabled ? deckInfo.headerTextLong : deckInfo.artistString + + height: display.firstRowHeight-6 + width: deckInfo.headerEnabled ? 4*(display.infoBoxesWidth/2+1)+1 : 3*(display.infoBoxesWidth/2+1)+3 + } + + // TIME DISPLAY // + Item { + id: timeBox2 + width: (display.infoBoxesWidth/2+1) + height: display.firstRowHeight-6 + + Rectangle { + anchors.fill: parent + color: trackEndBlinkTimer2.blink ? colors.colorRed : colors.colorDeckGrey + radius: display.boxesRadius + visible: !deckInfo.headerEnabled + } + + Text { + text: settings.timeBox == 0 ? deckInfo.remainingTimeString : settings.timeBox == 1 ? deckInfo.elapsedTimeString : settings.timeBox == 2 ? deckInfo.timeToCue : settings.timeBox == 3 ? deckInfo.beats : settings.timeBox == 4 ? deckInfo.beatsAlt : settings.timeBox == 5 ? deckInfo.beatsToCue : settings.timeBox == 6 ? deckInfo.beatsToCueAlt : deckInfo.remainingTimeString + font.pixelSize: 22 + font.family: "Roboto" + font.weight: Font.Medium + color: settings.timeTextColorChange && trackEndBlinkTimer2.blink ? "black" : "white" + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + visible: !deckInfo.shift && !deckInfo.headerEnabled + } + + Text { + text: settings.timeBoxShift == 0 ? deckInfo.remainingTimeString : settings.timeBoxShift == 1 ? deckInfo.elapsedTimeString : settings.timeBoxShift == 2 ? deckInfo.timeToCue : settings.timeBoxShift == 3 ? deckInfo.beats : settings.timeBoxShift == 4 ? deckInfo.beatsAlt : settings.timeBoxShift == 5 ? deckInfo.beatsToCue : settings.timeBoxShift == 6 ? deckInfo.beatsToCueAlt : deckInfo.remainingTimeString + font.pixelSize: 22 + font.family: "Roboto" + font.weight: Font.Medium + color: settings.timeTextColorChange && trackEndBlinkTimer2.blink ? "black" : "white" + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + visible: deckInfo.shift && !deckInfo.headerEnabled + } + + Timer { + id: trackEndBlinkTimer2 + property bool blink: false + + interval: 500 + repeat: true + running: deckInfo.trackEndWarning + + onTriggered: { + blink = !blink; + } + + onRunningChanged: { + blink = running; + } + } + } + } + + // PHASE METER // + Widgets.PhaseMeter { + id: phase + height: settings.hidePhase ? 0 : 16 + width: 317 + visible: deckInfo.isLoaded + + phase: deckInfo.phase + } + + //WAVEFORM + + property string deckSizeState: "large" + readonly property int waveformHeight: 129 + property bool isInEditMode: false + property bool showLoopSize: true + property string propertiesPath: "" + + WF.WaveformContainer { + id: waveformContainer + + deckInfo: display.deckInfo + + deckId: deckInfo.deckId + deckSizeState: content.deckSizeState + propertiesPath: content.propertiesPath + + // anchors.left: parent.left + width: 316 + // anchors.top: phase.bottom + showLoopSize: content.showLoopSize + isInEditMode: content.isInEditMode + + // the height of the waveform is defined as the remaining space of deckHeight - stripe.height - spacerWaveStripe.height + height: (settings.alwaysShowTempoInfo || deckInfo.adjustEnabled ? (settings.hideWaveformOverview ? content.waveformHeight + display.secondRowHeight-51 : content.waveformHeight-38) : (!deckInfo.showBPMInfo ? (settings.hideWaveformOverview ? content.waveformHeight + display.secondRowHeight-13 : content.waveformHeight) : (settings.hideWaveformOverview ? content.waveformHeight + display.secondRowHeight-51 : content.waveformHeight-38))) + (settings.hidePhase && settings.hidePhrase ? 16 : 0) + (!settings.hidePhase && !settings.hidePhrase ? -16 : 0) + visible: deckInfo.isLoaded && !settings.hideWaveforms + + Behavior on height { PropertyAnimation { duration: 90} } + } + } + + WF.WaveformOverview { + height: settings.hideWaveformOverview ? 0 : settings.hideWaveforms ? 150 : display.secondRowHeight-13 + width: 314 + anchors.left: parent.left + anchors.leftMargin: 6 + anchors.top: display.top + anchors.topMargin: settings.hideWaveforms ? 90 : 178 + } + + Overlays.TopControls { + id: fx1 + fxUnit: 0 + showHideState: (deckInfo.showFx1 && settings.fxOverlays && !settings.hideEffectsOverlay1) || (deckInfo.padsModeFx1 && (settings.fx1unit == 1)) || (deckInfo.padsModeFx2 && (settings.fx2unit == 1)) ? "show" : "hide" + } + + Overlays.TopControls { + id: fx2 + fxUnit: 1 + showHideState: deckInfo.showFx2 && settings.fxOverlays && !settings.hideEffectsOverlay1 || (deckInfo.padsModeFx1 && (settings.fx1unit == 2)) || (deckInfo.padsModeFx2 && (settings.fx2unit == 2)) ? "show" : "hide" + } + + Overlays.TopControls { + id: fx3 + fxUnit: 2 + showHideState: deckInfo.showFx3 && settings.fxOverlays && !settings.hideEffectsOverlay2 || (deckInfo.padsModeFx1 && (settings.fx1unit == 3)) || (deckInfo.padsModeFx2 && (settings.fx2unit == 3)) ? "show" : "hide" + } + + Overlays.QuickFXSelector { + deckInfo: display.deckInfo + } + + Overlays.TopControls { + id: fx4 + fxUnit: 3 + showHideState: (deckInfo.showFx4 && settings.fxOverlays && !settings.hideEffectsOverlay2 || (deckInfo.padsModeFx1 && (!settings.fx1unit == 4)) ||(deckInfo.padsModeFx2 && (settings.fx2unit == 4))) ? "show" : "hide" + } + + Widgets.TempoAdjust { + id: tempoInfo + deckId: deckInfo.deckId + height: 38 + y: settings.hideWaveformOverview ? 197 : 140 + visible: (deckInfo.isLoaded ? (settings.alwaysShowTempoInfo || deckInfo.adjustEnabled ? true : deckInfo.showBPMInfo) : false) && !settings.hideWaveforms + } + + Widgets.TempoAdjust { + id: tempoInfo2 + deckId: deckInfo.deckId + height: 38 + y: 50 + visible: settings.hideWaveforms + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/StemColorIndicators.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/StemColorIndicators.qml new file mode 100755 index 000000000000..2da71cca02d2 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/StemColorIndicators.qml @@ -0,0 +1,82 @@ +import QtQuick 2.15 + +import Mixxx 1.0 as Mixxx + +import '../Defines' as Defines +import '../Defines' as Defines +import '../ViewModels' as ViewModels + +Item { + id: view + + property int deckId: 1 + + Defines.Colors {id: colors} + Defines.Settings {id: settings} + + required property var deckInfo + + readonly property int stemCount: deckInfo.stemCount + readonly property var stemColors: ["green", "blue", "red", settings.accentColor] + + property var indicatorHeight: [31 , 31 , 31 , 31] + + //-------------------------------------------------------------------------------------------------------------------- + // There is one pixel space between the color-indicator-rectangles. In this space, you can see the beatgrid/cuePoints, + // which is not what we want. Therefore I added this Rectalgles in the same color as the background. This rectangles hide + // the beatgrid/cuePoints. + Rectangle { x: 0; y: 0; width: 5; height: view.height; color: colors.colorBlack75 } + Rectangle { x: view.width - width; y: 0; width: 5; height: view.height; color: colors.colorBlack75 } + + //-------------------------------------------------------------------------------------------------------------------- + + readonly property var deckPlayer: Mixxx.PlayerManager.getPlayer(`[Channel${deckId}]`) + readonly property var currentPlayer: deckPlayer.currentPlayer + + function indicatorY(index) { + var y = 0; + for (var i=0; i 1 ? 2 : 1) + // width: view.width + // height: 31 + // clip: true + + // deckId: view.deckId + // streamId: index + 1 + // sampleWidth: view.sampleWidth + // waveformPosition: view.waveformPosition + // waveformColors: colors.getWaveformColors(colorIds[index]) + // } + // } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/WaveformContainer.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/WaveformContainer.qml new file mode 100755 index 000000000000..a08c7c66b81d --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/WaveformContainer.qml @@ -0,0 +1,241 @@ +import QtQuick 2.15 + +import '../Defines' +import '../Widgets' as Widgets +import '../Overlays' as Overlays +import '../ViewModels' as ViewModels + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Item { + id: view + property int deckId: deckInfo.deckId + property string deckSizeState: "large" + property bool showLoopSize: false + property bool isInEditMode: false + property string propertiesPath: "" + property int zoomLevel: deckInfo.zoomLevel + readonly property int minSampleWidth: 2048 + property int sampleWidth: minSampleWidth << zoomLevel + property bool hideLoop: false + property bool hideBPM: false + property bool hideKey: false + + readonly property bool trackIsLoaded: deckInfo.isLoaded + + //-------------------------------------------------------------------------------------------------------------------- + + required property var deckInfo + + //-------------------------------------------------------------------------------------------------------------------- + // WAVEFORM Position + //------------------------------------------------------------------------------------------------------------------ + + Mixxx.ControlProxy { + id: scratchPositionEnableControl + + group: root.group + key: "scratch_position_enable" + } + + Mixxx.ControlProxy { + id: scratchPositionControl + + group: root.group + key: "scratch_position" + } + + Mixxx.ControlProxy { + id: wheelControl + + group: root.group + key: "wheel" + } + + Mixxx.ControlProxy { + id: rateRatioControl + + group: root.group + key: "rate_ratio" + } + + Mixxx.ControlProxy { + id: zoomControl + + group: root.group + key: "waveform_zoom" + } + + MixxxControls.WaveformDisplay { + id: singleWaveform + group: `[Channel${view.deckId}]` + x: 0 + width: 316 + height: (settings.alwaysShowTempoInfo || deckInfo.adjustEnabled ? (settings.hideWaveformOverview ? content.waveformHeight + display.secondRowHeight-51 : content.waveformHeight-38) : (!deckInfo.showBPMInfo ? (settings.hideWaveformOverview ? content.waveformHeight + display.secondRowHeight-13 : content.waveformHeight) : (settings.hideWaveformOverview ? content.waveformHeight + display.secondRowHeight-51 : content.waveformHeight-38))) + (settings.hidePhase && settings.hidePhrase ? 16 : 0) + (!settings.hidePhase && !settings.hidePhrase ? -16 : 0) + + Behavior on height { PropertyAnimation { duration: 90} } + anchors.fill: parent + zoom: zoomControl.value + backgroundColor: "#36000000" + + Mixxx.WaveformRendererEndOfTrack { + color: 'blue' + endOfTrackWarningTime: 30 + } + + Mixxx.WaveformRendererPreroll { + color: '#998977' + } + + Mixxx.WaveformRendererMarkRange { + // + Mixxx.WaveformMarkRange { + startControl: "loop_start_position" + endControl: "loop_end_position" + enabledControl: "loop_enabled" + color: '#00b400' + opacity: 0.7 + disabledColor: '#FFFFFF' + disabledOpacity: 0.6 + } + // + Mixxx.WaveformMarkRange { + startControl: "intro_start_position" + endControl: "intro_end_position" + color: '#2c5c9a' + opacity: 0.6 + durationTextColor: '#ffffff' + durationTextLocation: 'after' + } + // + Mixxx.WaveformMarkRange { + startControl: "outro_start_position" + endControl: "outro_end_position" + color: '#2c5c9a' + opacity: 0.6 + durationTextColor: '#ffffff' + durationTextLocation: 'before' + } + } + + Mixxx.WaveformRendererRGB { + axesColor: '#00ffffff' + lowColor: 'red' + midColor: 'green' + highColor: 'blue' + + gainAll: 1.5 + gainLow: 1.0 + gainMid: 1.0 + gainHigh: 1.0 + } + + Mixxx.WaveformRendererStem { + gainAll: 1.5 + } + + Mixxx.WaveformRendererBeat { + color: settings.hideBeatgrid ? 'transparent' : Qt.rgba(0.81, 0.81, 0.81, settings.beatgridVisibility) + } + + Mixxx.WaveformRendererMark { + playMarkerColor: 'cyan' + playMarkerBackground: 'transparent' + defaultMark: Mixxx.WaveformMark { + align: "bottom|right" + color: "#FF0000" + textColor: "#FFFFFF" + text: " %1 " + } + + untilMark.showTime: settings.showTimeToCue + untilMark.showBeats: settings.showBeatToCue + untilMark.align: settings.distanceToCueAlignment == "bottom" ? Qt.AlignBottom : settings.distanceToCueAlignment == "top" ? Qt.AlignTop : Qt.AlignCenter + untilMark.textSize: settings.distanceToCueFontSize + + Mixxx.WaveformMark { + control: "cue_point" + text: 'C' + align: 'top|right' + color: 'red' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "loop_start_position" + text: '↻' + align: 'top|left' + color: 'green' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "loop_end_position" + align: 'bottom|right' + color: 'green' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "intro_start_position" + align: 'top|right' + color: 'blue' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "intro_end_position" + text: '◢' + align: 'top|left' + color: 'blue' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "outro_start_position" + text: '◣' + align: 'top|right' + color: 'blue' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "outro_end_position" + align: 'top|left' + color: 'blue' + textColor: '#FFFFFF' + } + } + } + + //-------------------------------------------------------------------------------------------------------------------- + // Stem Color Indicators (Rectangles) + //-------------------------------------------------------------------------------------------------------------------- + + StemColorIndicators { + id: stemColorIndicators + deckId: view.deckId + deckInfo: view.deckInfo + anchors.fill: singleWaveform + anchors.rightMargin: 309 + visible: deckInfoModel.isStemDeck + indicatorHeight: !settings.hidePhase && !settings.hidePhrase ? (deckInfo.showBPMInfo ? [19 , 19 , 19 , 20] : [27 , 27 , 27 , 27]) : (deckInfo.showBPMInfo ? [23 , 23 , 23 , 23] : [31 , 31 , 31 , 31]) + } + + Widgets.LoopSize { + id: loopSize + anchors.topMargin: 1 + anchors.fill: parent + visible: (deckInfo.showLoopInfo || deckInfo.loopActive || settings.alwaysShowLoopSize) && !hideLoop + } + + Widgets.KeyDisplay { + id: keyDisplay + anchors.topMargin: 1 + anchors.fill: parent + visible: !hideKey + } + + Widgets.BpmDisplay { + id: bpmDisplay + anchors.bottomMargin: 1 + anchors.top: singleWaveform.bottom + anchors.fill: parent + visible: !hideBPM && (!deckInfo.showBPMInfo && !settings.alwaysShowTempoInfo && !deckInfo.adjustEnabled) || settings.hideWaveforms + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/WaveformOverview.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/WaveformOverview.qml new file mode 100644 index 000000000000..7f48abeafb98 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Waveform/WaveformOverview.qml @@ -0,0 +1,228 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 + +import "." as Skin +import Mixxx 1.0 as Mixxx + +Item { + id: waveform + + property int deckId: deckInfo.deckId + + readonly property string group: `[Channel${deckId}]` + + layer.enabled: true + + Item { + id: progression + + property real windowWidth: Window.width + Mixxx.ControlProxy { + id: propPosition + group: waveform.group + key: "playposition" + } + + Mixxx.ControlProxy { + id: propVisible + group: waveform.group + key: "track_loaded" + } + + width: propPosition.value * (320 - 12) + visible: propVisible.value + + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + + clip: true + + Rectangle { + anchors.fill: parent + anchors.leftMargin: -border.width + anchors.topMargin: -border.width + anchors.bottomMargin: -border.width + border.width: 2 + border.color:"black" + color: Qt.rgba(0.39, 0.80, 0.96, 0.3) + } + } + + Mixxx.WaveformOverview { + readonly property var player: Mixxx.PlayerManager.getPlayer(waveform.group) + id: waveformOverview + anchors.fill: parent + anchors.topMargin: 6 + + track: player.currentTrack + } + + Mixxx.ControlProxy { + id: samplesControl + + group: waveform.group + key: "track_samples" + } + + // // Hotcue + // Repeater { + // model: 16 + + // S4MK3.HotcuePoint { + // required property int index + + // Mixxx.ControlProxy { + // id: samplesControl + + // group: waveform.group + // key: "track_samples" + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // Mixxx.ControlProxy { + // id: hotcueEnabled + // group: waveform.group + // key: `hotcue_${index + 1}_status` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // Mixxx.ControlProxy { + // id: hotcuePosition + // group: waveform.group + // key: `hotcue_${index + 1}_position` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // Mixxx.ControlProxy { + // id: hotcueColor + // group: waveform.group + // key: `hotcue_${number}_color` + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // anchors.top: parent.top + // // anchors.left: parent.left + // anchors.bottom: parent.bottom + // visible: hotcueEnabled.value + + // number: this.index + 1 + // type: S4MK3.HotcuePoint.Type.OneShot + // position: hotcuePosition.value / samplesControl.value + // color: `#${(hotcueColor.value >> 16).toString(16).padStart(2, '0')}${((hotcueColor.value >> 8) & 255).toString(16).padStart(2, '0')}${(hotcueColor.value & 255).toString(16).padStart(2, '0')}` + // } + // } + + // // Intro + // S4MK3.HotcuePoint { + + // Mixxx.ControlProxy { + // id: introStartEnabled + // group: waveform.group + // key: `intro_start_enabled` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // Mixxx.ControlProxy { + // id: introStartPosition + // group: waveform.group + // key: `intro_start_position` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // anchors.top: parent.top + // anchors.bottom: parent.bottom + // visible: introStartEnabled.value + + // type: S4MK3.HotcuePoint.Type.IntroIn + // position: introStartPosition.value / samplesControl.value + // } + + // // Extro + // S4MK3.HotcuePoint { + + // Mixxx.ControlProxy { + // id: introEndEnabled + // group: waveform.group + // key: `intro_end_enabled` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // Mixxx.ControlProxy { + // id: introEndPosition + // group: waveform.group + // key: `intro_end_position` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // anchors.top: parent.top + // anchors.bottom: parent.bottom + // visible: introEndEnabled.value + + // type: S4MK3.HotcuePoint.Type.IntroOut + // position: introEndPosition.value / samplesControl.value + // } + + // // Loop in + // S4MK3.HotcuePoint { + // Mixxx.ControlProxy { + // id: loopStartPosition + // group: waveform.group + // key: `loop_start_position` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // anchors.top: parent.top + // anchors.bottom: parent.bottom + // visible: loopStartPosition.value > 0 + + // type: S4MK3.HotcuePoint.Type.LoopIn + // position: loopStartPosition.value / samplesControl.value + // } + + // // Loop out + // S4MK3.HotcuePoint { + // Mixxx.ControlProxy { + // id: loopEndPosition + // group: waveform.group + // key: `loop_end_position` + + // onValueChanged: (value) => { + // redraw(waveform) + // } + // } + + // anchors.top: parent.top + // anchors.bottom: parent.bottom + // visible: loopEndPosition.value > 0 + + // type: S4MK3.HotcuePoint.Type.LoopOut + // position: loopEndPosition.value / samplesControl.value + // } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/BpmDisplay.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/BpmDisplay.qml new file mode 100755 index 000000000000..8ab0a41e58bb --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/BpmDisplay.qml @@ -0,0 +1,27 @@ +import QtQuick 2.15 + +Item { + anchors.fill: parent + property int deckId: 0 + + Rectangle { + id: bpmBackground + width: 60 + height: 20 + color: colors.grayBackground + anchors.right: parent.right + anchors.bottom: parent.bottom + } + + Text { + text: deckInfo.bpmString + color: "white" + font.pixelSize: 17 + font.family: "Pragmatica" + anchors.fill: bpmBackground + anchors.rightMargin: 2 + anchors.topMargin: 1 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/DeckHeader.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/DeckHeader.qml new file mode 100755 index 000000000000..34c61544f924 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/DeckHeader.qml @@ -0,0 +1,90 @@ +import QtQuick 2.5 +import '../Defines' as Defines +import '../Defines' as Defines + +//here we assume that `colors` and `dimensions` already exists in the object hierarchy +Item { + id: widget + + property string title: '' + property string artist: '' + property color backgroundColor: colors.defaultBackground + height: dimensions.firstRowHeight + property int radius: dimensions.cornerRadius + + Defines.Settings {id: settings} + Defines.Colors {id: colors} + + required property var deckInfo + + property int deckA: deckInfo.deckAColor + property int deckB: deckInfo.deckBColor + property int deckC: deckInfo.deckCColor + property int deckD: deckInfo.deckDColor + + function colorForDeck(deckId,deckA,deckB,deckC,deckD) { + switch (deckId) { + case 1: return colorForDeckSingle(deckA); + case 2: return colorForDeckSingle(deckB); + case 3: return colorForDeckSingle(deckC); + default: return colorForDeckSingle(deckD); + } + } + + function colorForDeckSingle(deck) { + switch (deck) { + case 0: return colors.red; + case 1: return colors.darkOrange; + case 2: return colors.lightOrange; + case 3: return colors.warmYellow; + case 4: return colors.yellow; + case 5: return colors.lime; + case 6: return colors.green; + case 7: return colors.mint; + case 8: return colors.cyan; + case 9: return colors.turquoise; + case 10: return colors.blue; + case 11: return colors.plum; + case 12: return colors.violet; + case 13: return colors.purple; + case 14: return colors.magenta; + case 15: return colors.fuchsia; + default: return colors.white; + } + } + + Rectangle { + id: headerBg + color: colorForDeck(deckInfo.deckId,deckA,deckB,deckC,deckD) + anchors.fill: parent + radius: widget.radius + + Text { + anchors.fill: parent + anchors.leftMargin: 4 + anchors.rightMargin: 2 + anchors.topMargin: 2 + font.family: "Roboto" + font.weight: Font.Normal + font.pixelSize: 20 + color: "black" + text: widget.title + elide: Text.ElideRight + visible: deckInfo.shift ? false : true + } + + Text { + anchors.fill: parent + anchors.leftMargin: 4 + anchors.rightMargin: 2 + anchors.topMargin: 2 + font.family: "Roboto" + font.weight: Font.Normal + font.pixelSize: 20 + color: "black" + text: widget.artist + elide: Text.ElideRight + visible: deckInfo.shift ? true : false + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/KeyDisplay.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/KeyDisplay.qml new file mode 100755 index 000000000000..fd3f3ac53fd0 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/KeyDisplay.qml @@ -0,0 +1,46 @@ +import '../Defines' as Defines + +import QtQuick 2.15 + +Item { + anchors.fill: parent + + Defines.Colors { + id: colors + } + + property int deckId: 0 + + Rectangle { + id: keyBackground + width: 60 + height: 20 + color: deckInfo.isKeyLockOn ? colors.musicalKeyColors[deckInfo.keyIndex] : colors.musicalKeyColorsDark[deckInfo.keyIndex] + anchors.right: parent.right + anchors.top: parent.top + Rectangle { + id: keyBorder + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + width: keyBackground.width -2 + height: keyBackground.height -2 + color: "transparent" + border.color: colors.defaultBackground + border.width: 2 + } + } + + Text { + text: deckInfo.hasKey && (deckInfo.keyAdjustString != "-0") && (deckInfo.keyAdjustString != "+0") ? (settings.camelotKey ? utils.camelotConvert(deckInfo.keyString) : deckInfo.keyString) + deckInfo.keyAdjustString + : deckInfo.hasKey ? (settings.camelotKey ? utils.camelotConvert(deckInfo.keyString) : deckInfo.keyString) + : "No key" + color: deckInfo.isKeyLockOn ? "black" : "white" + font.pixelSize: 15 + font.family: "Pragmatica" + anchors.fill: keyBackground + anchors.rightMargin: 2 + anchors.topMargin: 1 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/LoopSize.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/LoopSize.qml new file mode 100755 index 000000000000..454fc3d3c5d8 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/LoopSize.qml @@ -0,0 +1,87 @@ +import QtQuick 2.15 + +import Mixxx 1.0 as Mixxx + +import '../Defines' as Defines + +Item { + anchors.fill: parent + + Defines.Colors {id: colors} + Defines.Durations { id: durations } + + Mixxx.ControlProxy { + group: `[Channel${parent.deckId}]` + key: "beatloop_size" + id: loopSize + property string description: "Description" + } + + property int deckId: 0 + + property color loopActiveColor: colors.cueColors[settings.cueLoopColor] + property color loopDimmedColor: colors.cueColorsDark[settings.cueLoopColor] + + Rectangle { + id: loopSizeBackground + width: 40 + height: width + radius: width * 0.5 + opacity: loopActiveBlinkTimer.blink ? 0.25 : 1 + color: deckInfo.loopActive ? (loopActiveBlinkTimer.blink ? loopActiveColor : (settings.loopActiveRedFlash ? colors.colorRed : loopDimmedColor)) + : deckInfo.loopActive ? (deckInfo.shift ? loopDimmedColor : loopActiveColor) + : deckInfo.shift ? colors.colorDeckDarkGrey : colors.colorDeckGrey + Behavior on opacity { NumberAnimation { duration: durations.mainTransitionSpeed; easing.type: Easing.Linear} } + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + Rectangle { + id: loopLengthBorder + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + width: loopSizeBackground.width -2 + height: width + radius: width * 0.5 + color: "transparent" + border.color: loopActiveColor + border.width: 2 + } + } + + Text { + text: loopSize.value < 1/8 ? `/${1 / loopSize.value}` : loopSize.value < 1 ? `1/${1 / loopSize.value}` : `${loopSize.value}` + color: deckInfo.loopActive ? "black" : ( deckInfo.shift ? colors.colorDeckGrey : colors.defaultTextColor ) + font.pixelSize: fonts.extraLargeValueFontSize + font.family: "Pragmatica" + anchors.fill: loopSizeBackground + anchors.rightMargin: 2 + anchors.topMargin: 1 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + onTextChanged: { + if (loopSize.value < 1) { + font.pixelSize = 18 + } else if ( loopSize.value > 8 ) { + font.pixelSize = 24 + } else { + font.pixelSize = 25 + } + } + } + + Timer { + id: loopActiveBlinkTimer + property bool blink: false + + interval: 333 + repeat: true + running: deckInfo.loopActive + + onTriggered: { + blink = !blink; + } + + onRunningChanged: { + blink = running; + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/PhaseMeter.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/PhaseMeter.qml new file mode 100755 index 000000000000..236d691fdab0 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/PhaseMeter.qml @@ -0,0 +1,94 @@ +import QtQuick 2.5 +import '../Defines' as Defines + +Item { + id: widget + + height: 16 + + function colorForPhase(phase) { + switch (phase) { + case 0: return colors.red; + case 1: return colors.darkOrange; + case 2: return colors.lightOrange; + case 3: return colors.phaseColor; + case 4: return colors.yellow; + case 5: return colors.lime; + case 6: return colors.green; + case 7: return colors.mint; + case 8: return colors.cyan; + case 9: return colors.turquoise; + case 10: return colors.blue; + case 11: return colors.plum; + case 12: return colors.violet; + case 13: return colors.purple; + case 14: return colors.magenta; + case 15: return colors.fuchsia; + case 16: return colors.colorWhite; + } + return colors.lightOrange; + } + + property real phase: 0.0 + + Defines.Settings {id: settings} + property int phaseAColor: settings.phaseAColor + property int phaseBColor: settings.phaseBColor + property int phaseCColor: settings.phaseCColor + property int phaseDColor: settings.phaseDColor + property int deckId: deckInfo.deckId + + property color phaseColor: colorForPhase(deckId == 1 ? phaseAColor : deckId == 2 ? phaseBColor : deckId == 3 ? phaseCColor : phaseDColor) + property color phaseHeadColor: "#FCB262" + property color separatorColor: "#88ffffff" + property color backgroundColor: colors.grayBackground + property real phasePosition: parent.width * (0.5 + widget.phase) + property real phaseBarWidth: parent.width * Math.abs(widget.phase) + + // Background + Rectangle { + anchors.fill: parent + color: widget.backgroundColor + } + + // Phase Bar + Rectangle { + color: widget.phaseColor + height: parent.height + width: phaseBarWidth + x: widget.phase < 0 ? widget.phasePosition : (parent.width/2) + } + + // Phase Head + Rectangle { + color: widget.phaseHeadColor + height: parent.height + width: 1 + x: widget.phase < 0 ? widget.phasePosition : (widget.phasePosition - width) + visible: Math.round(phaseBarWidth) !== 0 // hide phase head when phase is 0 + } + + // Separator at 0.25 + Rectangle { + color: widget.separatorColor + height: parent.height + width: 1 + x: parent.width * 0.25 - 1 + } + + // center Separator + Rectangle { + color: widget.separatorColor + height: parent.height + width: 1 + x: parent.width * 0.50 - 1 + } + + // Separator at 0.75 + Rectangle { + color: widget.separatorColor + height: parent.height + width: 1 + x: parent.width * 0.75 - 1 + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/ProgressBar.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/ProgressBar.qml new file mode 100755 index 000000000000..6c8c25dcd4cd --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/ProgressBar.qml @@ -0,0 +1,60 @@ +import QtQuick 2.15 + +import '../Defines' as Defines + +Item { + + id: progressBarContainer + + Defines.Colors { id: colors} + Defines.Settings { id: settings} + + property color progressBarColorIndicatorLevel: settings.accentColor // set from outside + property real value: 0.0 + property bool drawAsEnabled: true + + property alias progressBarWidth: progressBar.width + property alias progressBarHeight: progressBarContainer.height + property alias progressBarBackgroundColor: progressBar.color // set from outside + + onValueChanged: { + var val = Math.max( Math.min(value, 1.0), 0.0) + valueIndicator.width = val * (progressBar.width - 3) + } + + height: 6 + width: 80 + + // Progress Background + Rectangle { + id: progressBar + + anchors.left: parent.left + anchors.top: parent.top + height: parent.height + width: 102 // default value - set from outside + + color: colors.colorWhite09 // set in BottomInfoDetails + + // Progress Level + Rectangle { + id: valueIndicator + width: 0 // set in parent + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + color: progressBarContainer.progressBarColorIndicatorLevel + visible: drawAsEnabled ? true : false + } + // Progress Indicator Thumb + Rectangle { + id: indicatorThumb + color: colors.colorWhite + width: 2 + height: parent.height + anchors.verticalCenter: parent.verticalCenter + anchors.left: valueIndicator.right + visible: drawAsEnabled ? true : false + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/Slider.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/Slider.qml new file mode 100755 index 000000000000..23206eeb43cd --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/Slider.qml @@ -0,0 +1,111 @@ +import QtQuick 2.5 + +Item { + id: item + property color backgroundColor: "grey" + property color sliderColor: "red" + property color cursorColor: "white" + property color centerColor: "black" + + property real min: 0 + property real max: 1 + property real value: 0.5 + property real radius: 0 + property real cursorWidth: 5 + property bool centered: false + + Item { + id: toBeMasked_noCenter + anchors.fill: parent + + property real cursorPosition: (parent.width - item.cursorWidth) * ( item.value / (item.max-item.min) ) + + //background + Rectangle { + anchors.fill: parent + color: item.backgroundColor + } + + //colored part of the slider + Rectangle { + anchors.top: parent.top + anchors.left: parent.left + width: toBeMasked_noCenter.cursorPosition + height: parent.height + + color: item.sliderColor + } + + //cursor + Rectangle { + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: toBeMasked_noCenter.cursorPosition + width: item.cursorWidth + height: parent.height + color: item.cursorColor + } + + visible: false + } + + Item { + id: toBeMasked_centered + anchors.fill: parent + property real x0: (parent.width - item.cursorWidth)/2 + property real cursorPosition_left: Math.min( toBeMasked_noCenter.cursorPosition, x0) + property real cursorPosition_right: Math.max( toBeMasked_noCenter.cursorPosition, x0) + + //cursor background + Rectangle { + id: background + anchors.fill: parent + color: item.backgroundColor + } + + //filled slider + Rectangle { + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: toBeMasked_centered.cursorPosition_left + width: toBeMasked_centered.cursorPosition_right - toBeMasked_centered.cursorPosition_left + height: parent.height + color: item.sliderColor + } + + //center + Rectangle { + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: toBeMasked_centered.x0 + width: item.cursorWidth + height: parent.height + color: item.centerColor + } + + //cursor + Rectangle { + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: toBeMasked_noCenter.cursorPosition + width: item.cursorWidth + height: parent.height + color: item.cursorColor + } + + visible: false + } + + Rectangle { + id: mask_noCenter + anchors.fill: parent + radius: item.radius + visible: false + } + + // OpacityMask { + // anchors.fill: parent + // maskSource: mask_noCenter + // source: item.centered ? toBeMasked_centered : toBeMasked_noCenter + // } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/StateBar.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/StateBar.qml new file mode 100755 index 000000000000..226c7cf1036f --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/StateBar.qml @@ -0,0 +1,34 @@ +import QtQuick 2.15 + +import '../Defines' as Defines + +// StateBar fits 'state count' elements into a bar of a given width and spacing. Take care that 'width > stateCount*spacing' +Item { + id: stateBarContainer + + property int spacing: 2 // default value. set from outside + property int stateCount: 5 // default value. set from outside + property int currentState: 2 // default value. set from outside + property color barColor: colors.colorIndicatorLevelOrange // default value. set from outside + property color barBgColor: colors.colorGrey24 // default value. set from outside + + property alias stateBarHeight: stateBarContainer.height + readonly property real stateBarWidth: width/stateCount - spacing + + Defines.Colors { id: colors} + + Row { + id: boxRow + anchors.fill: parent + anchors.leftMargin: 0.5*stateBarContainer.spacing + spacing: stateBarContainer.spacing + Repeater { + model: stateCount + Rectangle { + width: stateBarWidth + height: stateBarHeight + color: (index == currentState) ? barColor : barBgColor + } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/StemOverlay.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/StemOverlay.qml new file mode 100755 index 000000000000..37c8497e06e1 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/StemOverlay.qml @@ -0,0 +1,257 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.1 +import '../Views' + +import '../Defines' as Defines + +//---------------------------------------------------------------------------------------------------------------------- +// Remix Deck Overlay - for sample volume and filter value editing +//---------------------------------------------------------------------------------------------------------------------- + +Item { + id: display + + required property var deckInfo + + Dimensions {id: dimensions} + Defines.Colors { id: colors } + Defines.Durations { id: durations } + Defines.Settings {id: settings} + + // MODEL PROPERTIES // + property string showHideState: "hide" + property int bottomMargin: 0 + property int yPositionWhenHidden: 240 + property int yPositionWhenShown: (195 - bottomMargin) + + readonly property string name: display.deckInfo.stemSelectedName + + state: display.deckInfo.stemSelected ? "show" : "hide" + height: 40 + anchors.left: parent.left + anchors.right: parent.right + + // dark grey background + Rectangle { + id: bottomInfoDetailsPanelDarkBg + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: display.height + color: colors.colorFxHeaderBg + // light grey background + Rectangle { + id:bottomInfoDetailsPanelLightBg + anchors { + top: parent.top + left: parent.left + } + height: display.height + width: 105 + color: colors.colorFxHeaderLightBg + } + } + +// // dividers + Rectangle { + id: fxInfoDivider0 + width:1; + height:63; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 105 + } + + Rectangle { + id: fxInfoDivider2 + width:1; + color: colors.colorDivider + anchors.top: parent.top + anchors.left: parent.left + anchors.leftMargin: 195 + height: display.height + } + + // Info Details + Rectangle { + id: bottomInfoDetailsPanel + + height: parent.height + clip: true + width: parent.width + color: "transparent" + + anchors.left: parent.left + anchors.leftMargin: 1 + + Row { + Item { + id: stemInfoDetailsPanel + + height: display.height + width: 110 + + // name + Text { + id: stemInfoName + font.capitalization: Font.AllUppercase + text: "NAME" + color: settings.accentColor + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 2 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: 4 + elide: Text.ElideRight + } + + // value + Text { + id: nameValue + font.capitalization: Font.AllUppercase + text: name + color: display.deckInfo.stemSelectedMidColor + anchors.bottom: parent.bottom + anchors.bottomMargin: 1 + anchors.left: parent.left + anchors.right: parent.right + font.pixelSize: fonts.scale(18) + anchors.leftMargin: 4 + elide: Text.ElideRight + } + } + + Item { + id: volumeInfoDetailsPanel + + height: display.height + width: 85 + + // volume + Text { + id: volumeInfoName + font.capitalization: Font.AllUppercase + text: "VOLUME" + color: !display.deckInfo.stemSelectedMuted ? settings.accentColor : "grey" + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 2 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: 4 + elide: Text.ElideRight + } + + // value + ProgressBar { + id: volume + progressBarHeight: 9 + progressBarWidth: 76 + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.bottomMargin: 3 + + anchors.leftMargin: 5 + anchors.rightMargin: 20 + + value: display.deckInfo.stemSelectedVolume + + drawAsEnabled: true + progressBarColorIndicatorLevel: display.deckInfo.stemSelectedMuted ? "grey" : settings.accentColor + progressBarBackgroundColor: "black" + } + } + + Item { + id: fxInfoDetailsPanel + + height: display.height + width: 125 + + // fx name + Text { + id: fxInfoSampleName + + font.capitalization: Font.AllUppercase + text: display.deckInfo.stemSelectedQuickFXName + color: display.deckInfo.stemSelectedQuickFXOn ? settings.accentColor : "grey" + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.topMargin: 2 + font.pixelSize: fonts.scale(13.5) + anchors.leftMargin: 4 + elide: Text.ElideRight + } + + // value + ProgressBar { + id: quickfx + progressBarHeight: 9 + progressBarWidth: 115 + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.rightMargin: 20 + anchors.bottomMargin: 3 + anchors.leftMargin: 5 + + value: display.deckInfo.stemSelectedQuickFXValue + visible: fxInfoSampleName.text !== "---" + + drawAsEnabled: true + progressBarColorIndicatorLevel: display.deckInfo.stemSelectedQuickFXOn ? settings.accentColor : "grey" + progressBarBackgroundColor: "black" + } + } + + // StemInfoDetails { + // id: bottomInfoDetails3 + // finalValue: (type == 0 ? "Cue" : type == 1 ? "Fade-In" : type == 2 ? "Fade-Out" : type == 3 ? "Load" : type == 4 ? "Grid" : type == 5 ? "Loop" : "-") + // finalLabel: "TYPE" + // width: 50 + // } + } + } + + // black border & shadow + Rectangle { + id: headerBlackLine + anchors.top: display.bottom + width: parent.width + color: colors.colorBlack + height: 2 + } + Rectangle { + id: headerShadow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: headerBlackLine.bottom + height: 6 + gradient: Gradient { + GradientStop { position: 1.0; color: colors.colorBlack0 } + GradientStop { position: 0.0; color: colors.colorBlack63 } + } + visible: false + } + + //------------------------------------------------------------------------------------------------------------------ + // STATES + //------------------------------------------------------------------------------------------------------------------ + + Behavior on y { PropertyAnimation { duration: durations.mainTransitionSpeed; easing.type: Easing.InOutQuad } } + + states: [ + State { + name: "show"; + PropertyChanges { target: display; y: yPositionWhenShown} + }, + State { + name: "hide"; + PropertyChanges { target: display; y: yPositionWhenHidden} + } + ] +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/TempoAdjust.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/TempoAdjust.qml new file mode 100755 index 000000000000..2fd23c0b29cf --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/TempoAdjust.qml @@ -0,0 +1,184 @@ +import QtQuick 2.15 + +import '../Defines' as Defines + +Item { + id: tempoAdjust + Defines.Margins {id: customMargins } + Defines.Settings {id: settings} + + readonly property bool shift: deckInfo.shift + + property int deckId: 0 + + function getHeader(headerID) { + switch(headerID) { + case 0: + return ""; + case 1: + return "Master BPM"; + case 2: + return "BPM"; + case 3: + return "Tempo"; + case 4: + return "BPM Offset"; + case 5: + return "Tempo Offset"; + case 6: + return "Master Deck"; + case 7: + return "Tempo Range"; + case 8: + return "Key"; + case 9: + return "Original BPM"; + } + } + + function getValue(valueID) { + switch(valueID) { + case 0: + return ""; + case 1: + return deckInfo.masterBPMShort; + case 2: + return deckInfo.bpmString; + case 3: + return deckInfo.tempoStringPer; + case 4: + return (deckInfo.masterDeck == tempoAdjust.deckId) ? "0.00" : deckInfo.bpmOffset; + case 5: + return (deckInfo.masterDeck == tempoAdjust.deckId) ? "0.00%" : deckInfo.tempoNeededString; + case 6: + return deckInfo.masterDeckLetter + case 7: + return deckInfo.tempoRange + case 8: + return deckInfo.hasKey && (deckInfo.keyAdjustString != "-0") && (deckInfo.keyAdjustString != "+0") ? (settings.camelotKey ? utils.camelotConvert(deckInfo.keyString) : deckInfo.keyString) + deckInfo.keyAdjustString : deckInfo.hasKey ? (settings.camelotKey ? utils.camelotConvert(deckInfo.keyString) : deckInfo.keyString) : "No key"; + case 9: + return deckInfo.songBPM + } + } + + function getColor(valueID) { + switch(valueID) { + case 0: + return "white"; + case 1: + return settings.enableMasterBpmTextColor ? ((deckInfo.masterDeck == deckInfo.deckId) ? colors.loopActiveColor : colors.lightOrange) : "white"; + case 2: + return settings.enableBpmTextColor ? ((deckInfo.masterDeck == tempoAdjust.deckId) || ((deckInfo.bpmOffset <= 0.05) && (deckInfo.bpmOffset >= - 0.05)) ? colors.loopActiveColor : colors.lightOrange) : "white"; + case 3: + return settings.enableTempoTextColor ? ((deckInfo.tempoString <= 0.05) && (deckInfo.tempoString >= - 0.05) ? colors.loopActiveColor : colors.lightOrange) : "white"; + case 4: + return settings.enableBpmOffsetTextColor ? ((deckInfo.masterDeck == tempoAdjust.deckId) || ((deckInfo.bpmOffset <= 0.05) && (deckInfo.bpmOffset >= - 0.05)) ? colors.loopActiveColor : colors.lightOrange) : "white"; + case 5: + return settings.enableTempoOffsetTextColor ? ((deckInfo.masterDeck == tempoAdjust.deckId) || ((deckInfo.tempoNeededVal <= 0.05) && (deckInfo.tempoNeededVal >= - 0.05)) ? colors.loopActiveColor : colors.lightOrange) : "white"; + case 6: + return settings.enableMasterDeckTextColor ? ((deckInfo.masterDeck == deckInfo.deckId) ? colors.loopActiveColor : colors.lightOrange) : "white"; + case 7: + return "white" + case 8: + return deckInfo.isKeyLockOn ? colors.musicalKeyColors[deckInfo.keyIndex] : "white" + case 9: + return "white" + } + } + + Rectangle { + id: tempoBackground + width: 320 + height: 38 + + color: colors.grayBackground + // headline + Text { + anchors.top: tempoBackground.top + anchors.topMargin: 0 + anchors.left: tempoBackground.left + anchors.leftMargin: 3 + font.pixelSize: 15 + color: settings.accentColor + text: shift ? getHeader(settings.tempoDisplayLeftShift) : getHeader(settings.tempoDisplayLeft) + } + + // value + Text { + anchors.bottom: tempoBackground.bottom + anchors.bottomMargin: 0 + anchors.left: tempoBackground.left + anchors.leftMargin: 3 + font.pixelSize: 20 + font.family: "Pragmatica" + color: shift ? getColor(settings.tempoDisplayLeftShift) : getColor(settings.tempoDisplayLeft) + text: shift ? getValue(settings.tempoDisplayLeftShift) : getValue(settings.tempoDisplayLeft) + } + + // headline + Text { + anchors.top: tempoBackground.top + anchors.topMargin: 0 + anchors.left: tempoBackground.left + anchors.leftMargin: 100 + font.pixelSize: 15 + color: settings.accentColor + text: shift ? getHeader(settings.tempoDisplayCenterShift) : getHeader(settings.tempoDisplayCenter) + } + + // value + Text { + + anchors.bottom: tempoBackground.bottom + anchors.bottomMargin: 0 + anchors.left: tempoBackground.left + anchors.leftMargin: 100 + font.pixelSize: 20 + font.family: "Pragmatica" + color: shift ? getColor(settings.tempoDisplayCenterShift) : getColor(settings.tempoDisplayCenter) + text: shift ? getValue(settings.tempoDisplayCenterShift) : getValue(settings.tempoDisplayCenter) + } + + // headline + Text { + anchors.top: tempoBackground.top + anchors.topMargin: 0 + anchors.left: tempoBackground.left + anchors.leftMargin: 216 + font.pixelSize: 15 + color: settings.accentColor + text: shift ? getHeader(settings.tempoDisplayRightShift) : getHeader(settings.tempoDisplayRight) + } + + // value + Text { + + anchors.bottom: tempoBackground.bottom + anchors.bottomMargin: 0 + anchors.left: tempoBackground.left + anchors.leftMargin: 216 + font.pixelSize: 20 + font.family: "Pragmatica" + color: shift ? getColor(settings.tempoDisplayRightShift) : getColor(settings.tempoDisplayRight) + text: shift ? getValue(settings.tempoDisplayRightShift) : getValue(settings.tempoDisplayRight) + } + } + + Rectangle { + width: 1 + height: 38 + color: "#88ffffff" + anchors.top: tempoBackground.top + anchors.left: tempoBackground.left + anchors.leftMargin: 97 + } + + Rectangle { + width: 1 + height: 38 + color: "#88ffffff" + anchors.top: tempoBackground.top + anchors.left: tempoBackground.left + anchors.leftMargin: 213 + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/TrackRating.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/TrackRating.qml new file mode 100755 index 000000000000..b3857271a216 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/AdvancedScreen/Widgets/TrackRating.qml @@ -0,0 +1,42 @@ +import QtQuick 2.15 + +Item { + id: trackRating + + property int rating: 0 + readonly property variant ratingMap: { '-1': 0, '0': 0, '51': 1, '1': 1, '64': 2, '102': 2, '153': 3, '196': 4, '204': 4, '252': 5, '255': 5 } + readonly property int nrRatings: 5 + + width: 20 + height: 133 + + //-------------------------------------------------------------------------------------------------------------------- + + Rectangle { + id: ratingStars + anchors.left: parent.left + height: 40 + width: 170 + color: "transparent" + visible: ratingMap[trackRating.rating] <= nrRatings + + Row { + id: rowSmall + anchors.left: parent.left + anchors.top: parent.top + height: parent.height + spacing: 2 + // Repeater { + // model: (5 -(nrRatings - ratingMap[trackRating.rating])) + // Image { + // id: star + // source: "../Images/star.png" + // clip: true + // cache: true + // height: 34 + // width: 34 + // } + // } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/BPMIndicator.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/BPMIndicator.qml new file mode 100755 index 000000000000..43260bfda898 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/BPMIndicator.qml @@ -0,0 +1,68 @@ +/* +This module is used to define the top right section, right under the label. +Currently this section is dedicated to BPM and tempo fader information. +*/ +import QtQuick 2.14 +import QtQuick.Controls 2.15 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Rectangle { + id: root + + required property string group + required property color borderColor + + property real value: 0 + + color: "transparent" + radius: 6 + border.color: smallBoxBorder + border.width: 2 + + Mixxx.ControlProxy { + id: bpm + group: root.group + key: "bpm" + } + + Mixxx.ControlProxy { + id: rateRange + group: root.group + key: "rateRange" + } + + Text { + id: indicator + text: bpm.value > 0 ? bpm.value.toFixed(2) : "-" + font.pixelSize: 17 + color: fontColor + anchors.centerIn: parent + } + + Text { + id: range + + text: rateRange.value > 0 ? `-/+ \n${(rateRange.value * 100).toFixed()}%` : '' + font.pixelSize: 9 + color: fontColor + + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.rightMargin: 5 + anchors.topMargin: 2 + + horizontalAlignment: Text.AlignHCenter + } + + states: State { + name: "compacted" + + PropertyChanges { + target: range + visible: false + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/HotcuePoint.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/HotcuePoint.qml new file mode 100644 index 000000000000..f39bdc1ca796 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/HotcuePoint.qml @@ -0,0 +1,199 @@ +/* +This module is used to define markers element as render over the the overview waveform. +When this is written, Mixxx QML doesn't have waveform overview marker ready to be used, so this +is an attempt to provide fully functional markers for the controller screen, while the Mixxx QML +interface is still being worked on. +Consider replacing this with native overview marker in the future. +*/ +import QtQuick 2.15 +import QtQuick.Shapes 1.4 +import QtQuick.Window 2.15 + +import QtQuick.Controls 2.15 + +import Mixxx 1.0 as Mixxx + +Item { + required property real position + required property int type + + property int number: 1 + property color color: 'blue' + + enum Type { + OneShot, + Loop, + IntroIn, + IntroOut, + OutroIn, + OutroOut, + LoopIn, + LoopOut + } + + property variant typeWithNumber: [ + HotcuePoint.Type.OneShot, + HotcuePoint.Type.Loop + ] + + x: position * (Window.width - 16) + width: 21 + + // One shot + Shape { + visible: type == HotcuePoint.Type.OneShot + anchors.fill: parent + antialiasing: true + + ShapePath { + strokeWidth: 1 + strokeColor: Qt.rgba(0, 0, 0, 0.5) + fillColor: color + strokeStyle: ShapePath.SolidLine + // dashPattern: [ 1, 4 ] + startX: 0; startY: 0 + + PathLine { x: 12; y: 0 } + PathLine { x: 18; y: 6 } + PathLine { x: 18; y: 7 } + PathLine { x: 12; y: 13 } + PathLine { x: 2; y: 13 } + PathLine { x: 2; y: 80 } + PathLine { x: 0; y: 80 } + PathLine { x: 0; y: 0 } + } + } + + // Intro/Outro entry marker + Shape { + visible: type == HotcuePoint.Type.IntroIn || type == HotcuePoint.Type.OutroIn + anchors.fill: parent + antialiasing: true + + ShapePath { + strokeWidth: 1 + strokeColor: Qt.rgba(0, 0, 0, 0.5) + fillColor: "#6e6e6e" + strokeStyle: ShapePath.SolidLine + // dashPattern: [ 1, 4 ] + startX: 0; startY: 0 + + PathLine { x: 11; y: 0 } + PathLine { x: 2; y: 13 } + PathLine { x: 2; y: 80 } + PathLine { x: 0; y: 80 } + PathLine { x: 0; y: 0 } + } + } + + // Intro/Outro exit marker + Shape { + visible: type == HotcuePoint.Type.IntroOut || type == HotcuePoint.Type.OutroOut + anchors.fill: parent + antialiasing: true + + ShapePath { + strokeWidth: 1 + strokeColor: Qt.rgba(0, 0, 0, 0.5) + fillColor: "#6e6e6e" + strokeStyle: ShapePath.SolidLine + // dashPattern: [ 1, 4 ] + startX: 2; startY: 0 + + PathLine { x: 0; y: 0 } + PathLine { x: 0; y: 67 } + PathLine { x: -9; y: 80 } + PathLine { x: 2; y: 80 } + PathLine { x: 2; y: 0 } + } + } + + // Loop + Shape { + visible: type == HotcuePoint.Type.Loop + anchors.fill: parent + antialiasing: true + + ShapePath { + strokeWidth: 1 + strokeColor: Qt.rgba(0, 0, 0, 0.5) + fillColor: "#6ef36e" + strokeStyle: ShapePath.SolidLine + // dashPattern: [ 1, 4 ] + startX: 13; startY: 0 + + PathArc { + x: 2; y: 13 + radiusX: 9; radiusY: 9 + direction: PathArc.Clockwise + } + PathLine { x: 2; y: 80 } + PathLine { x: 0; y: 80 } + PathLine { x: 0; y: 0 } + PathLine { x: 21; y: 0 } + } + } + + // Loop in + Shape { + visible: type == HotcuePoint.Type.LoopIn + anchors.fill: parent + antialiasing: true + + ShapePath { + strokeWidth: 1 + strokeColor: Qt.rgba(0, 0, 0, 0.5) + fillColor: "#6ef36e" + strokeStyle: ShapePath.SolidLine + // dashPattern: [ 1, 4 ] + startX: 0; startY: 0 + + PathLine { x: 8; y: 0 } + PathLine { x: 2; y: 10 } + PathLine { x: 2; y: 80 } + PathLine { x: 0; y: 80 } + PathLine { x: 0; y: 0 } + } + } + + // Loop out + Shape { + visible: type == HotcuePoint.Type.LoopOut + anchors.fill: parent + antialiasing: true + + ShapePath { + strokeWidth: 1 + strokeColor: Qt.rgba(0, 0, 0, 0.5) + fillColor: "#6ef36e" + strokeStyle: ShapePath.SolidLine + // dashPattern: [ 1, 4 ] + startX: 2; startY: 0 + + PathLine { x: -6; y: 0 } + PathLine { x: 0; y: 10 } + PathLine { x: 0; y: 80 } + PathLine { x: 2; y: 80 } + PathLine { x: 2; y: 0 } + } + } + + Shape { + visible: type in typeWithNumber + anchors.fill: parent + antialiasing: true + + ShapePath { + fillColor: "black" + strokeColor: "black" + PathText { + x: 4 + y: 3 + font.family: "Arial" + font.pixelSize: 11 + font.weight: Font.Medium + text: `${number}` + } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/KeyIndicator.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/KeyIndicator.qml new file mode 100755 index 000000000000..06006eb8abeb --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/KeyIndicator.qml @@ -0,0 +1,122 @@ +/* +This module is used to define the top left section, right under the label. +Currently this section is dedicated to key/pitch information. +*/ +import QtQuick 2.14 +import QtQuick.Controls 2.15 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Rectangle { + id: root + + required property string group + + enum Key { + NoKey, + OneD, + EightD, + ThreeD, + TenD, + FiveD, + TwelveD, + SevenD, + SecondD, + NineD, + FourD, + ElevenD, + SixD, + TenM, + FiveM, + TwelveM, + SevenM, + TwoM, + NineM, + FourM, + ElevenM, + SixM, + OneM, + EightM, + ThreeM + } + + property variant colorsMap: [ + "#b09840", // No key + "#b960a2",// 1d + "#9fc516", // 8d + "#527fc0", // 3d + "#f28b2e", // 10d + "#5bc1cf", // 5d + "#e84c4d", // 12d + "#73b629", // 7d + "#8269ab", // 2d + "#fdd615", // 9d + "#3cc0f0", // 4d + "#4cb686", // 11d + "#4cb686", // 6d + "#f5a158", // 10m + "#7bcdd9", // 5m + "#ed7171", // 12m + "#8fc555", // 7m + "#9b86be", // 2m + "#fcdf45", // 9m + "#63cdf4", // 4m + "#f1845f", // 11m + "#70c4a0", // 6m + "#c680b6", // 1m + "#b2d145", // 8m + "#7499cd" // 3m + ] + + property variant textMap: [ + "No key", + "1d", + "8d", + "3d", + "10d", + "5d", + "12d", + "7d", + "2d", + "9d", + "4d", + "11d", + "6d", + "10m", + "5m", + "12m", + "7m", + "2m", + "9m", + "4m", + "11m", + "6m", + "1m", + "8m", + "3m" + ] + + Mixxx.ControlProxy { + id: keyProxy + group: root.group + key: "key" + } + + required property color borderColor + + readonly property int key: keyProxy.value > 0 ? keyProxy.value : KeyIndicator.Key.NoKey + + radius: 6 + border.color: colorsMap[key] + border.width: 2 + + color: colorsMap[key] + + Text { + text: textMap[key] + font.pixelSize: 17 + color: fontColor + anchors.centerIn: parent + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/Keyboard.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/Keyboard.qml new file mode 100644 index 000000000000..cf5fa1d203c1 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/Keyboard.qml @@ -0,0 +1,133 @@ +/* +This module is used render the keyboard scale, originating from C major (do). +*/ +import QtQuick 2.15 +import QtQuick.Shapes 1.4 +import QtQuick.Layouts 1.3 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +import "." as S4MK3 + +Item { + id: root + + required property string group + + Mixxx.ControlProxy { + id: keyProxy + group: root.group + key: "key" + } + + readonly property int key: keyProxy.value + + RowLayout { + anchors.fill: parent + spacing: 0 + Item { + Layout.fillWidth: true + Layout.fillHeight: true + Rectangle { anchors.fill: parent; color: "transparent" } + } + Repeater { + id: whiteKeys + + model: 7 + + property variant keyMap: [ + S4MK3.KeyIndicator.Key.OneD, + S4MK3.KeyIndicator.Key.ThreeD, + S4MK3.KeyIndicator.Key.FiveD, + S4MK3.KeyIndicator.Key.TwelveD, + S4MK3.KeyIndicator.Key.SecondD, + S4MK3.KeyIndicator.Key.FourD, + S4MK3.KeyIndicator.Key.SixD, + S4MK3.KeyIndicator.Key.TenM, + S4MK3.KeyIndicator.Key.TwelveM, + S4MK3.KeyIndicator.Key.TwoM, + S4MK3.KeyIndicator.Key.NineM, + S4MK3.KeyIndicator.Key.ElevenM, + S4MK3.KeyIndicator.Key.OneM, + S4MK3.KeyIndicator.Key.ThreeM + ] + + Rectangle { + Layout.preferredWidth: 21 + Layout.fillHeight: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + radius: 2 + border.width: 1 + border.color: root.key == whiteKeys.keyMap[index] || root.key == whiteKeys.keyMap[index + 7] ? "red" : "black" + color: root.key == whiteKeys.keyMap[index] || root.key == whiteKeys.keyMap[index + 7] ? "#aaaaaa" : "white" + } + } + Item { + Layout.fillWidth: true + Layout.fillHeight: true + Rectangle { anchors.fill: parent; color: "transparent" } + } + } + RowLayout { + anchors.fill: parent + spacing: 0 + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + Rectangle { anchors.fill: parent; color: "transparent" } + } + Repeater { + id: blackKeys + + model: 5 + + property variant keyMap: [ + S4MK3.KeyIndicator.Key.EightD, + S4MK3.KeyIndicator.Key.TenD, + S4MK3.KeyIndicator.Key.SevenD, + S4MK3.KeyIndicator.Key.NineD, + S4MK3.KeyIndicator.Key.ElevenD, + S4MK3.KeyIndicator.Key.FiveM, + S4MK3.KeyIndicator.Key.SevenM, + S4MK3.KeyIndicator.Key.FourM, + S4MK3.KeyIndicator.Key.SixM, + S4MK3.KeyIndicator.Key.EightM, + ] + + Item { + Layout.fillHeight: true + Layout.preferredWidth: index == 1 ? 42 : index == 4 ? 12 : 21 + Rectangle { + anchors.top: parent.top + anchors.bottom: parent.bottom + width: 12 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + color: "transparent" + ColumnLayout { + anchors.fill: parent + spacing: 0 + Rectangle { + Layout.fillHeight: true + Layout.fillWidth: true + radius: 2 + border.width: 1 + color: root.key == blackKeys.keyMap[index] || root.key == blackKeys.keyMap[index + blackKeys.model] ? "#aaaaaa" : "black" + } + Item { + Layout.fillWidth: true + Layout.fillHeight: true + Rectangle { anchors.fill: parent; color: "transparent" } + } + } + } + } + } + Item { + Layout.fillWidth: true + Layout.fillHeight: true + Rectangle { anchors.fill: parent; color: "transparent" } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/LoopSizeIndicator.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/LoopSizeIndicator.qml new file mode 100755 index 000000000000..bd5938268693 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/LoopSizeIndicator.qml @@ -0,0 +1,63 @@ +/* +This module is used to define the center right section, above the waveform. +Currently this section is dedicated to display loop state information such as loop state, anchor mode or size. +*/ +import QtQuick 2.14 +import QtQuick.Controls 2.15 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Rectangle { + id: root + + required property string group + + property color loopReverseOffBoxColor: Qt.rgba(255/255,113/255,9/255, 1) + property color loopOffBoxColor: Qt.rgba(67/255,70/255,66/255, 1) + property color loopOffFontColor: "white" + property color loopOnBoxColor: Qt.rgba(125/255,246/255,64/255, 1) + property color loopOnFontColor: "black" + + Mixxx.ControlProxy { + id: beatloopSize + group: root.group + key: "beatloop_size" + } + + Mixxx.ControlProxy { + id: loopEnabled + group: root.group + key: "loop_enabled" + } + + Mixxx.ControlProxy { + id: loopAnchor + group: root.group + key: "loop_anchor" + } + + readonly property bool on: loopEnabled.value + + radius: 6 + border.width: 2 + border.color: (loopSizeIndicator.on ? loopOnBoxColor : (loopAnchor.value == 0 ? loopOffBoxColor : loopReverseOffBoxColor)) + color: (loopSizeIndicator.on ? loopOnBoxColor : (loopAnchor.value == 0 ? loopOffBoxColor : loopReverseOffBoxColor)) + + Text { + id: indicator + text: (beatloopSize.value < 1 ? `1/${1 / beatloopSize.value}` : `${beatloopSize.value}`); + anchors.centerIn: parent + font.pixelSize: 46 + color: (loopSizeIndicator.on ? loopOnFontColor : loopOffFontColor) + } + + states: State { + name: "compacted" + + PropertyChanges { + target: indicator + font.pixelSize: 17 + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/OnAirTrack.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/OnAirTrack.qml new file mode 100644 index 000000000000..8d4097ccad63 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/OnAirTrack.qml @@ -0,0 +1,82 @@ +/* +This module is used to define the top section o the screen. +Currently this section is dedicated to display title and artist of the track loaded on the deck. +*/ +import QtQuick 2.14 +import QtQuick.Controls 2.15 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Item { + id: root + + required property string group + property var deckPlayer: Mixxx.PlayerManager.getPlayer(root.group) + readonly property var currentTrack: deckPlayer.currentTrack + property bool scrolling: true + + property real speed: 1.7 + property real spacing: 30 + + Rectangle { + id: frame + anchors.top: root.top + anchors.bottom: root.bottom + width: parent.width + x: 6 + color: 'transparent' + + readonly property string fulltext: !trackLoadedControl.value || root.currentTrack?.title.trim().length + root.currentTrack?.artist.trim().length == 0 ? qsTr("No Track Loaded") : `${root.currentTrack?.title} - ${root.currentTrack?.artist}`.trim() + + Text { + id: text1 + text: frame.fulltext + font.pixelSize: 24 + font.family: "Noto Sans" + font.letterSpacing: -1 + color: fontColor + } + Text { + id: text2 + visible: root.width < text1.implicitWidth + anchors.left: text1.right + anchors.leftMargin: spacing + text: frame.fulltext + font.pixelSize: 24 + font.family: "Noto Sans" + font.letterSpacing: -1 + color: fontColor + } + } + + Mixxx.ControlProxy { + id: trackLoadedControl + + group: root.group + key: "track_loaded" + } + + Timer { + id: timer + + property int modifier: -root.speed + + repeat: true + interval: 15 + running: root.width < text1.implicitWidth && root.scrolling + + onTriggered: { + frame.x += modifier; + if (frame.x <= -text1.implicitWidth - spacing) { + frame.x = 0; + } + } + + onRunningChanged: { + if (!running) { + frame.x = 6; + } + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/Progression.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/Progression.qml new file mode 100755 index 000000000000..93bc6f2eb401 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/Progression.qml @@ -0,0 +1,43 @@ +/* +This module is used to draw an overlay on the waveform overview in order to highlight better the playback progression. +As the native Mixxx QML component involves, this component might become redundant and should be replaces with native modules. +*/ +import QtQuick 2.15 +import QtQuick.Window 2.15 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Item { + id: root + + required property string group + + property real windowWidth: Window.width + + Mixxx.ControlProxy { + id: trackLoaded + group: root.group + key: "track_loaded" + } + + Mixxx.ControlProxy { + id: playposition + group: root.group + key: "playposition" + } + + width: Math.round(playposition.value * (320 - 12)) + visible: trackLoaded.value + clip: true + + Rectangle { + anchors.fill: parent + anchors.leftMargin: -border.width + anchors.topMargin: -border.width + anchors.bottomMargin: -border.width + border.width: 2 + border.color:"black" + color: Qt.rgba(0.39, 0.80, 0.96, 0.3) + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/SplashOff.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/SplashOff.qml new file mode 100644 index 000000000000..2954d704c83c --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/SplashOff.qml @@ -0,0 +1,15 @@ +import QtQuick 2.15 + +Rectangle { + id: root + anchors.fill: parent + color: "black" + + Image { + anchors.centerIn: parent + width: root.width*0.8 + height: root.height + fillMode: Image.PreserveAspectFit + source: engine.getSetting("idleBackground") || "../../../images/templates/logo_mixxx.png" + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/StockScreen.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/StockScreen.qml new file mode 100644 index 000000000000..f392a4548dd1 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/StockScreen.qml @@ -0,0 +1,634 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.3 + +import "../../../qml" as Skin +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +import S4MK3 as S4MK3 + +Rectangle { + id: root + + required property string group + required property string screenId + + anchors.fill: parent + color: "black" + + function onSharedDataUpdate(data) { + if (!root) return; + + console.log(`Received data on screen#${root.screenId} while currently bind to ${root.group}: ${JSON.stringify(data)}`); + if (typeof data === "object" && typeof data.group[root.screenId] === "string" && root.group !== data.group[root.screenId]) { + root.group = data.group[root.screenId] + waveformOverview.player = Mixxx.PlayerManager.getPlayer(root.group) + artwork.player = Mixxx.PlayerManager.getPlayer(root.group) + console.log(`Changed group for screen ${root.screenId} to ${root.group}`); + } + var shouldBeCompacted = false; + if (typeof data.padsMode === "object") { + scrollingWaveform.visible = data.padsMode[root.group] === 4 + artworkSpacer.visible = data.padsMode[root.group] === 1 + shouldBeCompacted |= scrollingWaveform.visible || artworkSpacer.visible + } + if (typeof data.keyboardMode === "object") { + shouldBeCompacted |= data.keyboardMode[root.group] + keyboard.visible = !!data.keyboardMode[root.group] + } + deckInfo.state = shouldBeCompacted ? "compacted" : "" + if (typeof data.displayBeatloopSize === "object") { + timeIndicator.mode = data.displayBeatloopSize[root.group] ? S4MK3.TimeAndBeatloopIndicator.Mode.BeetjumpSize : S4MK3.TimeAndBeatloopIndicator.Mode.RemainingTime + timeIndicator.update() + } + } + + Mixxx.ControlProxy { + id: trackLoadedControl + + group: root.group + key: "track_loaded" + + onValueChanged: (value) => { + if (!value && deckInfo) { + deckInfo.state = "" + scrollingWaveform.visible = false + } + } + } + + Timer { + id: channelchange + + interval: 5000 + repeat: true + running: false + + onTriggered: { + root.onSharedDataUpdate({ + group: { + "leftdeck": screenId === "leftdeck" && trackLoadedControl.group === "[Channel1]" ? "[Channel3]" : "[Channel1]", + "rightdeck": screenId === "rightdeck" && trackLoadedControl.group === "[Channel2]" ? "[Channel4]" : "[Channel2]", + }, + scrollingWaveform: { + "[Channel1]": true, + "[Channel2]": true, + "[Channel3]": true, + "[Channel4]": true, + }, + keyboardMode: { + "[Channel1]": false, + "[Channel2]": false, + "[Channel3]": false, + "[Channel4]": false, + }, + displayBeatloopSize: { + "[Channel1]": false, + "[Channel2]": false, + "[Channel3]": false, + "[Channel4]": false, + }, + }); + } + } + + Component.onCompleted: { + if (typeof engine.makeSharedDataConnection !== "function") { + return + } + + engine.makeSharedDataConnection(root.onSharedDataUpdate) + + root.onSharedDataUpdate({ + group: { + "leftdeck": "[Channel1]", + "rightdeck": "[Channel2]", + }, + scrollingWaveform: { + "[Channel1]": false, + "[Channel2]": false, + "[Channel3]": false, + "[Channel4]": false, + }, + keyboardMode: { + "[Channel1]": false, + "[Channel2]": false, + "[Channel3]": false, + "[Channel4]": false, + }, + displayBeatloopSize: { + "[Channel1]": false, + "[Channel2]": false, + "[Channel3]": false, + "[Channel4]": false, + }, + }); + } + + Rectangle { + anchors.fill: parent + color: "transparent" + + Image { + id: artwork + anchors.fill: parent + + property var player: Mixxx.PlayerManager.getPlayer(root.group) + + source: player.currentTrack?.coverArtUrl + height: 100 + width: 100 + fillMode: Image.PreserveAspectFit + + opacity: artworkSpacer.visible ? 1 : 0.2 + z: -1 + } + } + + ColumnLayout { + anchors.fill: parent + spacing: 6 + + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: 36 + color: "transparent" + + RowLayout { + anchors.fill: parent + spacing: 1 + + S4MK3.OnAirTrack { + id: onAir + group: root.group + Layout.fillWidth: true + Layout.fillHeight: true + + scrolling: !scrollingWaveform.visible + } + } + } + + // Indicator + Rectangle { + id: deckInfo + + Layout.fillWidth: true + Layout.preferredHeight: 105 + Layout.leftMargin: 6 + Layout.rightMargin: 6 + color: "transparent" + + GridLayout { + id: gridLayout + anchors.fill: parent + columnSpacing: 6 + rowSpacing: 6 + columns: 2 + + // Section: Key + S4MK3.KeyIndicator { + id: keyIndicator + group: root.group + borderColor: smallBoxBorder + + Layout.fillWidth: true + Layout.fillHeight: true + } + + // Section: Bpm + S4MK3.BPMIndicator { + id: bpmIndicator + group: root.group + borderColor: smallBoxBorder + + Layout.fillWidth: true + Layout.fillHeight: true + } + + // Section: Key + S4MK3.TimeAndBeatloopIndicator { + id: timeIndicator + group: root.group + + Layout.fillWidth: true + Layout.preferredHeight: 72 + timeColor: smallBoxBorder + } + + // Section: Bpm + S4MK3.LoopSizeIndicator { + id: loopSizeIndicator + group: root.group + + Layout.fillWidth: true + Layout.preferredHeight: 72 + } + } + states: State { + name: "compacted" + + PropertyChanges { + target:deckInfo + Layout.preferredHeight: 28 + } + PropertyChanges { + target: gridLayout + columns: 4 + } + PropertyChanges { + target: bpmIndicator + state: "compacted" + } + PropertyChanges { + target: timeIndicator + Layout.preferredHeight: -1 + Layout.fillHeight: true + state: "compacted" + } + PropertyChanges { + target: loopSizeIndicator + Layout.preferredHeight: -1 + Layout.fillHeight: true + state: "compacted" + } + } + } + + Item { + id: scrollingWaveform + + Layout.fillWidth: true + Layout.minimumHeight: scrollingWaveform.visible ? 120 : 0 + Layout.leftMargin: 0 + Layout.rightMargin: 0 + + visible: false + + Mixxx.ControlProxy { + id: zoomControl + + group: root.group + key: "waveform_zoom" + } + + MixxxControls.WaveformDisplay { + id: singleWaveform + group: root.group + x: 0 + width: 320 + height: 100 + + Behavior on height { PropertyAnimation { duration: 90} } + anchors.fill: parent + zoom: zoomControl.value + backgroundColor: "#36000000" + + Mixxx.WaveformRendererEndOfTrack { + color: 'blue' + endOfTrackWarningTime: 30 + } + + Mixxx.WaveformRendererPreroll { + color: '#998977' + } + + Mixxx.WaveformRendererMarkRange { + // + Mixxx.WaveformMarkRange { + startControl: "loop_start_position" + endControl: "loop_end_position" + enabledControl: "loop_enabled" + color: '#00b400' + opacity: 0.7 + disabledColor: '#FFFFFF' + disabledOpacity: 0.6 + } + // + Mixxx.WaveformMarkRange { + startControl: "intro_start_position" + endControl: "intro_end_position" + color: '#2c5c9a' + opacity: 0.6 + durationTextColor: '#ffffff' + durationTextLocation: 'after' + } + // + Mixxx.WaveformMarkRange { + startControl: "outro_start_position" + endControl: "outro_end_position" + color: '#2c5c9a' + opacity: 0.6 + durationTextColor: '#ffffff' + durationTextLocation: 'before' + } + } + + Mixxx.WaveformRendererRGB { + axesColor: '#00ffffff' + lowColor: 'red' + midColor: 'green' + highColor: 'blue' + + gainAll: 1.0 + gainLow: 1.0 + gainMid: 1.0 + gainHigh: 1.0 + } + + Mixxx.WaveformRendererStem { + gainAll: 1.0 + } + + Mixxx.WaveformRendererBeat { + color: '#cfcfcf' + } + + Mixxx.WaveformRendererMark { + playMarkerColor: 'cyan' + playMarkerBackground: 'transparent' + defaultMark: Mixxx.WaveformMark { + align: "bottom|right" + color: "#FF0000" + textColor: "#FFFFFF" + text: " %1 " + } + + untilMark.showTime: true + untilMark.showBeats: true + untilMark.align: Qt.AlignCenter + untilMark.textSize: 14 + + Mixxx.WaveformMark { + control: "cue_point" + text: 'C' + align: 'top|right' + color: 'red' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "loop_start_position" + text: '↻' + align: 'top|left' + color: 'green' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "loop_end_position" + align: 'bottom|right' + color: 'green' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "intro_start_position" + align: 'top|right' + color: 'blue' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "intro_end_position" + text: '◢' + align: 'top|left' + color: 'blue' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "outro_start_position" + text: '◣' + align: 'top|right' + color: 'blue' + textColor: '#FFFFFF' + } + Mixxx.WaveformMark { + control: "outro_end_position" + align: 'top|left' + color: 'blue' + textColor: '#FFFFFF' + } + } + } + } + + Mixxx.ControlProxy { + id: deckScratching + + group: root.group + key: "scratch2_enable" + + onValueChanged: { + if (typeof engine.makeSharedDataConnection !== "function") { + return; + } + + if (value) { + waveformTimer.running = false; + scrollingWaveform.visible = true; + deckInfo.state = scrollingWaveform.visible ? "compacted" : "" + } else { + waveformTimer.running = true; + waveformTimer.restart() + } + } + } + + Timer { + id: waveformTimer + + interval: 4000 + repeat: false + running: false + + onTriggered: { + scrollingWaveform.visible = false; + deckInfo.state = scrollingWaveform.visible ? "compacted" : "" + } + } + + // Spacer + Item { + id: artworkSpacer + + Layout.fillWidth: true + Layout.minimumHeight: artworkSpacer.visible ? 120 : 0 + Layout.leftMargin: 6 + Layout.rightMargin: 6 + + visible: false + + Rectangle { + color: "transparent" + visible: parent.visible + anchors.top: parent.top + anchors.bottom: parent.bottom + x: 153 + width: 2 + } + } + + // Track progress + Item { + id: waveform + Layout.fillWidth: true + Layout.fillHeight: true + Layout.leftMargin: 6 + Layout.rightMargin: 6 + layer.enabled: true + + S4MK3.Progression { + id: progression + group: root.group + + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + } + + Mixxx.WaveformOverview { + readonly property var player: Mixxx.PlayerManager.getPlayer(root.group) + id: waveformOverview + anchors.fill: parent + + track: player.currentTrack + } + + Mixxx.ControlProxy { + id: samplesControl + + group: root.group + key: "track_samples" + } + + // Hotcue + Repeater { + model: 16 + + S4MK3.HotcuePoint { + required property int index + + Mixxx.ControlProxy { + id: samplesControl + + group: root.group + key: "track_samples" + } + + Mixxx.ControlProxy { + id: hotcueEnabled + group: root.group + key: `hotcue_${index + 1}_status` + } + + Mixxx.ControlProxy { + id: hotcuePosition + group: root.group + key: `hotcue_${index + 1}_position` + } + + Mixxx.ControlProxy { + id: hotcueColor + group: root.group + key: `hotcue_${number}_color` + } + + anchors.top: parent.top + // anchors.left: parent.left + anchors.bottom: parent.bottom + visible: hotcueEnabled.value + + number: this.index + 1 + type: S4MK3.HotcuePoint.Type.OneShot + position: hotcuePosition.value / samplesControl.value + color: `#${(hotcueColor.value >> 16).toString(16).padStart(2, '0')}${((hotcueColor.value >> 8) & 255).toString(16).padStart(2, '0')}${(hotcueColor.value & 255).toString(16).padStart(2, '0')}` + } + } + + // Intro + S4MK3.HotcuePoint { + + Mixxx.ControlProxy { + id: introStartEnabled + group: root.group + key: `intro_start_enabled` + } + + Mixxx.ControlProxy { + id: introStartPosition + group: root.group + key: `intro_start_position` + } + + anchors.top: parent.top + anchors.bottom: parent.bottom + visible: introStartEnabled.value + + type: S4MK3.HotcuePoint.Type.IntroIn + position: introStartPosition.value / samplesControl.value + } + + // Extro + S4MK3.HotcuePoint { + + Mixxx.ControlProxy { + id: introEndEnabled + group: root.group + key: `intro_end_enabled` + } + + Mixxx.ControlProxy { + id: introEndPosition + group: root.group + key: `intro_end_position` + } + + anchors.top: parent.top + anchors.bottom: parent.bottom + visible: introEndEnabled.value + + type: S4MK3.HotcuePoint.Type.IntroOut + position: introEndPosition.value / samplesControl.value + } + + // Loop in + S4MK3.HotcuePoint { + Mixxx.ControlProxy { + id: loopStartPosition + group: root.group + key: `loop_start_position` + } + + anchors.top: parent.top + anchors.bottom: parent.bottom + visible: loopStartPosition.value > 0 + + type: S4MK3.HotcuePoint.Type.LoopIn + position: loopStartPosition.value / samplesControl.value + } + + // Loop out + S4MK3.HotcuePoint { + Mixxx.ControlProxy { + id: loopEndPosition + group: root.group + key: `loop_end_position` + } + + anchors.top: parent.top + anchors.bottom: parent.bottom + visible: loopEndPosition.value > 0 + + type: S4MK3.HotcuePoint.Type.LoopOut + position: loopEndPosition.value / samplesControl.value + } + } + + S4MK3.Keyboard { + id: keyboard + group: root.group + visible: false + Layout.fillWidth: true + Layout.fillHeight: true + Layout.leftMargin: 6 + Layout.rightMargin: 6 + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/TimeAndBeatloopIndicator.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/TimeAndBeatloopIndicator.qml new file mode 100755 index 000000000000..be5d8cdf9a6d --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/TimeAndBeatloopIndicator.qml @@ -0,0 +1,95 @@ +/* +This module is used to define the center left section, above the waveform. +Currently this section is dedicated to show the remaining time as well as the beatloop when changing. +*/ +import QtQuick 2.14 +import QtQuick.Controls 2.15 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Rectangle { + id: root + + required property string group + + property color timeColor: Qt.rgba(67/255,70/255,66/255, 1) + property color beatjumpColor: 'yellow' + + enum Mode { + RemainingTime, + BeetjumpSize + } + + property int mode: TimeAndBeatloopIndicator.Mode.RemainingTime + + radius: 6 + border.color: timeColor + border.width: 2 + color: timeColor + + Text { + id: indicator + anchors.centerIn: parent + text: "0.00" + + font.pixelSize: 46 + color: fontColor + + Mixxx.ControlProxy { + id: progression + group: root.group + key: "playposition" + } + + Mixxx.ControlProxy { + id: duration + group: root.group + key: "duration" + } + + Mixxx.ControlProxy { + id: beatjump + group: root.group + key: "beatjump_size" + } + + Mixxx.ControlProxy { + id: endoftrack + group: root.group + key: "end_of_track" + onValueChanged: (value) => { + root.border.color = value ? 'red' : timeColor + root.color = value ? 'red' : timeColor + } + } + } + + Component.onCompleted: { + indicator.text = Qt.binding(function() { + let newValue = ""; + if (root.mode === TimeAndBeatloopIndicator.Mode.RemainingTime) { + var seconds = ((1.0 - progression.value) * duration.value); + newValue = `-${parseInt(seconds / 60).toString().padStart(2, '0')}:${parseInt(seconds % 60).toString().padStart(2, '0')}`; + } else { + newValue = (beatjump.value < 1 ? `1/${1 / beatjump.value}` : `${beatjump.value}`); + } + return newValue + }); + } + + states: State { + name: "compacted" + + PropertyChanges { + target: indicator + font.pixelSize: 17 + } + } + + onModeChanged: () => { + border.color = root.mode == TimeAndBeatloopIndicator.Mode.BeetjumpSize ? beatjumpColor : timeColor + color = root.mode == TimeAndBeatloopIndicator.Mode.BeetjumpSize ? beatjumpColor : timeColor + indicator.color = root.mode == TimeAndBeatloopIndicator.Mode.BeetjumpSize ? 'black' : 'white' + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/WaveformOverview.qml b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/WaveformOverview.qml new file mode 100755 index 000000000000..b77b3bc1cb67 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/WaveformOverview.qml @@ -0,0 +1,162 @@ +/* +This module is used to waveform overview, at the bottom of the screen. It is reusing component definition of `WaveformOverview.qml` but remove +the link to markers and provide hooks with screen update/redraw, needed for partial updates. +Currently this section is dedicated to BPM and tempo fader information. +*/ +import QtQuick 2.15 +import QtQuick.Window 2.15 + +import Mixxx 1.0 as Mixxx +import Mixxx.Controls 1.0 as MixxxControls + +Item { + id: root + + required property string group + property var deckPlayer: Mixxx.PlayerManager.getPlayer(root.group) + property real scale: 0.2 + + visible: false + antialiasing: true + anchors.fill: parent + + Connections { + onGroupChanged: { + deckPlayer = Mixxx.PlayerManager.getPlayer(root.group) + console.log("Group changed!!") + } + } + + Rectangle { + color: "white" + anchors.top: parent.top + anchors.bottom: parent.bottom + x: 153 + width: 2 + } + Item { + id: waveformContainer + + property real duration: samplesControl.value / sampleRateControl.value + + anchors.fill: parent + clip: true + + Mixxx.ControlProxy { + id: samplesControl + + group: root.group + key: "track_samples" + } + + Mixxx.ControlProxy { + id: sampleRateControl + + group: root.group + key: "track_samplerate" + } + + Mixxx.ControlProxy { + id: playPositionControl + + group: root.group + key: "playposition" + } + + Mixxx.ControlProxy { + id: rateRatioControl + + group: root.group + key: "rate_ratio" + } + + Mixxx.ControlProxy { + id: zoomControl + + group: root.group + key: "waveform_zoom" + } + + Item { + id: waveformBeat + + property real effectiveZoomFactor: (zoomControl.value * rateRatioControl.value / root.scale) * 6 + + width: waveformContainer.duration * effectiveZoomFactor + height: parent.height + x: 0.5 * waveformContainer.width - playPositionControl.value * width + visible: true + + Shape { + id: preroll + + property real triangleHeight: waveformBeat.height + property real triangleWidth: 0.25 * waveformBeat.effectiveZoomFactor + property int numTriangles: Math.ceil(width / triangleWidth) + + anchors.top: waveformBeat.top + anchors.right: waveformBeat.left + width: Math.max(0, waveformBeat.x) + height: waveformBeat.height + + ShapePath { + strokeColor: 'red' + strokeWidth: 1 + fillColor: "transparent" + + PathMultiline { + paths: { + let p = []; + for (let i = 0; i < preroll.numTriangles; i++) { + p.push([Qt.point(preroll.width - i * preroll.triangleWidth, preroll.triangleHeight / 2), Qt.point(preroll.width - (i + 1) * preroll.triangleWidth, 0), Qt.point(preroll.width - (i + 1) * preroll.triangleWidth, preroll.triangleHeight), Qt.point(preroll.width - i * preroll.triangleWidth, preroll.triangleHeight / 2)]); + } + return p; + } + } + } + } + + Shape { + id: postroll + + property real triangleHeight: waveformBeat.height + property real triangleWidth: 0.25 * waveformBeat.effectiveZoomFactor + property int numTriangles: Math.ceil(width / triangleWidth) + + anchors.top: waveformBeat.top + anchors.left: waveformBeat.right + width: waveformContainer.width / 2 + height: waveformBeat.height + + ShapePath { + strokeColor: 'red' + strokeWidth: 1 + fillColor: "transparent" + + PathMultiline { + paths: { + let p = []; + for (let i = 0; i < postroll.numTriangles; i++) { + p.push([Qt.point(i * postroll.triangleWidth, postroll.triangleHeight / 2), Qt.point((i + 1) * postroll.triangleWidth, 0), Qt.point((i + 1) * postroll.triangleWidth, postroll.triangleHeight), Qt.point(i * postroll.triangleWidth, postroll.triangleHeight / 2)]); + } + return p; + } + } + } + } + } + + MixxxControls.WaveformOverview { + id: waveformOverview + // property real duration: samplesControl.value / sampleRateControl.onValueChanged + + player: root.player + anchors.fill: parent + channels: Mixxx.WaveformOverview.Channels.BothChannels + renderer: Mixxx.WaveformOverview.Renderer.RGB + colorHigh: 'white' + colorMid: 'blue' + colorLow: 'green' + } + } +} diff --git a/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/qmldir b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/qmldir new file mode 100644 index 000000000000..a330672059a4 --- /dev/null +++ b/res/controllers/TraktorKontrolS4MK3Screens/S4MK3/qmldir @@ -0,0 +1,13 @@ +module S4MK3 +BPMIndicator 1.0 BPMIndicator.qml +HotcuePoint 1.0 HotcuePoint.qml +Keyboard 1.0 Keyboard.qml +KeyIndicator 1.0 KeyIndicator.qml +LoopSizeIndicator 1.0 LoopSizeIndicator.qml +OnAirTrack 1.0 OnAirTrack.qml +Progression 1.0 Progression.qml +TimeAndBeatloopIndicator 1.0 TimeAndBeatloopIndicator.qml +WaveformOverview 1.0 WaveformOverview.qml +SplashOff 1.0 SplashOff.qml +StockScreen 1.0 StockScreen.qml +AdvancedScreen 1.0 AdvancedScreen.qml diff --git a/res/controllers/engine-api.d.ts b/res/controllers/engine-api.d.ts index fd87b01ab6a4..b2bcde0b9bc8 100644 --- a/res/controllers/engine-api.d.ts +++ b/res/controllers/engine-api.d.ts @@ -1,3 +1,6 @@ +declare interface QtSlot void> { + connect(callback: F): void +} /** ScriptConnectionJSProxy */ @@ -31,10 +34,96 @@ declare interface ScriptConnection { readonly isConnected: boolean; } +/** JavascriptPlayerProxy */ + +declare interface Player { + /** Track's artist or empty string if no track is loaded */ + readonly artist: string + /** Track's title or empty string if no track is loaded */ + readonly title: string + /** Track's album or empty string if no track is loaded */ + readonly album: string + /** Track's album artist or empty string if no track is loaded */ + readonly albumArtist: string + /** Track's genre or empty string if no track is loaded */ + readonly genre: string + /** Track's composer or empty string if no track is loaded */ + readonly composer: string + /** Track's grouping or empty string if no track is loaded */ + readonly grouping: string + /** Track's year of release or empty string if no track is loaded */ + readonly year: string + /** Track's number or empty string if no track is loaded */ + readonly trackNumber: string + /** Total number of tracks in track's album or empty string if no track is loaded */ + readonly trackTotal: string + + /** Emitted when the track is unloaded from the player. */ + trackUnloaded: QtSlot<() => void> + + /** + * Emitted with the new track's artist when a new track is loaded + * to the player or when the current track's metadata change. + */ + artistChanged: QtSlot<(newArtist: string) => void> + /** + * Emitted with the new track title when a new track is loaded + * to the player or when the current track's metadata change. + */ + titleChanged: QtSlot<(newTitle: string) => void> + /** + * Emitted with the new track album when a new track is loaded + * to the player or when the current track's metadata change. + */ + albumChanged: QtSlot<(newAlbum: string) => void> + /** + * Emitted with the new track album artist when a new track is loaded + * to the player or when the current track's metadata change. + */ + albumArtistChanged: QtSlot<(newAlbumArtist: string) => void> + /** + * Emitted with the new track genre when a new track is loaded + * to the player or when the current track's metadata change. + */ + genreChanged: QtSlot<(newGenre: string) => void> + /** + * Emitted with the new track's composer when a new track is loaded + * to the player or when the current track's metadata change. + */ + composerChanged: QtSlot<(newComposer: string) => void> + /** + * Emitted with the new track's grouping when a new track is loaded + * to the player or when the current track's metadata change. + */ + groupingChanged: QtSlot<(newGrouping: string) => void> + /** + * Emitted with the new track year of release when a new track is loaded + * to the player or when the current track's metadata change. + */ + yearChanged: QtSlot<(newYear: string) => void> + /** + * Emitted with the new track number when a new track is loaded + * to the player or when the current track's metadata change. + */ + trackNumberChanged: QtSlot<(newTrackNumber: string) => void> + /** + * Emitted with the new number of track in track's album when a new track + * is loaded to the player or when the current track's metadata change. + */ + trackTotalChanged: QtSlot<(newTrackTotal: string) => void> +} /** ControllerScriptInterfaceLegacy */ declare namespace engine { + /** + * Obtain the player associated with this deck. + * @param group The midi group for this deck; e.g. '[Channel1]' for deck 1. + * @returns The player providing track information and signals, or undefined + * if not player associated with this group was found. + */ + function getPlayer(group: string): Player | undefined + type SettingValue = string | number | boolean; /** * Gets the value of a controller setting diff --git a/res/keyboard/cs_CZ.kbd.cfg b/res/keyboard/cs_CZ.kbd.cfg index d12ee77db1bc..d84ede8a4b6b 100644 --- a/res/keyboard/cs_CZ.kbd.cfg +++ b/res/keyboard/cs_CZ.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/da_DK.kbd.cfg b/res/keyboard/da_DK.kbd.cfg index 9255c56f1bf8..9bfcbd54e86a 100644 --- a/res/keyboard/da_DK.kbd.cfg +++ b/res/keyboard/da_DK.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/de_CH.kbd.cfg b/res/keyboard/de_CH.kbd.cfg index b4da055bdfe1..d080b43be88a 100644 --- a/res/keyboard/de_CH.kbd.cfg +++ b/res/keyboard/de_CH.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/de_DE.kbd.cfg b/res/keyboard/de_DE.kbd.cfg index b912eef63e6b..aa5a976d4c79 100644 --- a/res/keyboard/de_DE.kbd.cfg +++ b/res/keyboard/de_DE.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/el_GR.kbd.cfg b/res/keyboard/el_GR.kbd.cfg index 4674298283f4..3571c934a130 100644 --- a/res/keyboard/el_GR.kbd.cfg +++ b/res/keyboard/el_GR.kbd.cfg @@ -145,6 +145,8 @@ vinylcontrol_cueing Ctrl+Alt+Θ FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/en_US.kbd.cfg b/res/keyboard/en_US.kbd.cfg index 3b8050bfe722..d14ab1b04797 100644 --- a/res/keyboard/en_US.kbd.cfg +++ b/res/keyboard/en_US.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/es_ES.kbd.cfg b/res/keyboard/es_ES.kbd.cfg index cfe492491ec9..dc13861bd505 100644 --- a/res/keyboard/es_ES.kbd.cfg +++ b/res/keyboard/es_ES.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/fi_FI.kbd.cfg b/res/keyboard/fi_FI.kbd.cfg index 9ec9721d1382..c8c6fc6bed2d 100644 --- a/res/keyboard/fi_FI.kbd.cfg +++ b/res/keyboard/fi_FI.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/fr_CH.kbd.cfg b/res/keyboard/fr_CH.kbd.cfg index ed65a7de8a4a..5f3cbfd398a4 100644 --- a/res/keyboard/fr_CH.kbd.cfg +++ b/res/keyboard/fr_CH.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/fr_FR.kbd.cfg b/res/keyboard/fr_FR.kbd.cfg index 7c1f50d2077c..dd16215ff720 100644 --- a/res/keyboard/fr_FR.kbd.cfg +++ b/res/keyboard/fr_FR.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/it_IT.kbd.cfg b/res/keyboard/it_IT.kbd.cfg index 46063ceb6c3e..3df1bda30e19 100644 --- a/res/keyboard/it_IT.kbd.cfg +++ b/res/keyboard/it_IT.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+U FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/keyboard/ru_RU.kbd.cfg b/res/keyboard/ru_RU.kbd.cfg index f506f422c515..38263d70fa35 100644 --- a/res/keyboard/ru_RU.kbd.cfg +++ b/res/keyboard/ru_RU.kbd.cfg @@ -141,6 +141,8 @@ vinylcontrol_cueing Ctrl+Alt+Г FileMenu_LoadDeck1 Ctrl+o FileMenu_LoadDeck2 Ctrl+Shift+O FileMenu_Quit Ctrl+q +LibraryMenu_SearchInCurrentView Ctrl+f +LibraryMenu_SearchInAllTracks Ctrl+Shift+F LibraryMenu_NewPlaylist Ctrl+n LibraryMenu_NewCrate Ctrl+Shift+N ViewMenu_ShowSkinSettings Ctrl+1 diff --git a/res/linux/org.mixxx.Mixxx.metainfo.xml b/res/linux/org.mixxx.Mixxx.metainfo.xml index 6a510f6ef358..24d72d37dcc3 100644 --- a/res/linux/org.mixxx.Mixxx.metainfo.xml +++ b/res/linux/org.mixxx.Mixxx.metainfo.xml @@ -96,6 +96,10 @@ Do not edit it manually. --> + + + +

diff --git a/res/qml/ActionButton.qml b/res/qml/ActionButton.qml new file mode 100644 index 000000000000..77e57dca5dd1 --- /dev/null +++ b/res/qml/ActionButton.qml @@ -0,0 +1,47 @@ +import QtQuick +import QtQuick.Controls 2.12 +import Qt5Compat.GraphicalEffects +import "Theme" + +AbstractButton { + id: root + enum Category { + None, + Danger, + Action + } + + property var category: ActionButton.Category.None + property alias label: labelField + + implicitHeight: 24 + background: Item { + Rectangle { + id: content + anchors.fill: parent + color: root.category == ActionButton.Category.Action ? '#2D4EA1' : root.category == ActionButton.Category.Danger ? '#7D3B3B' : '#3F3F3F' + radius: 4 + } + DropShadow { + anchors.fill: parent + source: content + horizontalOffset: 0 + verticalOffset: 0 + radius: 8.0 + color: "#80000000" + } + } + contentItem: Item { + Label { + id: labelField + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.family: Theme.fontFamily + font.capitalization: Font.AllUppercase + font.bold: true + font.pixelSize: Theme.buttonFontPixelSize + color: Theme.white + } + } +} diff --git a/res/qml/ActionPopup.qml b/res/qml/ActionPopup.qml new file mode 100644 index 000000000000..b8b30ea392e8 --- /dev/null +++ b/res/qml/ActionPopup.qml @@ -0,0 +1,69 @@ +import QtQml +import QtQuick +import QtQml.Models +import QtQuick.Layouts +import QtQuick.Controls 2.15 +import QtQuick.Shapes 1.12 +import Qt5Compat.GraphicalEffects +import "Theme" + +Popup { + id: root + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + width: 200 + + padding: 0 + margins: 0 + leftInset: 0 + + default property alias children: content.children + + contentItem: Item { + ColumnLayout { + spacing: 2 + anchors.fill: parent + anchors.leftMargin: 20 + id: content + } + } + + background: Item { + Item { + id: content3 + anchors.fill: parent + Shape { + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + implicitHeight: 20 + ShapePath { + strokeWidth: 0 + strokeColor: 'transparent' + fillColor: Theme.backgroundColor + fillRule: ShapePath.OddEvenFill + + startX: 0 + startY: 10 + PathLine { x: 20; y: 0 } + PathLine { x: 20; y: 20 } + PathLine { x: 0; y: 10 } + } + } + Rectangle { + anchors.fill: parent + anchors.right: parent.right + anchors.leftMargin: 20 + border.width: 0 + radius: 8 + color: Theme.backgroundColor + } + } + DropShadow { + anchors.fill: parent + source: content3 + horizontalOffset: 0 + verticalOffset: 0 + radius: 8.0 + color: "#80000000" + } + } +} diff --git a/res/qml/Button.qml b/res/qml/Button.qml index c01dd33c48d1..d9143853d4d7 100644 --- a/res/qml/Button.qml +++ b/res/qml/Button.qml @@ -6,116 +6,152 @@ import "Theme" AbstractButton { id: root - property color normalColor: Theme.buttonNormalColor required property color activeColor - property color pressedColor: activeColor property bool highlight: false + property color normalColor: Theme.buttonNormalColor + property color pressedColor: activeColor - implicitWidth: 52 implicitHeight: 26 + implicitWidth: 52 + + background: Item { + anchors.fill: parent + + Rectangle { + id: backgroundImage + anchors.fill: parent + color: Theme.darkGray2 + radius: 0 + } + InnerShadow { + id: bottomInnerEffect + anchors.fill: parent + color: "transparent" + horizontalOffset: -1 + radius: 8 + samples: 16 + source: backgroundImage + spread: 0.3 + verticalOffset: -1 + } + InnerShadow { + id: topInnerEffect + anchors.fill: parent + color: "transparent" + horizontalOffset: 1 + radius: 8 + samples: 16 + source: bottomInnerEffect + spread: 0.3 + verticalOffset: 1 + } + DropShadow { + id: dropEffect + anchors.fill: parent + color: Theme.darkGray + horizontalOffset: 0 + radius: 4.0 + source: topInnerEffect + verticalOffset: 0 + } + } + contentItem: Item { + anchors.fill: parent + + Glow { + id: labelGlow + anchors.fill: parent + color: label.color + radius: 1 + source: label + spread: 0.1 + } + Label { + id: label + anchors.fill: parent + color: root.normalColor + font.bold: true + font.capitalization: Font.AllUppercase + font.family: Theme.fontFamily + font.pixelSize: Theme.buttonFontPixelSize + horizontalAlignment: Text.AlignHCenter + text: root.text + verticalAlignment: Text.AlignVCenter + visible: root.text != null + } + Image { + id: image + anchors.centerIn: parent + asynchronous: true + fillMode: Image.PreserveAspectFit + height: icon.height + source: icon.source + visible: false + width: icon.width + } + ColorOverlay { + anchors.fill: image + antialiasing: true + color: root.normalColor + source: image + visible: icon.source != null + } + } states: [ State { name: "pressed" when: root.pressed PropertyChanges { + color: root.checked ? Theme.accentColor : Theme.darkGray3 target: backgroundImage - source: Theme.imgButtonPressed } - PropertyChanges { - target: label color: root.pressedColor + target: label } - PropertyChanges { target: labelGlow visible: true } - }, State { name: "active" when: (root.highlight || root.checked) && !root.pressed PropertyChanges { + color: Theme.accentColor target: backgroundImage - source: Theme.imgButton } - PropertyChanges { - target: label color: root.activeColor + target: label } - PropertyChanges { target: labelGlow visible: true } - + PropertyChanges { + color: Qt.darker(Theme.accentColor, 3) + target: bottomInnerEffect + } + PropertyChanges { + color: Qt.darker(Theme.accentColor, 3) + target: topInnerEffect + } }, State { name: "inactive" when: !root.checked && !root.highlight && !root.pressed PropertyChanges { - target: backgroundImage - source: Theme.imgButton - } - - PropertyChanges { - target: label color: root.normalColor + target: label } - PropertyChanges { target: labelGlow visible: false } } ] - - background: BorderImage { - id: backgroundImage - - anchors.fill: parent - horizontalTileMode: BorderImage.Stretch - verticalTileMode: BorderImage.Stretch - source: Theme.imgButton - - border { - top: 10 - left: 10 - right: 10 - bottom: 10 - } - } - - contentItem: Item { - anchors.fill: parent - - Glow { - id: labelGlow - - anchors.fill: parent - radius: 5 - spread: 0.1 - color: label.color - source: label - } - - Label { - id: label - - anchors.fill: parent - text: root.text - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - font.family: Theme.fontFamily - font.capitalization: Font.AllUppercase - font.bold: true - font.pixelSize: Theme.buttonFontPixelSize - color: root.normalColor - } - } } diff --git a/res/qml/ComboBox.qml b/res/qml/ComboBox.qml index b1f36f5be5ef..ecf32cf871b7 100644 --- a/res/qml/ComboBox.qml +++ b/res/qml/ComboBox.qml @@ -1,6 +1,8 @@ import "." as Skin import QtQuick 2.12 import QtQuick.Controls 2.12 +import QtQuick.Shapes +import Qt5Compat.GraphicalEffects import "Theme" ComboBox { @@ -8,6 +10,7 @@ ComboBox { property alias popupWidth: popup.width property bool clip: false + property int popupMaxItem: 3 background: Skin.EmbeddedBackground { } @@ -17,12 +20,14 @@ ComboBox { required property int index - width: parent.width highlighted: root.highlightedIndex === this.index text: root.textAt(this.index) + padding: 4 + verticalPadding: 8 contentItem: Text { text: itemDlgt.text + font: root.font color: Theme.deckTextColor elide: Text.ElideRight verticalAlignment: Text.AlignVCenter @@ -30,15 +35,16 @@ ComboBox { background: Rectangle { radius: 5 - border.width: itemDlgt.highlighted ? 1 : 0 - border.color: Theme.deckLineColor + border.width: 1 + border.color: itemDlgt.highlighted ? Theme.deckLineColor : "transparent" color: "transparent" } } + indicator.width: 20 + contentItem: Text { leftPadding: 5 - rightPadding: root.indicator.width + root.spacing text: root.displayText font: root.font color: Theme.deckTextColor @@ -49,21 +55,71 @@ ComboBox { popup: Popup { id: popup - y: root.height - width: root.width - implicitHeight: contentItem.implicitHeight + y: root.height/2 + width: root.width - root.indicator.width / 2 + x: root.indicator.width / 2 + height: root.indicator.implicitHeight*Math.min(root.popupMaxItem, root.count) + root.indicator.width + + padding: 0 + + contentItem: Item { + Item { + id: content + anchors.fill: parent + Shape { + id: arrow + anchors.top: parent.top + anchors.right: parent.right + anchors.rightMargin: 3 + width: root.indicator.width-4 + height: width + antialiasing: true + layer.enabled: true + layer.samples: 4 + ShapePath { + fillColor: Theme.embeddedBackgroundColor + strokeColor: Theme.deckBackgroundColor + strokeWidth: 2 + startX: arrow.width/2; startY: 0 + fillRule: ShapePath.WindingFill + capStyle: ShapePath.RoundCap + PathLine { x: root.indicator.width; y: root.indicator.width } + PathLine { x: 0; y: root.indicator.width } + PathLine { x: (root.indicator.width) / 2; y: 0 } + } + } + Skin.EmbeddedBackground { + anchors.topMargin: root.indicator.width-6 + anchors.fill: parent + ListView { + clip: true + + anchors.fill: parent - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: root.popup.visible ? root.delegateModel : null - currentIndex: root.highlightedIndex + bottomMargin: 0 + leftMargin: 0 + rightMargin: 0 + topMargin: 0 - ScrollIndicator.vertical: ScrollIndicator { + model: root.popup.visible ? root.delegateModel : null + currentIndex: root.highlightedIndex + + ScrollBar.vertical: ScrollBar { + policy: ScrollBar.AlwaysOn + } + } + } + } + DropShadow { + anchors.fill: parent + horizontalOffset: 0 + verticalOffset: 0 + radius: 8.0 + color: "#000000" + source: content } } - background: Skin.EmbeddedBackground { - } + background: Item {} } } diff --git a/res/qml/ControlSlider.qml b/res/qml/ControlSlider.qml index 0afd7021c0d4..82d2709e60bc 100644 --- a/res/qml/ControlSlider.qml +++ b/res/qml/ControlSlider.qml @@ -2,15 +2,19 @@ import "." as Skin import Mixxx 1.0 as Mixxx import QtQuick 2.12 -Skin.Slider { - property alias group: control.group - property alias key: control.key +Skin.Fader { + id: root + + required property string group + required property string key value: control.parameter onMoved: control.parameter = value Mixxx.ControlProxy { id: control + group: root.group + key: root.key } TapHandler { diff --git a/res/qml/DeckInfoBar.qml b/res/qml/DeckInfoBar.qml index 8dc7326dc1e4..cedb6e2ba965 100644 --- a/res/qml/DeckInfoBar.qml +++ b/res/qml/DeckInfoBar.qml @@ -11,6 +11,7 @@ Rectangle { required property string group required property int rightColumnWidth property var deckPlayer: Mixxx.PlayerManager.getPlayer(group) + property var currentTrack: deckPlayer.currentTrack property color lineColor: Theme.deckLineColor border.width: 2 @@ -26,7 +27,7 @@ Rectangle { anchors.bottom: parent.bottom anchors.margins: 5 width: height - source: root.deckPlayer.coverArtUrl + source: root.currentTrack.coverArtUrl visible: false asynchronous: true } @@ -95,7 +96,7 @@ Rectangle { Skin.EmbeddedText { id: infoBarTitle - text: root.deckPlayer.title + text: root.currentTrack.title anchors.top: infoBarHSeparator1.top anchors.left: infoBarVSeparator.left anchors.right: infoBarHSeparator1.left @@ -119,7 +120,7 @@ Rectangle { Skin.EmbeddedText { id: infoBarArtist - text: root.deckPlayer.artist + text: root.currentTrack.artist anchors.top: infoBarVSeparator.bottom anchors.left: infoBarVSeparator.left anchors.right: infoBarHSeparator1.left @@ -144,7 +145,7 @@ Rectangle { Skin.EmbeddedText { id: infoBarKey - text: root.deckPlayer.keyText + text: root.currentTrack.keyText anchors.top: infoBarHSeparator1.top anchors.bottom: infoBarVSeparator.top anchors.right: infoBarHSeparator2.left @@ -206,11 +207,11 @@ Rectangle { GradientStop { position: 0 color: { - const trackColor = root.deckPlayer.color; + const trackColor = root.currentTrack.color; if (!trackColor.valid) return Theme.deckBackgroundColor; - return Qt.darker(root.deckPlayer.color, 2); + return Qt.darker(root.currentTrack.color, 2); } } diff --git a/res/qml/Fader.qml b/res/qml/Fader.qml new file mode 100644 index 000000000000..bcae15fdde9b --- /dev/null +++ b/res/qml/Fader.qml @@ -0,0 +1,49 @@ +import Mixxx.Controls 1.0 as MixxxControls +import Qt5Compat.GraphicalEffects +import QtQuick 2.12 +import "Theme" + +MixxxControls.Slider { + id: root + + property alias fg: handleImage.source + property alias bg: backgroundImage.source + + bar: true + barMargin: 10 + implicitWidth: backgroundImage.implicitWidth + implicitHeight: backgroundImage.implicitHeight + + Image { + id: handleImage + + visible: false + source: Theme.imgSliderHandle + fillMode: Image.PreserveAspectFit + } + + handle: Item { + id: handleItem + + width: handleImage.paintedWidth + height: handleImage.paintedHeight + x: root.horizontal ? (root.visualPosition * (root.width - width)) : ((root.width - width) / 2) + y: root.vertical ? (root.visualPosition * (root.height - height)) : ((root.height - height) / 2) + + DropShadow { + source: handleImage + width: parent.width + 5 + height: parent.height + 5 + radius: 5 + verticalOffset: 5 + color: "#80000000" + } + } + + background: Image { + id: backgroundImage + + anchors.fill: parent + anchors.margins: root.barMargin + } +} diff --git a/res/qml/FormButton.qml b/res/qml/FormButton.qml new file mode 100644 index 000000000000..ac6ac3ad6ce8 --- /dev/null +++ b/res/qml/FormButton.qml @@ -0,0 +1,175 @@ +import Qt5Compat.GraphicalEffects +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import "Theme" + +AbstractButton { + id: root + + property color normalColor: Theme.white + property color backgroundColor: "#3F3F3F" + property color activeColor: Theme.deckActiveColor + property color pressedColor: activeColor + property bool highlight: false + + implicitWidth: 98 + implicitHeight: 20 + states: [ + State { + name: "pressed" + when: root.pressed + + PropertyChanges { + backgroundImage.color: root.checked ? "#3a60be" : root.backgroundColor + } + + PropertyChanges { + label.color: root.pressedColor + } + + PropertyChanges { + bottomInnerEffect.color: '#353535' + } + + PropertyChanges { + topInnerEffect.color: '#353535' + } + + PropertyChanges { + labelGlow.visible: true + } + + }, + State { + name: "active" + when: (root.highlight || root.checked) && !root.pressed + + PropertyChanges { + backgroundImage.color: "#2D4EA1" + } + + PropertyChanges { + label.color: root.activeColor + } + + PropertyChanges { + bottomInnerEffect.color: '#353535' + } + + PropertyChanges { + topInnerEffect.color: '#353535' + } + + PropertyChanges { + labelGlow.visible: true + } + + }, + State { + name: "inactive" + when: !root.checked && !root.highlight && !root.pressed + + PropertyChanges { + label.color: root.normalColor + } + + PropertyChanges { + labelGlow.visible: false + } + } + ] + + background: Item { + anchors.fill: parent + + Rectangle { + id: backgroundImage + visible: false + + anchors.fill: parent + color: root.backgroundColor + radius: 4 + } + InnerShadow { + id: bottomInnerEffect + anchors.fill: parent + radius: 8 + samples: 16 + spread: 0.3 + horizontalOffset: -1 + verticalOffset: -1 + color: "transparent" + source: backgroundImage + } + InnerShadow { + id: topInnerEffect + anchors.fill: parent + radius: 8 + samples: 16 + spread: 0.3 + horizontalOffset: 1 + verticalOffset: 1 + color: "transparent" + source: bottomInnerEffect + } + + DropShadow { + id: dropEffect + anchors.fill: parent + horizontalOffset: 0 + verticalOffset: 0 + radius: 4.0 + color: "#0E0E0E" + source: topInnerEffect + } + } + + contentItem: Item { + anchors.fill: parent + + Glow { + id: labelGlow + + anchors.fill: parent + radius: 1 + spread: 0.1 + color: label.color + source: label + } + + Label { + id: label + + visible: root.text != null + + anchors.fill: parent + text: root.text + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.family: Theme.fontFamily + font.capitalization: Font.AllUppercase + font.bold: true + font.pixelSize: Theme.buttonFontPixelSize + color: root.normalColor + } + Image { + id: image + + height: icon.height + width: icon.width + anchors.centerIn: parent + + source: icon.source + fillMode: Image.PreserveAspectFit + asynchronous: true + visible: false + } + ColorOverlay { + anchors.fill: image + source: image + visible: icon.source != null + color: root.normalColor + antialiasing: true + } + } +} diff --git a/res/qml/InputField.qml b/res/qml/InputField.qml new file mode 100644 index 000000000000..43dc1cc2ffe4 --- /dev/null +++ b/res/qml/InputField.qml @@ -0,0 +1,48 @@ +import QtQuick +import QtQuick.Controls 2.15 +import Qt5Compat.GraphicalEffects +import "Theme" + +FocusScope { + id: root + + property alias input: inputField + + Rectangle { + id: backgroundInput + radius: 4 + color: '#232323' + anchors.fill: parent + } + DropShadow { + id: dropSetting + anchors.fill: parent + horizontalOffset: 0 + verticalOffset: 0 + radius: 4.0 + color: "#000000" + source: backgroundInput + } + InnerShadow { + id: effect2 + anchors.fill: parent + source: dropSetting + spread: 0.2 + radius: 12 + samples: 24 + horizontalOffset: 0 + verticalOffset: 0 + color: "#353535" + } + TextInput { + id: inputField + anchors.fill: parent + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + anchors.margins: 7 + focus: true + clip: true + color: acceptableInput ? "#FFFFFF" : "#7D3B3B" + horizontalAlignment: TextInput.AlignLeft + } +} diff --git a/res/qml/Library.qml b/res/qml/Library.qml index 3f94320aac26..7be4f4ade0a5 100644 --- a/res/qml/Library.qml +++ b/res/qml/Library.qml @@ -1,140 +1,115 @@ +import "." as Skin import Mixxx 1.0 as Mixxx -import QtQuick 2.12 +import Qt.labs.qmlmodels +import QtQml +import QtQuick +import QtQml.Models +import QtQuick.Layouts +import QtQuick.Controls 2.15 +import QtQuick.Shapes 1.6 import "Theme" +import "Library" as LibraryComponent Item { - Rectangle { - color: Theme.deckBackgroundColor - anchors.fill: parent - - LibraryControl { - id: libraryControl - - onMoveVertical: (offset) => { - listView.moveSelectionVertical(offset); - } - onLoadSelectedTrack: (group, play) => { - listView.loadSelectedTrack(group, play); - } - onLoadSelectedTrackIntoNextAvailableDeck: (play) => { - listView.loadSelectedTrackIntoNextAvailableDeck(play); - } - onFocusWidgetChanged: { - switch (focusWidget) { - case FocusedWidgetControl.WidgetKind.LibraryView: - listView.forceActiveFocus(); - break; - } - } - } + id: root - ListView { - id: listView + property var sidebar: librarySources.sidebar() - function moveSelectionVertical(value) { - if (value == 0) - return ; - - const rowCount = model.rowCount(); - if (rowCount == 0) - return ; - - currentIndex = Mixxx.MathUtils.positiveModulo(currentIndex + value, rowCount); - } - - function loadSelectedTrackIntoNextAvailableDeck(play) { - const url = model.get(currentIndex).fileUrl; - if (!url) - return ; - - Mixxx.PlayerManager.loadLocationUrlIntoNextAvailableDeck(url, play); - } - - function loadSelectedTrack(group, play) { - const url = model.get(currentIndex).fileUrl; - if (!url) - return ; - - const player = Mixxx.PlayerManager.getPlayer(group); - if (!player) - return ; + LibraryComponent.SourceTree { + id: librarySources + } - player.loadTrackFromLocationUrl(url, play); - } + SplitView { + id: librarySplitView + orientation: Qt.Horizontal + anchors.fill: parent - anchors.fill: parent - anchors.margins: 10 + handle: Rectangle { + id: handleDelegate + implicitWidth: 8 + implicitHeight: 8 + color: Theme.panelSplitterBackground clip: true - keyNavigationWraps: true - highlightMoveDuration: 250 - highlightResizeDuration: 50 - model: Mixxx.Library.model - Keys.onPressed: (event) => { - switch (event.key) { - case Qt.Key_Enter: - case Qt.Key_Return: - listView.loadSelectedTrackIntoNextAvailableDeck(false); - break; + property color handleColor: SplitHandle.pressed || SplitHandle.hovered ? Theme.panelSplitterHandleActive : Theme.panelSplitterHandle + property int handleSize: SplitHandle.pressed || SplitHandle.hovered ? 6 : 5 + + ColumnLayout { + anchors.centerIn: parent + Repeater { + model: 3 + Rectangle { + width: handleSize + height: handleSize + radius: handleSize + color: handleColor + } } } - delegate: Item { - id: itemDlgt - - required property int index - required property url fileUrl - required property string artist - required property string title - - implicitWidth: listView.width - implicitHeight: 30 - - Text { - anchors.verticalCenter: parent.verticalCenter - text: itemDlgt.artist + " - " + itemDlgt.title - color: (listView.currentIndex == itemDlgt.index && listView.activeFocus) ? Theme.blue : Theme.deckTextColor + containmentMask: Item { + x: (handleDelegate.width - width) / 2 + width: 8 + height: librarySplitView.height + } + } - Behavior on color { - ColorAnimation { - duration: listView.highlightMoveDuration + SplitView { + id: sideBarSplitView + SplitView.minimumWidth: 100 + SplitView.preferredWidth: 415 + SplitView.maximumWidth: 600 + + orientation: Qt.Vertical + + handle: Rectangle { + id: handleDelegate + implicitWidth: 8 + implicitHeight: 8 + color: Theme.panelSplitterBackground + clip: true + property color handleColor: SplitHandle.pressed || SplitHandle.hovered ? Theme.panelSplitterHandleActive : Theme.panelSplitterHandle + property int handleSize: SplitHandle.pressed || SplitHandle.hovered ? 6 : 5 + + RowLayout { + anchors.centerIn: parent + Repeater { + model: 3 + Rectangle { + width: handleSize + height: handleSize + radius: handleSize + color: handleColor } } } - Image { - id: dragItem - - Drag.active: dragArea.drag.active - Drag.dragType: Drag.Automatic - Drag.supportedActions: Qt.CopyAction - Drag.mimeData: { - "text/uri-list": itemDlgt.fileUrl, - "text/plain": itemDlgt.fileUrl - } - anchors.fill: parent + containmentMask: Item { + x: (handleDelegate.width - width) / 2 + height: 8 + width: sideBarSplitView.width } + } + LibraryComponent.Browser { + SplitView.minimumHeight: 200 + SplitView.preferredHeight: 500 + SplitView.fillHeight: true - MouseArea { - id: dragArea - - anchors.fill: parent - drag.target: dragItem - onPressed: { - listView.forceActiveFocus(); - listView.currentIndex = itemDlgt.index; - parent.grabToImage((result) => { - dragItem.Drag.imageSource = result.url; - }); - } - onDoubleClicked: listView.loadSelectedTrackIntoNextAvailableDeck(false) - } + model: root.sidebar } - highlight: Rectangle { - border.color: listView.activeFocus ? Theme.blue : Theme.deckTextColor - border.width: 1 - color: "transparent" + Skin.PreviewDeck { + SplitView.minimumHeight: 100 + SplitView.preferredHeight: 100 + SplitView.maximumHeight: 200 } } + LibraryComponent.TrackList { + SplitView.fillHeight: true + + // FIXME: this is necessary to prevent the header label to render outside of the table when horizontally scrolling: https://github.com/mixxxdj/mixxx/pull/14514#issuecomment-3311914346 + clip: true + + model: root.sidebar.tracklist + } } } diff --git a/res/qml/Library/Browser.qml b/res/qml/Library/Browser.qml new file mode 100644 index 000000000000..3e28934e6b8a --- /dev/null +++ b/res/qml/Library/Browser.qml @@ -0,0 +1,223 @@ +import ".." as Skin +import Mixxx 1.0 as Mixxx +import Qt.labs.qmlmodels +import QtQml +import QtQuick +import QtQml.Models +import QtQuick.Layouts +import QtQuick.Controls 2.15 +import QtQuick.Shapes 1.12 +import Qt5Compat.GraphicalEffects +import "../Theme" + +Rectangle { + id: root + + required property var model + readonly property var featureSelection: ItemSelectionModel {} + + color: Theme.backgroundColor + + Component.onCompleted: { + root.model.activate(root.model.index(0, 0)) + } + + Rectangle { + anchors.fill: parent + anchors.topMargin: 7 + anchors.leftMargin: 7 + anchors.rightMargin: 25 + anchors.bottomMargin: 40 + color: Theme.sunkenBackgroundColor + + ColumnLayout { + anchors.fill: parent + spacing: 0 + ScrollView { + Layout.fillHeight: true + Layout.fillWidth: true + + TreeView { + id: featureView + Layout.fillWidth: true + + clip: true + + model: root.model + + selectionModel: featureSelection + + delegate: FocusScope { + required property string label + required property var icon + + readonly property real indentation: 40 + readonly property real padding: 5 + + // Assigned to by TreeView: + required property TreeView treeView + required property bool isTreeNode + required property bool expanded + required property int hasChildren + required property int depth + required property int row + required property int column + required property bool current + // FIXME The signature for that function has changed after Qt 6.4.2 (currently shipped on Ubuntu 24.04) + // See https://github.com/mixxxdj/mixxx/pull/14514#issuecomment-2770811094 for further details + readonly property var index: treeView.modelIndex(column, row) + + implicitWidth: treeView.width + implicitHeight: depth == 0 ? 42 : 35 + + // Rotate indicator when expanded by the user + // (requires TreeView to have a selectionModel) + property Animation indicatorAnimation: NumberAnimation { + target: indicator + property: "rotation" + from: expanded ? 0 : 90 + to: expanded ? 90 : 0 + duration: 100 + easing.type: Easing.OutQuart + } + TableView.onPooled: indicatorAnimation.complete() + TableView.onReused: if (current) indicatorAnimation.start() + onExpandedChanged: indicator.rotation = expanded ? 90 : 0 + + Rectangle { + id: background + anchors.fill: parent + color: depth == 0 ? Theme.darkGray3 : 'transparent' + + MouseArea { + id: rowMouseArea + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + onClicked: (event) => { + treeView.selectionModel.select(treeView.selectionModel.model.index(row, 0), ItemSelectionModel.Rows | ItemSelectionModel.Select | ItemSelectionModel.Clear | ItemSelectionModel.Current); + treeView.model.activate(index) + if (isTreeNode && hasChildren) { + treeView.toggleExpanded(row) + } + event.accepted = true + } + } + + Rectangle { + width: 25 + anchors.left: parent.left + anchors.leftMargin: 10 + 15 * depth + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.right: parent.right + color: current ? Theme.midGray : 'transparent' + + Repeater { + id: lineIcon + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + model: !!icon ? 1 : 0 + Image { + visible: depth == 0 && icon + source: icon + height: 25 + width: 25 + } + } + + Label { + id: indicator + Layout.preferredWidth: indicator.implicitWidth + visible: isTreeNode && hasChildren + color: Theme.textColor + text: "▶" + + anchors { + left: parent.left + verticalCenter: lineIcon.bottom + } + } + + Label { + id: labelItem + anchors.left: parent.left + anchors.leftMargin: depth == 0 && row == 0 ? 10 : 34 + anchors.verticalCenter: parent.verticalCenter + clip: true + font.weight: depth == 0 ? Font.Bold : Font.Medium + font.pixelSize: 14 + text: label + color: Theme.textColor + } + Item { + visible: rowMouseArea.containsMouse && isTreeNode && hasChildren + id: newItem + height: parent.height + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: 10 + } + Rectangle { + width: 30 + height: parent.height + anchors.centerIn: parent + gradient: Gradient { + orientation: Gradient.Horizontal + + GradientStop { + position: 1 + color: Theme.sunkenBackgroundColor + } + + GradientStop { + position: 0 + color: 'transparent' + } + } + } + Rectangle { + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.rightMargin: 5 + width: 20 + height: 20 + border.width: 2 + border.color: Theme.white + radius: 20 + color: 'transparent' + Shape { + anchors.fill: parent + anchors.margins: 4 + ShapePath { + strokeWidth: 2 + fillColor: Theme.white + capStyle: ShapePath.RoundCap + + startX: 6 + startY: 0 + PathLine { x: 6; y: 12 } + PathLine { x: 6; y: 8 } + } + ShapePath { + strokeWidth: 2 + fillColor: Theme.white + capStyle: ShapePath.RoundCap + + startX: 0 + startY: 6 + PathLine { y: 6; x: 12 } + PathLine { y: 6; x: 8 } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/res/qml/Library/Cell.qml b/res/qml/Library/Cell.qml new file mode 100644 index 000000000000..d93e57a0e765 --- /dev/null +++ b/res/qml/Library/Cell.qml @@ -0,0 +1,104 @@ +import Qt5Compat.GraphicalEffects +import QtQuick +import QtQuick.Layouts +import "../Theme" + +Rectangle { + id: root + + readonly property alias dragImage: dragImageEffect + + anchors.fill: parent + + color: selected ? Theme.accent : (row % 2 == 0 ? Theme.sunkenBackgroundColor : Theme.backgroundColor) + + Drag.dragType: Drag.Automatic + Drag.supportedActions: Qt.CopyAction + Drag.mimeData: { + "text/uri-list": file_url.toString(), + "text/plain": file_url.toString(), + } + Item { + id: dragImageSource + width: 190 + height: 85 + visible: false + Rectangle { + color: Theme.sunkenBackgroundColor + anchors { + left: parent.left + right: parent.right + top: parent.top + bottom: parent.bottom + margins: 5 + } + radius: 12 + RowLayout { + anchors.fill: parent + Image { + id: cover + Layout.fillHeight: true + Layout.preferredWidth: cover_art ? 75 : 0 + fillMode: Image.PreserveAspectFit + source: cover_art + clip: true + asynchronous: true + } + ColumnLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Text { + text: track ? track.title : 'Unknown title' + color: Theme.textColor + } + Text { + text: track ? track.artist : 'Unknown artist' + color: Theme.midGray + } + } + } + Rectangle { + width: 20 + anchors { + top: parent.top + right: parent.right + bottom:parent.bottom + } + gradient: Gradient { + orientation: Gradient.Horizontal + + GradientStop { + position: 1 + color: Theme.darkGray + } + + GradientStop { + position: 0 + color: 'transparent' + } + } + } + } + } + DropShadow { + id: dragImageEffect + visible: false + anchors.fill: dragImageSource + source: dragImageSource + horizontalOffset: 0 + verticalOffset: 0 + radius: 10.0 + color: "#80000000" + } + + Rectangle { + id: border + color: Theme.darkGray2 + width: 1 + anchors { + top: parent.top + bottom: parent.bottom + right: parent.right + } + } +} diff --git a/res/qml/LibraryControl.qml b/res/qml/Library/Control.qml similarity index 68% rename from res/qml/LibraryControl.qml rename to res/qml/Library/Control.qml index 353e4b8bb21e..a5da4c133810 100644 --- a/res/qml/LibraryControl.qml +++ b/res/qml/Library/Control.qml @@ -1,3 +1,5 @@ +import ".." as Skin +import "." as LibraryComponent import Mixxx 1.0 as Mixxx import QtQuick 2.12 @@ -10,17 +12,17 @@ Item { signal loadSelectedTrack(string group, bool play) signal loadSelectedTrackIntoNextAvailableDeck(bool play) - FocusedWidgetControl { + Skin.FocusedWidgetControl { id: focusedWidgetControl - Component.onCompleted: this.value = FocusedWidgetControl.WidgetKind.LibraryView + Component.onCompleted: this.value = Skin.FocusedWidgetControl.WidgetKind.LibraryView } Mixxx.ControlProxy { group: "[Library]" key: "GoToItem" onValueChanged: (value) => { - if (value != 0 && root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView) + if (value != 0 && root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView) root.loadSelectedTrackIntoNextAvailableDeck(false); } } @@ -29,7 +31,7 @@ Item { group: "[Playlist]" key: "LoadSelectedIntoFirstStopped" onValueChanged: (value) => { - if (value != 0 && root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView) + if (value != 0 && root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView) root.loadSelectedTrackIntoNextAvailableDeck(false); } } @@ -39,7 +41,7 @@ Item { key: "SelectTrackKnob" onValueChanged: (value) => { if (value != 0) { - root.focusWidget = FocusedWidgetControl.WidgetKind.LibraryView; + root.focusWidget = Skin.FocusedWidgetControl.WidgetKind.LibraryView; root.moveVertical(value); } } @@ -50,7 +52,7 @@ Item { key: "SelectPrevTrack" onValueChanged: (value) => { if (value != 0) { - root.focusWidget = FocusedWidgetControl.WidgetKind.LibraryView; + root.focusWidget = Skin.FocusedWidgetControl.WidgetKind.LibraryView; root.moveVertical(-1); } } @@ -61,7 +63,7 @@ Item { key: "SelectNextTrack" onValueChanged: (value) => { if (value != 0) { - root.focusWidget = FocusedWidgetControl.WidgetKind.LibraryView; + root.focusWidget = Skin.FocusedWidgetControl.WidgetKind.LibraryView; root.moveVertical(1); } } @@ -71,7 +73,7 @@ Item { group: "[Library]" key: "MoveVertical" onValueChanged: (value) => { - if (value != 0 && root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView) + if (value != 0 && root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView) root.moveVertical(value); } } @@ -80,7 +82,7 @@ Item { group: "[Library]" key: "MoveUp" onValueChanged: (value) => { - if (value != 0 && root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView) + if (value != 0 && root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView) root.moveVertical(-1); } } @@ -89,7 +91,7 @@ Item { group: "[Library]" key: "MoveDown" onValueChanged: (value) => { - if (value != 0 && root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView) + if (value != 0 && root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView) root.moveVertical(1); } } @@ -104,11 +106,11 @@ Item { Instantiator { model: numDecksControl.value - delegate: LibraryControlLoadSelectedTrackHandler { + delegate: LibraryComponent.ControlLoadSelectedTrackHandler { required property int index group: "[Channel" + (index + 1) + "]" - enabled: root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView + enabled: root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView onLoadTrackRequested: (play) => { root.loadSelectedTrack(this.group, play); } @@ -125,11 +127,11 @@ Item { Instantiator { model: numPreviewDecksControl.value - delegate: LibraryControlLoadSelectedTrackHandler { + delegate: LibraryComponent.ControlLoadSelectedTrackHandler { required property int index group: "[PreviewDeck" + (index + 1) + "]" - enabled: root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView + enabled: root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView onLoadTrackRequested: (play) => { root.loadSelectedTrack(this.group, play); } @@ -146,11 +148,11 @@ Item { Instantiator { model: numSamplersControl.value - delegate: LibraryControlLoadSelectedTrackHandler { + delegate: LibraryComponent.ControlLoadSelectedTrackHandler { required property int index group: "[Sampler" + (index + 1) + "]" - enabled: root.focusWidget == FocusedWidgetControl.WidgetKind.LibraryView + enabled: root.focusWidget == Skin.FocusedWidgetControl.WidgetKind.LibraryView onLoadTrackRequested: (play) => { root.loadSelectedTrack(this.group, play); } diff --git a/res/qml/LibraryControlLoadSelectedTrackHandler.qml b/res/qml/Library/ControlLoadSelectedTrackHandler.qml similarity index 100% rename from res/qml/LibraryControlLoadSelectedTrackHandler.qml rename to res/qml/Library/ControlLoadSelectedTrackHandler.qml diff --git a/res/qml/Library/SourceTree.qml b/res/qml/Library/SourceTree.qml new file mode 100644 index 000000000000..470a03da7101 --- /dev/null +++ b/res/qml/Library/SourceTree.qml @@ -0,0 +1,194 @@ +import QtQuick +import Mixxx 1.0 as Mixxx +import "." as LibraryComponent +import "../Theme" + +Mixxx.LibrarySourceTree { + id: root + + component DefaultDelegate: LibraryComponent.Cell { + id: cell + readonly property var caps: capabilities + // FIXME: https://bugreports.qt.io/browse/QTBUG-111789 + Binding on Drag.active { + value: dragArea.drag.active + // This delays the update until the even queue is cleared + // preventing any potential oscillations causing a loop + delayed: true + } + + LibraryComponent.Track { + id: dragArea + anchors.fill: parent + capabilities: cell.caps + + onPressed: { + if (pressedButtons == Qt.LeftButton) { + tableView.selectionModel.selectRow(row); + parent.dragImage.grabToImage((result) => { + parent.Drag.imageSource = result.url; + }, Qt.size(parent.dragImage.width, parent.dragImage.height)); + } + } + onDoubleClicked: { + tableView.selectionModel.selectRow(row); + tableView.loadSelectedTrackIntoNextAvailableDeck(false); + } + } + + Text { + id: value + anchors.fill: parent + anchors.leftMargin: 15 + font.pixelSize: 14 + text: display ?? "" + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + color: Theme.textColor + } + } + + defaultColumns: [ + Mixxx.TrackListColumn { + preferredWidth: 110 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.Album + + delegate: Rectangle { + color: decoration + implicitHeight: 30 + + Image { + anchors.fill: parent + fillMode: Image.PreserveAspectCrop + source: cover_art + clip: true + asynchronous: true + } + } + }, + // FIXME: WaveformOverview is currently disabled due to performance limitation. Like for the legacy UI, a cache likely needs to be implemented to help + // Mixxx.TrackListColumn { + // label: qsTr("Preview") + // fillSpan: 3 + // preferredWidth: 300 + // columnIdx: Mixxx.TrackListColumn.SQLColumns.Title + + // delegate: LibraryCell { + // // implicitHeight: 30 + // anchors.fill: parent + + // readonly property var trackProxy: track + + // Drag.active: dragArea.drag.active + // Drag.dragType: Drag.Automatic + // Drag.supportedActions: Qt.CopyAction + // Drag.mimeData: { + // "text/uri-list": file_url, + // "text/plain": file_url + // } + + // LibraryComponent.Track { + // id: dragArea + // anchors.fill: parent + // capabilities: parent.capabilities + + // onPressed: { + // if (pressedButtons == Qt.LeftButton) { + // tableView.selectionModel.selectRow(row); + // parent.dragImage.grabToImage((result) => { + // parent.Drag.imageSource = result.url; + // }); + // } else { + // } + // } + // onDoubleClicked: { + // tableView.selectionModel.selectRow(row); + // tableView.loadSelectedTrackIntoNextAvailableDeck(false); + // } + // } + + // Mixxx.WaveformOverview { + // anchors.fill: parent + // channels: Mixxx.WaveformOverview.Channels.LeftChannel + // renderer: Mixxx.WaveformOverview.Renderer.Filtered + // colorHigh: Theme.white + // colorMid: Theme.blue + // colorLow: Theme.green + // track: trackProxy + // } + // Rectangle { + // id: border + // color: Theme.darkGray2 + // width: 1 + // anchors { + // top: parent.top + // bottom: parent.bottom + // right: parent.right + // } + // } + // } + + // }, + Mixxx.TrackListColumn { + label: qsTr("Title") + fillSpan: 3 + columnIdx: Mixxx.TrackListColumn.SQLColumns.Title + + delegate: DefaultDelegate { } + }, + Mixxx.TrackListColumn { + label: qsTr("Artist") + fillSpan: 2 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.Artist + delegate: DefaultDelegate { } + }, + Mixxx.TrackListColumn { + label: qsTr("Album") + fillSpan: 1 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.Album + delegate: DefaultDelegate { } + }, + Mixxx.TrackListColumn { + label: qsTr("Year") + preferredWidth: 80 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.Year + delegate: DefaultDelegate { } + }, + Mixxx.TrackListColumn { + label: qsTr("Bpm") + preferredWidth: 60 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.Bpm + delegate: DefaultDelegate { } + }, + Mixxx.TrackListColumn { + label: qsTr("Key") + preferredWidth: 70 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.Key + delegate: DefaultDelegate { } + }, + Mixxx.TrackListColumn { + label: qsTr("File Type") + preferredWidth: 70 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.FileType + delegate: DefaultDelegate { } + }, + Mixxx.TrackListColumn { + label: qsTr("Bitrate") + preferredWidth: 70 + + columnIdx: Mixxx.TrackListColumn.SQLColumns.Bitrate + delegate: DefaultDelegate { } + } + ] + Mixxx.LibraryAllTrackSource { + label: qsTr("All...") + columns: root.defaultColumns + } +} diff --git a/res/qml/Library/Track.qml b/res/qml/Library/Track.qml new file mode 100644 index 000000000000..253c4a188b9e --- /dev/null +++ b/res/qml/Library/Track.qml @@ -0,0 +1,131 @@ +import Mixxx 1.0 as Mixxx +import QtQuick +import QtQuick.Controls 2.15 +import "../Theme" + +MouseArea { + id: dragArea + + required property var capabilities + + readonly property var library: Mixxx.Library + + drag.target: value + acceptedButtons: Qt.LeftButton | Qt.RightButton + onClicked: (mouse) => { + if (mouse.button === Qt.RightButton) + contextMenu.popup() + } + onPressAndHold: (mouse) => { + if (mouse.source === Qt.MouseEventNotSynthesized) + contextMenu.popup() + } + + function hasCapabilities(caps) { + return (dragArea.capabilities & caps) == caps; + } + + Menu { + id: contextMenu + title: qsTr("File") + + Menu { + title: qsTr("Load to") + enabled: { + hasCapabilities(Mixxx.LibraryTrackListModel.Capability.LoadToDeck) || + hasCapabilities(Mixxx.LibraryTrackListModel.Capability.LoadToSampler) || + hasCapabilities(Mixxx.LibraryTrackListModel.Capability.LoadToPreviewDeck) + } + + Menu { + id: loadToDeckMenu + title: qsTr("Deck") + enabled: hasCapabilities(Mixxx.LibraryTrackListModel.Capability.LoadToDeck) + Instantiator { + model: 4 + delegate: MenuItem { + text: qsTr("Deck %1").arg(modelData+1) + onTriggered: Mixxx.PlayerManager.getPlayer(`[Channel${modelData+1}]`).loadTrack(track) + } + + onObjectAdded: (index, object) => loadToDeckMenu.insertItem(index, object) + onObjectRemoved: (index, object) => loadToDeckMenu.removeItem(object) + } + } + + Menu { + title: qsTr("Sampler") + enabled: hasCapabilities(Mixxx.LibraryTrackListModel.Capability.LoadToSampler) + } + + // Instantiator { + // id: recentFilesInstantiator + // model: settings.recentFiles + // delegate: MenuItem { + // text: settings.displayableFilePath(modelData) + // onTriggered: loadFile(modelData) + // } + + // onObjectAdded: (index, object) => recentFilesMenu.insertItem(index, object) + // onObjectRemoved: (index, object) => recentFilesMenu.removeItem(object) + // } + } + + Menu { + id: addToPlaylistMenu + title: qsTr("Add to playlists") + enabled: { + hasCapabilities(Mixxx.LibraryTrackListModel.Capability.AddToTrackSet) + } + + MenuSeparator {} + + MenuItem { + enabled: false // TODO implement + text: qsTr("Create New Playlist") + } + } + + Menu { + id: addToCrateMenu + title: qsTr("Crates") + enabled: { + hasCapabilities(Mixxx.LibraryTrackListModel.Capability.AddToTrackSet) + } + + MenuSeparator {} + + MenuItem { + enabled: false // TODO implement + text: qsTr("Create New Crate") + } + } + + Menu { + id: analyzeMenu + title: qsTr("Analyze") + enabled: { + hasCapabilities(Mixxx.LibraryTrackListModel.Capability.EditMetadata)|| + hasCapabilities(Mixxx.LibraryTrackListModel.Capability.Analyze) + } + MenuItem { + text: qsTr("Analyze") + onTriggered: { + library.analyze(track) + } + } + MenuItem { + enabled: false // TODO implement + text: qsTr("Reanalyze") + } + MenuItem { + enabled: false // TODO implement + text: qsTr("Reanalyze (constant BPM)") + } + MenuItem { + enabled: false // TODO implement + text: qsTr("Reanalyze (variable BPM)") + } + } + } +} diff --git a/res/qml/Library/TrackList.qml b/res/qml/Library/TrackList.qml new file mode 100644 index 000000000000..715b7a6323e4 --- /dev/null +++ b/res/qml/Library/TrackList.qml @@ -0,0 +1,295 @@ +import ".." as Skin +import "." as LibraryComponent +import Mixxx 1.0 as Mixxx +import Qt.labs.qmlmodels +import QtQml +import QtQuick +import QtQml.Models +import QtQuick.Layouts +import QtQuick.Controls 2.15 +import "../Theme" + +Rectangle { + id: root + + color: Theme.darkGray + + required property var model + + LibraryComponent.Control { + id: libraryControl + + onMoveVertical: (offset) => { + view.selectionModel.moveSelectionVertical(offset); + } + onLoadSelectedTrack: (group, play) => { + view.loadSelectedTrack(group, play); + } + onLoadSelectedTrackIntoNextAvailableDeck: (play) => { + view.loadSelectedTrackIntoNextAvailableDeck(play); + } + onFocusWidgetChanged: { + switch (focusWidget) { + case Skin.FocusedWidgetControl.WidgetKind.LibraryView: + view.forceActiveFocus(); + break; + } + } + } + + HorizontalHeaderView { + id: horizontalHeader + + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: 5 + syncView: view + + property int sortingColumn: -1 + property var sortingOrder: Qt.Descending + + delegate: Item { + id: column + required property string display + required property int index + + implicitHeight: columnName.contentHeight + 5 + implicitWidth: columnName.contentWidth + 5 + + MouseArea { + id: columnMouseHandler + anchors.fill: parent + acceptedButtons: Qt.LeftButton + onClicked: { + if (horizontalHeader.sortingColumn == index) { + horizontalHeader.sortingOrder = horizontalHeader.sortingOrder == Qt.DescendingOrder ? Qt.AscendingOrder : Qt.DescendingOrder + } else { + horizontalHeader.sortingColumn = index + horizontalHeader.sortingOrder = Qt.AscendingOrder + } + view.model.sort(horizontalHeader.sortingColumn, horizontalHeader.sortingOrder); + } + } + + Text { + id: columnName + + text: display + anchors.fill: parent + anchors.leftMargin: 15 + elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + font.family: Theme.fontFamily + font.capitalization: Font.Capitalize + font.pixelSize: 12 + font.weight: Font.Medium + color: Theme.textColor + } + + Item { + anchors { + left: parent.left + leftMargin: 5 + top: parent.top + bottom: parent.bottom + } + Label { + id: sortIndicator + + visible: horizontalHeader.sortingColumn == index + + text: "▶" + rotation: horizontalHeader.sortingOrder == Qt.AscendingOrder ? 90 : -90 + + anchors.centerIn: parent + elide: Text.ElideRight + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + font.family: Theme.fontFamily + font.capitalization: Font.AllUppercase + font.bold: true + font.pixelSize: Theme.buttonFontPixelSize + color: "red" + } + } + Rectangle { + id: columnResizer + color: Theme.darkGray2 + width: 1 + anchors { + top: parent.top + bottom: parent.bottom + right: parent.right + } + MouseArea { + id: columnResizeHandler + + property int sizeOffset: 0 + + anchors.fill: parent + preventStealing: true + drag { + target: parent + axis: Drag.XAxis + threshold: 2 + onActiveChanged: { + if (!drag.active && columnResizeHandler.sizeOffset !== 0) { + view.model.columns[index].preferredWidth = column.width + columnResizeHandler.sizeOffset = 0 + view.updateColumnSize() + view.forceLayout() + } + } + } + cursorShape: Qt.SizeHorCursor + onMouseXChanged: { + if (drag.active) { + column.width += mouseX + sizeOffset += mouseX + } + } + } + } + } + } + + TableView { + id: view + + function loadSelectedTrackIntoNextAvailableDeck(play) { + const urls = this.selectionModel.selectedTrackUrls(); + if (urls.length == 0) + return ; + + Mixxx.PlayerManager.loadLocationUrlIntoNextAvailableDeck(urls[0], play); + } + + function loadSelectedTrack(group, play) { + const urls = this.selectionModel.selectedTrackUrls(); + if (urls.length == 0) + return ; + + player.loadTrackFromLocationUrl(urls[0], play); + } + + ScrollBar.vertical: ScrollBar { + policy: ScrollBar.AlwaysOn + } + + anchors.top: horizontalHeader.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.margins: 5 + clip: true + reuseItems: true + Keys.onUpPressed: this.selectionModel.moveSelectionVertical(-1) + Keys.onDownPressed: this.selectionModel.moveSelectionVertical(1) + Keys.onEnterPressed: this.loadSelectedTrackIntoNextAvailableDeck(false) + Keys.onReturnPressed: this.loadSelectedTrackIntoNextAvailableDeck(false) + model: root.model + function updateColumnSize() { + usedWidth = 0; + dynamicColumnCount = 0; + if (model == null) { + return; + } + for (let c = 0; c < model.columns.length; c++) { + if (model.columns[c].hidden) { + continue + } else if (model.columns[c].preferredWidth > 0) { + usedWidth += model.columns[c].preferredWidth; + } else { + dynamicColumnCount += model.columns[c].fillSpan || 1 + } + } + } + Component.onCompleted: this.updateColumnSize() + onModelChanged: this.updateColumnSize() + + property int usedWidth: 0 + property int dynamicColumnCount: 0 + + columnWidthProvider: function(column) { + const columnDef = view.model.columns[column] + if (columnDef.hidden) { + return 0; + } + if (columnDef.preferredWidth >= 0) { + return columnDef.preferredWidth; + } + const span = columnDef.fillSpan || 1; + return span * (view.width - view.usedWidth) / view.dynamicColumnCount; + } + + selectionModel: ItemSelectionModel { + function selectRow(row) { + const rowCount = this.model.rowCount(); + if (rowCount == 0) { + this.clear(); + return ; + } + const newRow = Mixxx.MathUtils.positiveModulo(row, rowCount); + this.select(this.model.index(newRow, 0), ItemSelectionModel.Rows | ItemSelectionModel.Select | ItemSelectionModel.Clear | ItemSelectionModel.Current); + } + + function moveSelectionVertical(value) { + if (value == 0) + return ; + + const selected = this.selectedIndexes; + const oldRow = (selected.length == 0) ? 0 : selected[0].row; + this.selectRow(oldRow + value); + } + + function selectedTrackUrls() { + return this.selectedIndexes.map((index) => { + return this.model.getUrl(index.row); + }); + } + model: view.model + } + + delegate: Item { + id: item + required property bool selected + required property color decoration + required property var display + required property var track + required property string file_url + required property url cover_art + required property int row + + implicitHeight: 30 + + Loader { + id: loader + anchors.fill: parent + property bool selected: item.selected + property color decoration: item.decoration + property var display: item.display + property var track: item.track + property url file_url: item.file_url + property url cover_art: item.cover_art + property int row: item.row + property var tableView: view + property var capabilities: root.model ? root.model.getCapabilities() : Mixxx.LibraryTrackListModel.Capability.None + sourceComponent: delegate + focus: true + + onLoaded: { + // Workaround needed for WaveformOverview column to load the data + // if (track) + // Mixxx.Library.analyze(track) + } + } + // Workaround needed for WaveformOverview column to load the data + // TableView.onReused: { + // if (track) + // Mixxx.Library.analyze(track) + // } + } + } +} diff --git a/res/qml/Mixxx/Controls/WaveformOverview.qml b/res/qml/Mixxx/Controls/WaveformOverview.qml index 1c217986451a..0ed78fea1562 100644 --- a/res/qml/Mixxx/Controls/WaveformOverview.qml +++ b/res/qml/Mixxx/Controls/WaveformOverview.qml @@ -6,8 +6,9 @@ Mixxx.WaveformOverview { id: root required property string group + readonly property var player: Mixxx.PlayerManager.getPlayer(root.group) - player: Mixxx.PlayerManager.getPlayer(root.group) + track: player.currentTrack Mixxx.ControlProxy { id: trackLoadedControl diff --git a/res/qml/OrientationToggleButton.qml b/res/qml/OrientationToggleButton.qml index 280cd3baf443..556c69fc2bec 100644 --- a/res/qml/OrientationToggleButton.qml +++ b/res/qml/OrientationToggleButton.qml @@ -13,7 +13,7 @@ Item { implicitWidth: 56 implicitHeight: 26 - Skin.Slider { + Skin.Fader { id: orientationSlider anchors.fill: parent @@ -28,7 +28,7 @@ Item { stepSize: 1 value: control.value orientation: Qt.Horizontal - snapMode: Slider.SnapOnRelease + snapMode: Fader.SnapOnRelease onMoved: { // The slider's `value` is not updated until after the move ended. const val = valueAt(visualPosition); diff --git a/res/qml/PreviewDeck.qml b/res/qml/PreviewDeck.qml new file mode 100644 index 000000000000..d7e22d7cd8cd --- /dev/null +++ b/res/qml/PreviewDeck.qml @@ -0,0 +1,42 @@ +import "." as Skin +import Mixxx 1.0 as Mixxx +import Qt.labs.qmlmodels +import QtQml +import QtQuick +import QtQml.Models +import QtQuick.Layouts +import QtQuick.Controls 2.15 +import QtQuick.Shapes 1.6 +import "Theme" + +Rectangle { + id: root + + color: 'transparent' + + Shape { + anchors.fill: parent + ShapePath { + strokeColor: Theme.midGray + strokeWidth: 1 + fillColor: "transparent" + capStyle: ShapePath.RoundCap + + startX: 0 + startY: 0 + PathLine { x: width; y: 0 } + PathLine { x: width; y: height } + PathLine { x: 0; y: height } + PathLine { x: 0; y: 0 } + PathLine { x: width; y: height } + PathLine { x: 0; y: height } + PathLine { x: width; y: 0 } + } + } + + Text { + anchors.centerIn: parent + color: 'white' + text: "PreviewDeck placeholder" + } +} diff --git a/res/qml/Sampler.qml b/res/qml/Sampler.qml index df39c786ed06..936d683990c7 100644 --- a/res/qml/Sampler.qml +++ b/res/qml/Sampler.qml @@ -9,13 +9,14 @@ Rectangle { required property string group property bool minimized: false property var deckPlayer: Mixxx.PlayerManager.getPlayer(group) + property var currentTrack: deckPlayer.currentTrack color: { - const trackColor = root.deckPlayer.color; + const trackColor = root.currentTrack.color; if (!trackColor.valid) return Theme.backgroundColor; - return Qt.darker(root.deckPlayer.color, 2); + return Qt.darker(root.currentTrack.color, 2); } implicitHeight: gainKnob.height + 10 Drag.active: dragArea.drag.active @@ -25,7 +26,7 @@ Rectangle { let data = { "mixxx/player": group }; - const trackLocationUrl = deckPlayer.trackLocationUrl; + const trackLocationUrl = root.currentTrack.trackLocationUrl; if (trackLocationUrl) data["text/uri-list"] = trackLocationUrl; @@ -83,7 +84,7 @@ Rectangle { Text { id: label - text: root.deckPlayer.title + text: root.currentTrack.title anchors.top: embedded.top anchors.left: playButton.right anchors.right: embedded.right diff --git a/res/qml/Settings.qml b/res/qml/Settings.qml new file mode 100644 index 000000000000..8a9d39eb9a96 --- /dev/null +++ b/res/qml/Settings.qml @@ -0,0 +1,276 @@ +import "." as Skin +import Mixxx 1.0 as Mixxx +import QtQuick 2.12 +import QtQuick.Controls +import QtQuick.Layouts +import QtQuick.Shapes +import Qt5Compat.GraphicalEffects +import "Theme" + +Popup { + id: root + + property int activeCategoryIndex: 0 + property list sections: ["SoundHardware", "Library", "Controller", "Interface", "MixerEffect", "AutoDJ", "Broadcast", "Recording", "Analyzer", "StatsPerformance"] + + readonly property var manager: managerItem + + background: Rectangle { + anchors.fill: parent + color: Theme.darkGray2 + opacity: parent.radius < 0 ? Math.max(0.1, 1 + parent.radius / 8) : 1 + radius: 8 + } + contentItem: Item { + anchors.centerIn: parent + height: parent.height - 40 + width: parent.width - 40 + + RowLayout { + anchors.fill: parent + spacing: 0 + + Rectangle { + Layout.fillHeight: true + Layout.preferredWidth: 280 + border.color: Theme.darkGray3 + border.width: 6 + color: Theme.darkGray + + ColumnLayout { + anchors.fill: parent + anchors.margins: 6 + spacing: 0 + + Rectangle { + id: searchSetting + + property bool active: false + property alias input: searchInput + + Layout.fillWidth: true + color: Theme.midGray + height: 30 + + Text { + id: searchInputPlaceholder + anchors.verticalCenter: parent.verticalCenter + color: Theme.white + text: 'Search...' + visible: !parent.active + } + TextInput { + id: searchInput + anchors.verticalCenter: parent.verticalCenter + visible: parent.active + width: parent.width + + onActiveFocusChanged: { + parent.active = activeFocus; + } + onTextEdited: { + root.manager.search(text); + } + } + TapHandler { + onTapped: { + parent.active = true; + searchInput.forceActiveFocus(); + } + } + } + ListView { + id: categoryList + Layout.fillHeight: true + Layout.fillWidth: true + clip: true + focus: true + model: sectionProperties + visible: !searchSetting.active + + delegate: Rectangle { + required property int index + required property var label + + color: ListView.isCurrentItem ? Theme.darkGray3 : Theme.darkGray2 + height: 38 + width: ListView.view.width + + Image { + id: handleImage + anchors.left: parent.left + anchors.leftMargin: 8 + anchors.verticalCenter: parent.verticalCenter + fillMode: Image.PreserveAspectFit + height: 24 + source: "images/gear.svg" + visible: false + } + ColorOverlay { + anchors.fill: handleImage + antialiasing: true + color: parent.ListView.isCurrentItem ? Theme.accentColor : Theme.midGray + source: handleImage + } + Text { + anchors.left: handleImage.right + anchors.leftMargin: 8 + anchors.verticalCenter: parent.verticalCenter + color: Theme.white + font.bold: parent.ListView.isCurrentItem + text: label + } + TapHandler { + onTapped: { + categoryList.currentIndex = index; + } + } + } + } + ListView { + id: settingResultList + Layout.fillHeight: true + Layout.fillWidth: true + clip: true + focus: true + model: root.manager.model + visible: searchSetting.active + + delegate: Rectangle { + required property var display + required property int index + required property var toolTip + required property var whatsThis + + color: Theme.darkGray2 + height: 40 + width: ListView.view.width + + ColumnLayout { + anchors.fill: parent + anchors.margins: 4 + + Text { + Layout.fillWidth: true + Layout.preferredHeight: implicitHeight + color: Theme.white + text: searchSetting.input.text ? display.replace(searchSetting.input.text, `${searchSetting.input.text}`) : display + textFormat: Text.RichText + } + Text { + Layout.fillWidth: true + Layout.preferredHeight: implicitHeight + color: Theme.midGray + font.pixelSize: 10 + text: searchSetting.input.text ? whatsThis.replace(searchSetting.input.text, `${searchSetting.input.text}`) : whatsThis + textFormat: Text.RichText + } + } + TapHandler { + onTapped: { + for (let setting of toolTip) { + setting.activated(); + } + parent.forceActiveFocus(); + } + } + } + } + } + } + ColumnLayout { + Layout.fillHeight: true + Layout.fillWidth: true + + Text { + Layout.alignment: Qt.AlignHCenter + Layout.preferredHeight: 36 + color: Theme.white + font.pixelSize: 16 + font.weight: Font.DemiBold + text: "Settings" + } + Rectangle { + id: tabBar + + readonly property var categoryItem: categoriesLoader.itemAt(categoryList.currentIndex) ? categoriesLoader.itemAt(categoryList.currentIndex).item : null + readonly property int selectedIndex: categoryItem && categoryItem.selectedIndex !== undefined ? categoryItem.selectedIndex : 0 + readonly property var tabs: categoryItem ? categoryItem.tabs : [] + + Layout.fillWidth: true + Layout.preferredHeight: 30 + color: Theme.darkGray3 + visible: tabs?.length > 0 + + RowLayout { + anchors.fill: parent + + Repeater { + model: tabBar.tabs + + Skin.Button { + required property int index + required property string modelData + + Layout.alignment: Qt.AlignHCenter + Layout.preferredHeight: 22 + Layout.preferredWidth: parent.width / (tabBar.tabs.length + 2) + activeColor: Theme.white + checked: tabBar.selectedIndex == index + text: modelData + + onPressed: { + categoriesLoader.itemAt(categoryList.currentIndex).item.selectedIndex = index; + } + } + } + } + } + + Mixxx.SettingParameterManager { + id: managerItem + Layout.fillHeight: true + Layout.fillWidth: true + Layout.leftMargin: 20 + + Repeater { + id: categoriesLoader + model: root.sections + + Loader { + id: category + + required property int index + required property var modelData + + anchors.fill: parent + source: `Settings/${modelData}.qml` + visible: categoryList.currentIndex == index + + // asynchronous: true // Unsupported + onLoaded: { + for (let i = sectionProperties.count; i < index; i++) + sectionProperties.append({}); + sectionProperties.set(index, { + "label": category.item.label + }); + } + + Connections { + function onActivated() { + categoryList.currentIndex = index; + } + + target: category.item + } + } + } + } + } + } + } + + ListModel { + id: sectionProperties + } +} diff --git a/res/qml/Settings/Analyzer.qml b/res/qml/Settings/Analyzer.qml new file mode 100644 index 000000000000..f56980a576e9 --- /dev/null +++ b/res/qml/Settings/Analyzer.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "Analyzer" + + Mixxx.SettingParameter { + label: "A grey square" + + Rectangle { + color: 'grey' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/AudioConnection.qml b/res/qml/Settings/AudioConnection.qml new file mode 100644 index 000000000000..5dac3d13b7a5 --- /dev/null +++ b/res/qml/Settings/AudioConnection.qml @@ -0,0 +1,173 @@ +import QtQuick 2.12 +import QtQuick.Shapes +import "../Theme" + +Item { + id: root + + enum Flags { + AboutToDelete = 1, + CannotConnect = 2 + } + + required property var source + required property var router + property var sink: undefined + property var target: source.mapToItem(router, source.width/2, source.height/2) + + property bool system: false + property bool vertical: false + property bool existing: false + property int flags: 0 + + readonly property bool ready: !!source && !!sink + + visible: !source || !sink || source.visible && sink.visible + + z: 0 + + states: [ + State { + name: "warning" + when: root.flags + + PropertyChanges { + line.strokeColor: Theme.warningColor + } + + PropertyChanges { + root.z: 50 + } + }, + State { + name: "system" + when: root.system + + PropertyChanges { + line.strokeColor: Theme.darkGray2 + } + }, + State { + name: "existing" + when: root.existing + + PropertyChanges { + line.strokeColor: Theme.midGray + } + }, + State { + name: "setting" + when: root.sink === undefined + + PropertyChanges { + line.strokeColor: Theme.accentColor + } + + PropertyChanges { + root.z: 50 + } + }, + State { + name: "set" + when: root.sink != undefined && !root.existing + + PropertyChanges { + line.strokeColor: Theme.accentColor + } + } + ] + + property var sourcePosition: source.mapToItem(router, source.width/2, source.height/2) + property var sinkPosition: sink ? sink.mapToItem(router, sink.width/2, sink.height/2) : target + + onSinkPositionChanged: { + scale.xScale = sourcePosition.x > sinkPosition.x ? -1 : 1 + scale.yScale = sourcePosition.y > sinkPosition.y ? -1 : 1 + } + + onSourcePositionChanged: { + scale.xScale = sourcePosition.x > sinkPosition.x ? -1 : 1 + scale.yScale = sourcePosition.y > sinkPosition.y ? -1 : 1 + } + + x: sourcePosition.x + y: sourcePosition.y + width: Math.max(2, Math.abs(sourcePosition.x - sinkPosition.x)) + height: Math.max(2, Math.abs(sourcePosition.y - sinkPosition.y)) + + onSinkChanged: { + if (sink != null && source != null) { + // swap entities if the connection was made backward + if (source.type !== "source") { + let swap = root.source + root.source = root.sink + root.sink = swap + return; + } + target = null + if (sink.connections !== undefined) { + sink.connections.add(root) + } else { + sink.connection = root + } + if (source.connections !== undefined) { + source.connections.add(root) + } else { + source.connection = root + } + } + } + onSourceChanged: { + if (sink != null && source != null) { + // swap entities if the connection was made backward + if (source.type !== "source") { + let swap = root.source + root.source = root.sink + root.sink = swap + return; + } + target = null + if (sink.connections !== undefined) { + sink.connections.add(root) + } else { + sink.connection = root + } + if (source.connections !== undefined) { + source.connections.add(root) + } else { + source.connection = root + } + } + } + onTargetChanged: { + if (!source) + return + scale.xScale = sourcePosition.x > sinkPosition.x ? -1 : 1 + scale.yScale = sourcePosition.y > sinkPosition.y ? -1 : 1 + } + + Shape { + anchors.fill: parent + // anchors.centerIn: parent + antialiasing: true + layer.enabled: true + layer.samples: 16 + layer.textureMirroring: ShaderEffectSource.MirrorHorizontally + ShapePath { + id: line + strokeColor: Theme.midGray + strokeWidth: 2 + fillColor: "transparent" + capStyle: ShapePath.RoundCap + joinStyle: ShapePath.BevelJoin + + startX: 1 + startY: 1 + PathQuad { x: root.width * 0.5; y: root.height * 0.5; controlX: root.width * (root.vertical ? 0 : 0.3); controlY : root.height * (root.vertical ? 0.3 : 0) } + PathQuad { x: root.width; y: root.height; controlX: root.width * (root.vertical ? 1 : 0.7); controlY : root.height * (root.vertical ? 0.7 : 1) } + } + } + transform: Scale { + id: scale + } +} diff --git a/res/qml/Settings/AudioEntity.qml b/res/qml/Settings/AudioEntity.qml new file mode 100644 index 000000000000..d797ba96ef13 --- /dev/null +++ b/res/qml/Settings/AudioEntity.qml @@ -0,0 +1,326 @@ +import QtQuick 2.12 +import QtQuick.Controls +import QtQuick.Layouts +import ".." as Skin +import "../Theme" + +Item { + id: root + + signal connect(var entity) + signal disconnect(var entity) + + signal scrolled() + signal gatewayReady(string address, Item node) + + required property string name + required property string group + property list gateways: [] + property bool advanced: false + + implicitHeight: 54 + 32 * gatewayRepeater.visibleChannels + width: 135 + z: 10 + + onGatewaysChanged: { + gatewayRepeater.visibleChannels = root.gateways.length + } + + property alias handleSource: handleSourceEdge + property alias handleSink: handleSinkEdge + + property var metaType: null + Rectangle { + id: content + radius: 15 + color: Theme.darkGray3 + anchors.fill: parent + anchors.margins: 8 + Column { + id: gatewayColumn + anchors.fill: parent + padding: 0 + spacing: 4 + + Item { + height: nameLabel.implicitHeight + 18 + width: parent.width + Label { + id: nameLabel + anchors.fill: parent + anchors.margins: 9 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignTop + text: name + color: Theme.white + elide: Text.ElideRight + font.pixelSize: 15 + fontSizeMode: Text.Fit + } + } + + Repeater { + id: gatewayRepeater + model: root.gateways + property int visibleChannels: root.gateways.length + Repeater { + id: node + + required property int index + readonly property string label: root.gateways[index].name + readonly property string address: root.gateways[index].address || root.gateways[index].name + readonly property var channels: root.gateways[index].channels || [0, 1] + readonly property var instances: root.gateways[index].instances || 1 + readonly property string type: root.gateways[index].type + readonly property bool advanced: root.gateways[index].advanced || false + readonly property bool required: !!root.gateways[index].required + + model: node.channels.length/2 * instances + + property list channelAssignation: [...Array(node.channels.length/2)].map((_, i) => i) + + function availableEdge() { + for (let i = 0; i < node.count; i++) { + let current = node.itemAt(i); + if (current.edgeItem.connection) continue; + return i; + } + } + function assignedEdges() { + let assignation = {} + for (let i = 0; i < node.count; i++) { + let current = node.itemAt(i); + if (current.edgeItem.connection) { + assignation[node.channelAssignation[i]] = current.edgeItem.connection + } + } + return assignation + } + property int connectionCount: 0 + Item { + id: channel + + required property int index + property alias edgeItem: edge + property bool counted: channel.index == 0 + + visible: (edgeItem.connection?.ready || index == node.connectionCount) && (!node.advanced || root.advanced) + onVisibleChanged: { + if (counted != channel.visible) + gatewayRepeater.visibleChannels += channel.visible ? 1 : -1 + counted = channel.visible + } + + width: parent.width + height: 28 + RowLayout { + anchors { + left: parent.left + right: parent.right + leftMargin: 15 + rightMargin: 15 + } + id: inputLabel + Label { + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + Layout.preferredHeight: 28 + verticalAlignment: Text.AlignVCenter + text: node.instances == 1 ? label : `${label} #${index+1}` + color: Theme.white + elide: Text.ElideRight + font.pixelSize: 10 + fontSizeMode: Text.Fit + } + // Item { + // Layout.fillWidth: true + // } + Skin.ComboBox { + Layout.minimumWidth: implicitWidth + id: channelSelector + property int previousIndex: node.channelAssignation[channel.index] ?? 0 + visible: node.count > 1 && node.channels.length > 2 + spacing: 2 + clip: true + + font.pixelSize: 12 + model: { + return [...Array(node.channels.length/2)].map((e, i) => `Ch ${i * 2 + node.channels[0] + 1} - ${i * 2 + node.channels[0] + 2}`); + } + currentIndex: node.channelAssignation[channel.index] ?? 0 + onActivated: (activatedIndex) => { + let alreadyAssigned = node.channelAssignation.indexOf(activatedIndex) + node.channelAssignation[alreadyAssigned] = previousIndex + node.channelAssignation[channel.index] = activatedIndex + } + } + } + Rectangle { + id: edge + property var entity: root + property var advanced: node.advanced + property int instance: index / (node.channels.length/2) + property string type: node.type + property string group: root.group + property var address: node.address + + anchors.horizontalCenter: type == "source" ? parent.right : parent.left + anchors.verticalCenter: inputLabel.verticalCenter + + property var connection: null + property bool counted: false + property bool connecting: false + + onConnectionChanged: { + if (counted != !!edge.connection) + node.connectionCount += edge.connection ? 1 : -1 + counted = !!edge.connection + } + + function updateConnectionPosition() { + if (edge.connection && edge.connection.source == edge) { + edge.connection.sourcePosition = edge.mapToItem(edge.connection.router, edge.width/2, edge.height/2) + } else if (edge.connection && edge.connection.sink == edge) { + edge.connection.sinkPosition = edge.mapToItem(edge.connection.router, edge.width/2, edge.height/2) + } + } + + Connections { + target: root + function onScrolled() { + edge.updateConnectionPosition() + } + function onXChanged() { + edge.updateConnectionPosition() + } + function onYChanged() { + edge.updateConnectionPosition() + } + } + + Connections { + target: channel + function onHeightChanged() { + edge.updateConnectionPosition() + } + function onYChanged() { + edge.updateConnectionPosition() + } + } + + color: Theme.midGray + width: 10 + height: width + radius: width/2 + z: 100 + + states: [ + State { + name: "idle" + }, + State { + name: "warning" + when: (!edge.connection && node.required) || (edge.connection && edge.connection.state == "warning") + + PropertyChanges { + edge.width: 15 + edge.color: Theme.warningColor + } + }, + State { + name: "hidden" + when: edge.connection && !edge.connection.visible + + PropertyChanges { + channel.opacity: 0.5 + } + }, + State { + name: "setting" + when: edge.connection && !edge.connection.existing || edge.connecting + + PropertyChanges { + edge.width: 15 + edge.color: Theme.accentColor + } + } + ] + + MouseArea { + id: edgeMouseArea + hoverEnabled: edge.connection != null && edge.connection.visible + anchors.fill: parent + onPressed: { + if (edge.connection && edge.connection.flags & AudioConnection.Flags.AboutToDelete) { + root.disconnect(edge.connection) + } else if (edge.connection == null) { + root.connect(parent) + } + } + onEntered: { + if (edge.connection) { + edge.connection.flags |= AudioConnection.Flags.AboutToDelete + } + } + onExited: { + if (edge.connection) { + edge.connection.flags &= ~AudioConnection.Flags.AboutToDelete + } + } + } + } + } + Component.onCompleted: { + root.gatewayReady(address, node) + } + } + } + } + AudioEntityEdge { + id: handleSourceEdge + entity: root + type: "source" + + Connections { + target: root + + function onImplicitHeightChanged() { + handleSourceEdge.updateConnectionPosition() + } + function onXChanged() { + handleSourceEdge.updateConnectionPosition() + } + function onYChanged() { + handleSourceEdge.updateConnectionPosition() + } + } + + anchors.horizontalCenter: handleSourceEdge.vertical ? parent.horizontalCenter : parent.right + anchors.verticalCenter: handleSourceEdge.vertical ? parent.bottom : undefined + anchors.top: handleSourceEdge.vertical ? undefined :parent.top + anchors.topMargin: handleSourceEdge.vertical ? 0 :16 + } + AudioEntityEdge { + id: handleSinkEdge + entity: root + type: "sink" + + Connections { + target: root + + function onImplicitHeightChanged() { + handleSinkEdge.updateConnectionPosition() + } + function onXChanged() { + handleSinkEdge.updateConnectionPosition() + } + function onYChanged() { + handleSinkEdge.updateConnectionPosition() + } + } + + anchors.horizontalCenter: handleSinkEdge.vertical ? parent.horizontalCenter : parent.left + anchors.verticalCenter: handleSinkEdge.vertical ? parent.top : parent.verticalCenter + } + } +} diff --git a/res/qml/Settings/AudioEntityEdge.qml b/res/qml/Settings/AudioEntityEdge.qml new file mode 100644 index 000000000000..45b67f584b52 --- /dev/null +++ b/res/qml/Settings/AudioEntityEdge.qml @@ -0,0 +1,24 @@ +import QtQuick 2.12 + +Rectangle { + id: root + property bool vertical: false + required property var entity + required property string type + + property var connections: new Set() + + color: 'transparent' + width: 10 + height: 10 + + function updateConnectionPosition() { + for (let connection of connections) { + if (connection && connection.source == root) { + connection.sourcePosition = root.mapToItem(connection.router, root.width/2, root.height/2) + } else if (connection && connection.sink == root) { + connection.sinkPosition = root.mapToItem(connection.router, root.width/2, root.height/2) + } + } + } +} diff --git a/res/qml/Settings/AudioRouter.qml b/res/qml/Settings/AudioRouter.qml new file mode 100644 index 000000000000..5b60bf879258 --- /dev/null +++ b/res/qml/Settings/AudioRouter.qml @@ -0,0 +1,797 @@ +import Mixxx 1.0 as Mixxx +import QtQuick 2 +import QtQuick.Controls +import QtQuick.Layouts +import "../Theme" + +Rectangle { + id: root + color: '#0E0E0E' + radius: 5 + clip: true + + enum Mode { + Simple, + Advanced, + Legacy + } + + property var connections: new Set() + property var selectedTab: "" + property var newConnection: null + readonly property var mode: modeChoice.selected == "simple" ? AudioRouter.Mode.Simple : modeChoice.selected == "legacy" ? AudioRouter.Mode.Legacy : AudioRouter.Mode.Advanced + + property int hiddenConnections: 2 + + onModeChanged: { + updateHiddenConnectionCount() + } + + property var manager: Mixxx.SoundManager + + property Component connectionEdge: Qt.createComponent("AudioConnection.qml") + + property var inputDevices: new Object() + property var outputDevices: new Object() + + property var system: new Object() + property bool hasChanges: false + + property alias multiSoundcard: multiSoundcardChoice + + property var inputs: new Object() + property var outputs: new Object() + + function updateHiddenConnectionCount() { + root.hiddenConnections = 0 + if (root.mode == AudioRouter.Mode.Simple) { + for (let connection of root.connections) { + if (connection.source?.advanced || connection.sink?.advanced) { + root.hiddenConnections += 1 + } + } + } + } + + // FriendlyName aims to parse the raw device name extract it in such a way that it gets grouped within the UI + // Note that naming structures changes across API and devices. This function is experimental and aims to be extended with more logic + // If not extraction works, it will fallback to return the device name as "card name" (a.k.a a group on the router) and a single channel names "Default" + function friendlyName(api, rawName) { + // "api" value can be found in https://github.com/PortAudio/portaudio + switch (api) { + // TODO unimplemented, need some data or platform to test with + // case "JACK Audio Connection Kit": + // case "OSS": + // case "iOS Audio": + // case "Core Audio": + // case "AudioIO": + // case "AudioScience HPI": + // case "PulseAudio": + // case "sndio": + + case "ALSA": { + const hwAlsa = / (\(hw:\d+,\d+\))/; + let components = rawName.split(':') + let cardName = components.shift().trim() + let deviceName = components.length > 0 ? components.join(":").trim().replace(hwAlsa, "") : "Default" + return [cardName, deviceName] + } + case "MME": { + // API truncates the name to 31 chars + if (rawName.length === 31 && rawName.substr(-1) !== ')') { + const match = /(.+) \((.*)/.exec(rawName) + if (match) { + const [_, deviceName, cardName, ..._loopback] = match + return [cardName, deviceName] + } + break + } + } + case "ASIO": + case "Windows DirectSound": + case "Windows WASAPI": { + const match = /(.+) \((.*)\)( \[Loopback\])?/.exec(rawName) + if (match) { + const [_, deviceName, cardName, ..._loopback] = match + return [cardName, deviceName] + } + break + } + case "Windows WDM-KS": { + const match = /(.+) \((.*)\)( \[Loopback\])?/.exec(rawName.replace(/\r?\n/g, '')) + if (match) { + let [_, deviceName, cardName, ..._loopback] = match + if (cardName.startsWith("@System32\\drivers")) { + let components = cardName.split(";") + cardName = components[components.length - 1] + } + return [cardName, deviceName] + } + break + } + } + + return [rawName, ""] + } + + function generateDeviceList(api, devices, existing) { + console.log(`generating device list for: ${JSON.stringify(devices)}`) + let cards = {} + // cardName -> deviceName -> duplicateCount + let deviceNameDuplicate = {} + for (let device of devices) { + let [cardName, deviceName] = root.friendlyName(api, device.displayName) + cardName = !cardName ? "Unnamed card" : cardName + deviceName = !deviceName ? "Default" : deviceName + console.log(`cardName=${cardName},deviceName=${deviceName}`) + if (cards[cardName] === undefined) { + cards[cardName] = { + gateways: { + [deviceName]: { + name: deviceName, + node: existing[cardName]?.gateways?.[deviceName]?.node ?? null, + device: device, + channels: device.channelCount + } + }, + channelCount: device.channelCount, + } + continue + } + console.log(`cards=${cards[cardName]}`) + + // If the group (card name) has already a "Default" channel, we add the new channel as "Default #N" for better UX + if (cards[cardName].gateways[deviceName] !== undefined) { + if (deviceNameDuplicate[cardName] === undefined) { + deviceNameDuplicate[cardName] = { + [deviceName]: 1 + } + } else { + deviceNameDuplicate[cardName][deviceName] = (deviceNameDuplicate[cardName][deviceName] ?? 0) + 1 + } + deviceName = `${deviceName} #${deviceNameDuplicate[cardName][deviceName] + 1}` + } + + cards[cardName].gateways[deviceName] = { + name: deviceName, + node: existing[cardName]?.gateways?.[deviceName]?.node ?? null, + device: device, + channels: device.channelCount + } + cards[cardName].channelCount += device.channelCount + } + return cards + } + + function update(api) { + console.log(`Using sound api: ${api} ${typeof api}`) + root.inputs = generateDeviceList(api, manager.availableInputDevices(api), root.inputs) + root.outputs = generateDeviceList(api, manager.availableOutputDevices(api), root.outputs) + root.loadConnections() + } + + function registerInputEdge(device, address, node) { + root.inputs[device].gateways[address].node = node + if (root.inputs[device].gateways[address].delayedConnections) { + addExistingConnection(node, root.inputs[device].gateways[address].delayedConnections) + root.inputs[device].gateways[address].delayedConnections = undefined + } + } + function registerOutputEdge(device, address, node) { + root.outputs[device].gateways[address].node = node + if (root.outputs[device].gateways[address].delayedConnections) { + addExistingConnection(node, root.outputs[device].gateways[address].delayedConnections) + root.outputs[device].gateways[address].delayedConnections = undefined + } + } + + readonly property list audioTypeMap: [ + {entity: "Mixer",channel: "Main"}, // Main, + {entity: "Mixer",channel: "PFL"}, // Headphones, + {entity: "Mixer",channel: "Booth"}, // Booth, + {entity: "Mixer",channel: "Bus"}, // Bus, + {entity: "Deck",channel: "Output"}, // Deck, + {entity: "Deck",channel: "Vinyl Control"}, // VinylControl, + {entity: "Mixer",channel: "Microphone"}, // Microphone, + {entity: "Mixer",channel: "Auxiliary"}, // Auxiliary, + {entity: "Record",channel: "Additional input"}, // RecordBroadcast, + ] + + function addExistingConnection(node, connections) { + if (!connections) return; + for (let connection of connections) { + let typeDef = audioTypeMap[connection.type] + let source = root.system[typeDef.entity].gateways[typeDef.channel][connection.index].edgeItem + let availableEdge = node.availableEdge() + if (!source || availableEdge === null) { + console.error("Unable to get the source and sink of the existing connection!", source, availableEdge) + continue; + } + let connectionItem = root.connectionEdge.createObject(root, { + "existing": true, + "router": root, + "source": source, + "sink": node.itemAt(availableEdge).edgeItem, + }) + root.connections.add(connectionItem) + node.channelAssignation[availableEdge] = connection.channelGroup / 2 + } + root.updateHiddenConnectionCount() + } + + function loadConnections() { + while (root.connections.size) { + let connection = root.connections.keys().next().value; + root.entityOnDisconnect(connection) + } + + for (let device of Object.keys(root.outputs)) { + for (let address of Object.keys(root.outputs[device].gateways)) { + let gateway = root.outputs[device].gateways[address] + let node = gateway.node + let connections = root.outputs[device].gateways[address].device.connections(Mixxx.SoundManager) + + if (!connections) continue; + if (node) { + addExistingConnection(node, connections) + } else if (connections.length) { + root.outputs[device].gateways[address].delayedConnections = connections + } + } + } + + for (let device of Object.keys(root.inputs)) { + for (let address of Object.keys(root.inputs[device].gateways)) { + let gateway = root.inputs[device].gateways[address] + let node = gateway.node + let connections = root.inputs[device].gateways[address].device.connections(Mixxx.SoundManager) + console.log("INPUT", gateway, node, connections) + + if (!connections) continue; + if (node) { + addExistingConnection(node, connections) + } else if (connections.length) { + root.inputs[device].gateways[address].delayedConnections = connections + } + } + } + + root.hasChanges = false + } + + MouseArea { + enabled: root.newConnection != null + anchors.fill: parent + hoverEnabled: true + preventStealing: true + onPositionChanged: (mouse) => { + if (root.newConnection) { + root.newConnection.target = Qt.point(mouse.x, mouse.y) + } + } + onExited: { + if (root.newConnection) { + root.newConnection.destroy(); + root.newConnection.source.connection = null + root.newConnection = null + } + } + onPressed: { + if (root.newConnection) { + root.newConnection.destroy(); + root.newConnection.source.connection = null + root.newConnection = null + } + } + } + + function entityOnConnect(edge) { + if (root.newConnection != null) { + if (edge.type == root.newConnection.source.type || edge.group == root.newConnection.source.group || edge.entity == root.newConnection.source.entity) { + root.newConnection.flags |= AudioConnection.Flags.CannotConnect + return; + } + root.newConnection.source.connecting = false + if (root.newConnection.source == edge) { + root.newConnection.destroy(); + } else { + root.newConnection.sink = edge + root.connections.add(root.newConnection) + root.hasChanges = true + } + root.newConnection = null + } else { + root.newConnection = connectionEdge.createObject(root, {"router": root, "source": edge}); + } + } + + function entityOnDisconnect(connection) { + var sink = connection.sink; + var source = connection.source; + root.connections.delete(connection) + if (connection.existing) + root.hasChanges = true + + if (source != null) { + if (source.connection !== undefined) { + source.connection = null + } else { + source.connections.delete(connection) + } + } + + if (sink != null) { + if (sink.connection !== undefined) { + sink.connection = null + } else { + sink.connections.delete(connection) + } + } + connection.destroy() + } + + RowLayout { + anchors.fill: parent + + ColumnLayout { + visible: root.mode == AudioRouter.Mode.Advanced + Layout.fillHeight: true + Layout.minimumWidth: 200 + Layout.maximumWidth: 220 + Text { + Layout.alignment: Qt.AlignHCenter + Layout.margins: 15 + text: "Inputs" + color: '#626262' + font.pixelSize: 14 + } + + ListView { + id: inputList + Layout.margins: 15 + Layout.fillHeight: true + Layout.fillWidth: true + model: Object.keys(root.inputs) + reuseItems: false + spacing: 15 + delegate: AudioEntity { + id: inputEntity + required property var modelData + width: ListView.view.width + + name: modelData + group: "external" + gateways: { + let channels = [] + let maxChannelPerInput = 4 / root.inputs[modelData].channelCount; + for (let item of Object.values(root.inputs[modelData].gateways)) { + let channel = 0 + for (; channel < item.channels && channel <= maxChannelPerInput; channel += 2) { + channels.push({ + name: item.name, + address: item.address, + channels: [channel, channel+1], + type: "source", + advanced: true + }); + } + if (channel < item.channels) { + let start = channels[channels.length-1].channels[0] + let channelPicker = [...Array(item.channels - start)] + channels[channels.length-1].channels = channelPicker.map((_, i) => start+i) + } + } + return channels; + } + advanced: root.mode == AudioRouter.Mode.Advanced + + onGatewayReady: (address, node) => { + root.registerInputEdge(modelData, address, node) + } + + onConnect: (point) => root.entityOnConnect(point) + onDisconnect: (point) => root.entityOnDisconnect(point) + Connections { + target: inputList + function onContentYChanged() { + inputEntity.scrolled() + } + function onXChanged() { + inputEntity.scrolled() + } + function onYChanged() { + inputEntity.scrolled() + } + function onWidthChanged() { + inputEntity.scrolled() + } + function onHeightChanged() { + inputEntity.scrolled() + } + } + } + ScrollBar.vertical: ScrollBar { + policy: ScrollBar.AlwaysOn + anchors.right: inputList.left + anchors.rightMargin: 6 + } + } + } + Rectangle { + visible: root.mode == AudioRouter.Mode.Advanced + Layout.fillHeight: true + Layout.preferredWidth: 1 + color: '#626262' + } + ColumnLayout { + id: mainCanvas + RowLayout { + Layout.topMargin: 6 + Layout.bottomMargin: 3 + Item { + Layout.fillWidth: true + } + RatioChoice { + id: modeChoice + options: [ + "simple", + !root.hiddenConnections ? "advanced" : "advanced (!)", + "legacy" + ] + onOptionsChanged: { + if (modeChoice.selected.startsWith("advanced")) { + modeChoice.selected = options[1] + } + } + tooltips: !root.hiddenConnections ? [] : [null, `${root.hiddenConnections} connection${root.hiddenConnections > 1 ? 's' : ''} hidden\nUse the advanced mode to view them`, null] + } + } + Item { + Layout.fillHeight: true + } + RowLayout { + Layout.bottomMargin: 3 + RatioChoice { + id: multiSoundcardChoice + normalizedWidth: false + options: [ + "experimental", + "default", + "disabled" + ] + tooltips: [ + "No delay", + "Long delay", + "Short delay" + ] + + onSelectedChanged: { + root.hasChanges = true + } + + Mixxx.SettingParameter { + label: "Multi-Soundcard Synchronization" + } + } + Text { + text: "Multi-Soundcard Synchronization" + color: Theme.white + font.pixelSize: 14 + } + Item { + Layout.fillWidth: true + } + } + } + Rectangle { + visible: root.mode != AudioRouter.Mode.Legacy + Layout.fillHeight: true + Layout.preferredWidth: 1 + color: '#626262' + } + + ColumnLayout { + visible: root.mode != AudioRouter.Mode.Legacy + Layout.fillHeight: true + Layout.minimumWidth: 200 + Layout.maximumWidth: 220 + Text { + Layout.alignment: Qt.AlignHCenter + Layout.margins: 15 + text: "Outputs" + color: '#626262' + font.pixelSize: 14 + } + + ListView { + id: outputList + Layout.margins: 15 + Layout.fillHeight: true + Layout.fillWidth: true + model: Object.keys(root.outputs) + reuseItems: false + spacing: 15 + cacheBuffer: Math.max(0, contentHeight) // Disable lazy loading to make sure all item are loaded and can be bounded to connection + delegate: AudioEntity { + id: outputEntity + required property var modelData + width: ListView.view.width + + name: modelData + group: "external" + gateways: { + let channels = [] + let maxChannelPerOutput = 4 / root.outputs[modelData].channelCount; + for (let item of Object.values(root.outputs[modelData].gateways)) { + let channel = 0 + for (; channel < item.channels && channel <= maxChannelPerOutput; channel += 2) { + channels.push({ + name: item.name, + address: item.address, + channels: [channel, channel+1], + type: "sink" + }); + } + if (channel < item.channels) { + let start = channels[channels.length-1].channels[0] + let channelPicker = [...Array(item.channels - start)] + channels[channels.length-1].channels = channelPicker.map((_, i) => start+i) + } + } + return channels; + } + + onGatewayReady: (address, node) => { + root.registerOutputEdge(modelData, address, node) + } + + onConnect: (point) => root.entityOnConnect(point) + onDisconnect: (point) => root.entityOnDisconnect(point) + Connections { + target: outputList + function onContentYChanged() { + outputEntity.scrolled() + } + function onXChanged() { + outputEntity.scrolled() + } + function onYChanged() { + outputEntity.scrolled() + } + function onWidthChanged() { + outputEntity.scrolled() + } + function onHeightChanged() { + outputEntity.scrolled() + } + } + } + ScrollBar.vertical: ScrollBar { + policy: ScrollBar.AlwaysOn + anchors.left: outputList.right + anchors.leftMargin: 6 + } + } + + Item { + Layout.fillHeight: true + } + } + } + + Repeater { + id: decks + model: 4 + AudioEntity { + visible: root.mode != AudioRouter.Mode.Legacy + required property int index + id: deck + x: root.width / (root.mode == AudioRouter.Mode.Advanced ? 4 : 5) + y: (root.height / 5) * (1 + index) - implicitHeight / 2 + + name: `Deck ${index+1}` + group: "internal" + gateways: [{ + name: "Output", + type: "source", + advanced: true + }, { + name: "Vinyl Control", + type: "sink", + advanced: true + } + ] + advanced: root.mode == AudioRouter.Mode.Advanced + + onConnect: (point) => root.entityOnConnect(point) + onDisconnect: (point) => root.entityOnDisconnect(point) + + onGatewayReady: (address, node) => { + if (!root.system["Deck"]) { + root.system["Deck"] = { + gateways: {} + } + } + if (!root.system["Deck"].gateways[address]) { + root.system["Deck"].gateways[address] = [] + } + root.system["Deck"].gateways[address][deck.index] = node.itemAt(0) + } + } + onItemAdded: (index, item) => { + deckConnections.items.push(item) + } + onItemRemoved: (index, item) => { + deckConnections.items.slice(deckConnections.items.indexOf(item), 1) + } + } + + AudioEntity { + visible: root.mode != AudioRouter.Mode.Legacy + id: mixer + + x: root.width / 2 + y: Math.max(root.height / 16 , root.height / (root.mode == AudioRouter.Mode.Advanced ? 3 : 2) - implicitHeight / 2) + + name: "Mixer" + group: "internal" + + advanced: root.mode == AudioRouter.Mode.Advanced + + gateways: [{ + name: "PFL", + type: "source" + }, { + name: "Main", + type: "source", + required: true + }, { + name: "Booth", + type: "source" + }, { + name: "Left Bus", + type: "source", + advanced: true + }, { + name: "Center Bus", + type: "source", + advanced: true + }, { + name: "Right Bus", + type: "source", + advanced: true + }, { + name: "Auxiliary", + type: "sink", + instances: 4, + advanced: true + }, { + name: "Microphone", + type: "sink", + instances: 4, + advanced: true + } + ] + + Mixxx.SettingParameter { + label: "PFL" + } + Mixxx.SettingParameter { + label: "Main" + } + Mixxx.SettingParameter { + label: "Booth" + } + Mixxx.SettingParameter { + label: "Mixer" + } + Mixxx.SettingParameter { + label: "Decks" + } + Mixxx.SettingParameter { + label: "Input" + } + Mixxx.SettingParameter { + label: "Output" + } + Mixxx.SettingParameter { + label: "Broadcast" + } + + handleSource.vertical: mixer.height < root.height*0.75 + + onConnect: (point) => root.entityOnConnect(point) + onDisconnect: (point) => root.entityOnDisconnect(point) + + onGatewayReady: (address, node) => { + if (!root.system["Mixer"]) { + root.system["Mixer"] = { + gateways: {} + } + } + let nodeIdxOffset = 0 + if (address.endsWith(" Bus")) { + nodeIdxOffset = address.startsWith("Left ") ? 0 : address.startsWith("Right ") ? 2 : 1 + address = "Bus" + } + console.log("register", address, nodeIdxOffset) + if (!root.system["Mixer"].gateways[address]) { + root.system["Mixer"].gateways[address] = [] + } + for (let nodeIdx = 0; nodeIdx < node.count; nodeIdx++) { + root.system["Mixer"].gateways[address][nodeIdxOffset + nodeIdx] = node.itemAt(nodeIdx) + } + } + } + Repeater { + id: deckConnections + property list items: [] + model: items + AudioConnection { + visible: root.mode != AudioRouter.Mode.Legacy + required property var modelData + router: root + source: modelData.handleSource + sink: mixer.handleSink + system: true + } + } + AudioEntity { + id: record + visible: root.mode == AudioRouter.Mode.Advanced + + x: root.width / 5 * 3 + y: root.height / 5 * 4 - implicitHeight / 2 + + name: "Record/Broadcast" + group: "internal" + metaType: "sink" + + handleSink.vertical: true + + gateways: [{ + name: "Alternative input", + type: "sink" + } + ] + property var alternativeConnection: null + readonly property bool hasAlternativeConnection: alternativeConnection && alternativeConnection.ready + + onConnect: (point) => { + if (root.newConnection != null) { + record.alternativeConnection = root.newConnection + } + root.entityOnConnect(point) + if (root.newConnection != null) { + record.alternativeConnection = root.newConnection + } + } + onDisconnect: (point) => { + record.alternativeConnection = null + root.entityOnDisconnect(point) + } + + onGatewayReady: (address, node) => { + if (!root.system["Record"]) { + root.system["Record"] = { + gateways: {} + } + } + if (!root.system["Record"].gateways[address]) { + root.system["Record"].gateways[address] = [] + } + node = node.itemAt(0) + root.system["Record"].gateways[address][node.index] = node + } + } + + AudioConnection { + visible: root.mode == AudioRouter.Mode.Advanced && !record.hasAlternativeConnection + + router: root + source: mixer.handleSource + sink: record.handleSink + system: true + vertical: true + } +} diff --git a/res/qml/Settings/AutoDJ.qml b/res/qml/Settings/AutoDJ.qml new file mode 100644 index 000000000000..a8dd46caea76 --- /dev/null +++ b/res/qml/Settings/AutoDJ.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "AutoDJ" + + Mixxx.SettingParameter { + label: "A black square" + + Rectangle { + color: 'black' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/Broadcast.qml b/res/qml/Settings/Broadcast.qml new file mode 100644 index 000000000000..d8150886807e --- /dev/null +++ b/res/qml/Settings/Broadcast.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "Broadcast" + + Mixxx.SettingParameter { + label: "A yellow square" + + Rectangle { + color: 'yellow' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/Category.qml b/res/qml/Settings/Category.qml new file mode 100644 index 000000000000..16d232cb12a6 --- /dev/null +++ b/res/qml/Settings/Category.qml @@ -0,0 +1,9 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Mixxx.SettingGroup { + id: root + + property int selectedIndex: 0 + property list tabs: [] +} diff --git a/res/qml/Settings/Controller.qml b/res/qml/Settings/Controller.qml new file mode 100644 index 000000000000..1023da91d3b6 --- /dev/null +++ b/res/qml/Settings/Controller.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "Controllers" + + Mixxx.SettingParameter { + label: "A orange square" + + Rectangle { + color: 'orange' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/Interface.qml b/res/qml/Settings/Interface.qml new file mode 100644 index 000000000000..848da7fe71bb --- /dev/null +++ b/res/qml/Settings/Interface.qml @@ -0,0 +1,18 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + tabs: ["theme & colour", "waveform", "decks"] + + label: "Interface" + + Mixxx.SettingParameter { + label: "A pink square" + + Rectangle { + color: 'pink' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/Library.qml b/res/qml/Settings/Library.qml new file mode 100644 index 000000000000..1ca75978c25e --- /dev/null +++ b/res/qml/Settings/Library.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "Library" + + Mixxx.SettingParameter { + label: "A blue square" + + Rectangle { + color: 'blue' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/MixerEffect.qml b/res/qml/Settings/MixerEffect.qml new file mode 100644 index 000000000000..3be92fc7c17f --- /dev/null +++ b/res/qml/Settings/MixerEffect.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "Mixer & Effects" + + Mixxx.SettingParameter { + label: "A green square" + + Rectangle { + color: 'green' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/RatioChoice.qml b/res/qml/Settings/RatioChoice.qml new file mode 100644 index 000000000000..137e24cf7bc1 --- /dev/null +++ b/res/qml/Settings/RatioChoice.qml @@ -0,0 +1,309 @@ +import QtQuick 2.12 +import QtQuick.Controls +import QtQuick.Layouts +import QtQuick.Shapes +import Qt5Compat.GraphicalEffects +import "../Theme" +import ".." as Skin + +Item { + id: root + required property list options + property list tooltips: [] + property string selected: options.length ? options[0] : null + property real spacing: 9 + property real maxWidth: 0 + property bool normalizedWidth: true + + onTooltipsChanged: { + popup.close() + } + + FontMetrics { + id: fontMetrics + font.pixelSize: 14 + font.capitalization: Font.AllUppercase + } + + implicitHeight: (contentList.visible ? contentList.height : contentSpin.height) + dropRatio.radius * 2 + implicitWidth: (contentList.visible ? contentList.width : contentSpin.width) + dropRatio.radius * 2 + readonly property real cellSize: { + Math.max.apply(null, options.map((option) => fontMetrics.advanceWidth(option))) + root.spacing*2 + } + + Rectangle { + id: contentList + visible: root.maxWidth == 0 || root.maxWidth > root.cellSize * root.options.length + anchors.centerIn: parent + height: 24 + width: { + if (root.normalizedWidth) { + root.cellSize * root.options.length + root.spacing + } else { + options.reduce((acc, option) => acc + fontMetrics.advanceWidth(option) + root.spacing*2, 0) + root.spacing + } + } + color: '#2B2B2B' + radius: height / 2 + RowLayout { + anchors.fill: parent + Repeater { + model: options + Item { + required property int index + required property var modelData + width: root.normalizedWidth ? root.cellSize : fontMetrics.advanceWidth(modelData) + root.spacing*2 + height: contentList.height + Rectangle { + anchors.fill: parent + color: root.selected == modelData ? Theme.accentColor : 'transparent' + radius: height / 2 + id: contentOption + Text { + text: modelData + color: Theme.white + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font: fontMetrics.font + } + MouseArea { + anchors.fill: parent + hoverEnabled: !!root.tooltips[index] + onPressed: { + root.selected = modelData + } + + onEntered: { + if (!root.tooltips[index]) return; + popup.tooltip = root.tooltips[index] || "" + popup.x = Qt.binding(function() { return contentOption.mapToItem(root, 0, 0).x + contentOption.width / 2 - popup.width / 2; }) + popup.open() + } + onExited: { + popup.close() + } + } + } + InnerShadow { + visible: root.selected == modelData + id: bottomOptionInnerEffect + anchors.fill: parent + radius: 8 + samples: 32 + spread: 0.4 + horizontalOffset: -1 + verticalOffset: -1 + color: "#0E2A54" + source: contentOption + } + InnerShadow { + visible: root.selected == modelData + id: topOptionInnerEffect + anchors.fill: parent + radius: 8 + samples: 32 + spread: 0.4 + horizontalOffset: 1 + verticalOffset: 1 + color: "#0E2A54" + source: bottomOptionInnerEffect + } + } + } + } + } + SpinBox { + id: contentSpin + visible: !contentList.visible + anchors.centerIn: parent + from: 0 + padding: 0 + spacing: root.spacing + to: root.options.length - 1 + font: fontMetrics.font + value: root.options.indexOf(root.selected) + + property real textWidth: fontMetrics.advanceWidth(root.options.reduce((accumulator, currentValue) => accumulator.length > currentValue.length ? accumulator : currentValue, "")) + + contentItem: Item { + width: contentSpin.textWidth + 2 * contentSpin.spacing + Rectangle { + id: content + anchors.fill: parent + color: Theme.accentColor + radius: height / 2 + Text { + id: textLabel + anchors.fill: parent + text: contentSpin.textFromValue(contentSpin.value, contentSpin.locale) ?? "" + color: Theme.white + font: contentSpin.font + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + InnerShadow { + id: bottomInnerEffect + anchors.fill: parent + radius: 8 + samples: 32 + spread: 0.4 + horizontalOffset: -1 + verticalOffset: -1 + color: "#0E2A54" + source: content + } + InnerShadow { + id: topInnerEffect + anchors.fill: parent + radius: 8 + samples: 32 + spread: 0.4 + horizontalOffset: 1 + verticalOffset: 1 + color: "#0E2A54" + source: bottomInnerEffect + } + } + + component Indicator: Rectangle { + required property string text + height: implicitHeight + implicitWidth: 24 + implicitHeight: 24 + radius: parent.height / 2 + color: '#2B2B2B' + border.width: 0 + + Text { + text: parent.text + font.pixelSize: contentSpin.font.pixelSize + color: Theme.white + anchors.fill: parent + fontSizeMode: Text.Fit + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + up.indicator: Indicator { + x: contentSpin.mirrored ? 0 : parent.width - width + text: ">" + } + + down.indicator: Indicator { + x: contentSpin.mirrored ? parent.width - width : 0 + text: "<" + } + + background: Rectangle { + implicitWidth: contentSpin.textWidth + 2 * contentSpin.spacing + 48 + radius: parent.height / 2 + color: '#2B2B2B' + } + + textFromValue: function(value) { + return root.options[value]; + } + + valueFromText: function(text) { + for (var i = 0; i < root.options.length; ++i) { + if (root.options[i].toLowerCase().indexOf(text.toLowerCase()) === 0) + return i + } + return contentSpin.value + } + + onValueChanged: { + root.selected = contentSpin.textFromValue(value) ?? "" + popup.tooltip = root.tooltips[contentSpin.value] ?? "" + popup.x = contentSpin.width / 2 - popup.width / 2 + } + MouseArea { + anchors.fill: parent + hoverEnabled: true + + onEntered: { + if (!root.tooltips[contentSpin.value]) return; + popup.x = contentSpin.width / 2 - popup.width / 2 + popup.open() + } + onExited: { + popup.close() + } + onPressed: { + mouse.accepted = false + } + } + } + DropShadow { + id: dropRatio + anchors.margins: dropRatio.radius + anchors.fill: root + horizontalOffset: 0 + verticalOffset: 0 + radius: 4.0 + color: "#80000000" + source: contentList.visible ? contentList : contentSpin + } + Popup { + id: popup + y: root.height + x: 0 + width: Math.max(tooltip.implicitWidth* 1.5, 50) + height: tooltip.implicitHeight + 15 + closePolicy: Popup.NoAutoClose + + property string tooltip: "" + + padding: 0 + + contentItem: Item { + Item { + id: contentPopup + anchors.fill: parent + Shape { + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + width: 20 + height: width + antialiasing: true + layer.enabled: true + layer.samples: 4 + ShapePath { + fillColor: Theme.embeddedBackgroundColor + strokeColor: Theme.deckBackgroundColor + strokeWidth: 2 + startX: 10; startY: 0 + fillRule: ShapePath.WindingFill + capStyle: ShapePath.RoundCap + PathLine { x: 20; y: 10 } + PathLine { x: 0; y: 10 } + PathLine { x: 10; y: 0 } + } + } + Skin.EmbeddedBackground { + anchors.topMargin: 10 + anchors.fill: parent + Text { + anchors.centerIn: parent + id: tooltip + color: Theme.white + text: popup.tooltip + } + } + } + DropShadow { + anchors.fill: parent + horizontalOffset: 0 + verticalOffset: 0 + radius: 8.0 + color: "#000000" + source: contentPopup + } + } + + background: Item {} + } +} diff --git a/res/qml/Settings/Recording.qml b/res/qml/Settings/Recording.qml new file mode 100644 index 000000000000..16ac87057aae --- /dev/null +++ b/res/qml/Settings/Recording.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "Recording" + + Mixxx.SettingParameter { + label: "A red square" + + Rectangle { + color: 'red' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Settings/SoundHardware.qml b/res/qml/Settings/SoundHardware.qml new file mode 100644 index 000000000000..16ca0c5d56c9 --- /dev/null +++ b/res/qml/Settings/SoundHardware.qml @@ -0,0 +1,639 @@ +import QtQuick +import QtQuick.Layouts +import Mixxx 1.0 as Mixxx +import ".." as Skin +import "../Theme" + +Category { + id: root + + label: "Sound hardware" + tabs: ["engine", "delays", "stats"] + + property bool hasChanges: router.hasChanges + property bool committing: false + + Mixxx.ControlProxy { + id: mainEnabled + group: "[Master]" + key: "enabled" + } + Mixxx.ControlProxy { + id: headEnabled + group: "[Master]" + key: "headEnabled" + } + Mixxx.ControlProxy { + id: boothEnabled + group: "[Master]" + key: "booth_enabled" + } + Mixxx.ControlProxy { + id: mainDelay + group: "[Master]" + key: "delay" + } + Mixxx.ControlProxy { + id: headDelay + group: "[Master]" + key: "headDelay" + } + Mixxx.ControlProxy { + id: boothDelay + group: "[Master]" + key: "boothDelay" + } + Mixxx.ControlProxy { + id: monoMix + group: "[Master]" + key: "mono_mixdown" + } + Mixxx.ControlProxy { + id: micMonitorMode + group: "[Master]" + key: "talkover_mix" + } + + function save() { + const manager = Mixxx.SoundManager; + mainEnabled.value = mainMixEnabled.options.indexOf(mainMixEnabled.selected) + monoMix.value = !mainOutputMode.options.indexOf(mainOutputMode.selected) + manager.setForceNetworkClock(soundClock.options[1] == soundClock.selected) + manager.setSampleRate(parseInt(sampleRate.selected)) + manager.setAudioBufferSizeIndex(audioBuffer.currentIndex + 1) + micMonitorMode.value = microphoneMonitorMode.currentIndex + manager.setAPI(soundApi.selected) + manager.setKeylockEngine(keylock.options.indexOf(keylock.selected)) + + // Router + manager.setSyncBuffers(router.multiSoundcard.options.indexOf(router.multiSoundcard.selected)) + + let connectionsHandler = (connections, device) => { + for (let channel of Object.keys(connections)) { + let connection = connections[channel] + let type; + let index = 0; + let isOutput = true + if (connection.source.entity.name == "Mixer") { + switch (connection.source.address) { + case "Main": + type = 0; + break; + case "PFL": + type = 1; + break; + case "Booth": + type = 2; + break; + case "Left Bus": + case "Center Bus": + case "Right Bus": + index = connection.source.address.startsWith("Left") ? 0 : connection.source.address.startsWith("Right") ? 2 : 1; + type = 3; + break; + default: + console.error(`unsupported address: ${connection.source.address}`) + continue; + } + } else if (connection.sink.entity.name == "Mixer") { + isOutput = false; + type = connection.sink.address == "Auxiliary" ? 7 : 6; + index = connection.sink.instance; + } else if (connection.source.entity.name.startsWith("Deck ") && connection.source.address == "Output") { + type = 4; + index = parseInt(connection.source.entity.name.split(' ')[1])-1; + } else if (connection.sink.entity.name.startsWith("Deck ")) { + isOutput = false; + type = connection.source.address == "Output" ? 4 : 5; + index = parseInt(connection.sink.entity.name.split(' ')[1])-1; + } else if (connection.sink.entity.name == "Microphone") { + isOutput = false; + type = 6 + index = connection.sink.instance; + } else if (connection.sink.entity.name == "Auxiliary") { + isOutput = false; + type = 7; + index = connection.sink.instance; + } else if (connection.sink.entity.name == "RecordBroadcast") { + isOutput = false; + type = 8; + index = connection.sink.instance; + } else { + console.error(`unsupported entity: ${connection.source.entity.name} ${connection.sink.entity.name}`) + continue; + } + console.log(isOutput ? "addOutput" : "addInput", device, type, channel * 2, index) + if (isOutput) { + manager.addOutput(device, type, channel * 2, index) + } else { + manager.addInput(device, type, channel * 2, index) + } + } + }; + manager.clearOutputs() + for (let device of Object.keys(router.outputs)) { + for (let address of Object.keys(router.outputs[device].gateways)) { + let gateway = router.outputs[device].gateways[address] + let connections = gateway.node && gateway.node.assignedEdges ? gateway.node.assignedEdges() : {}; + connectionsHandler(connections, gateway.device) + } + } + manager.clearInputs() + for (let device of Object.keys(router.inputs)) { + for (let address of Object.keys(router.inputs[device].gateways)) { + let gateway = router.inputs[device].gateways[address] + let connections = gateway.node && gateway.node.assignedEdges ? gateway.node.assignedEdges() : {}; + connectionsHandler(connections, gateway.device) + } + } + + mainDelay.value = mainDelaySlider.value + boothDelay.value = boothDelaySlider.value + headDelay.value = headphoneDelaySlider.value + + root.committing = true + manager.commit() + } + + function load() { + const manager = Mixxx.SoundManager; + mainMixEnabled.selected = mainMixEnabled.options[mainEnabled.value ? 0 : 1 ] + mainOutputMode.selected = mainOutputMode.options[monoMix.value ? 0 : 1 ] + soundClock.selected = soundClock.options[manager.getForceNetworkClock() ? 1 : 0 ] + sampleRate.update(manager.getAPI()) + sampleRate.selected = qsTr("%1 Hz").arg(manager.getSampleRate()) + audioBuffer.currentIndex = manager.getAudioBufferSizeIndex() - 1 + microphoneMonitorMode.enabled = manager.hasMicInputs() + microphoneMonitorMode.currentIndex = micMonitorMode.value + soundApi.options = manager.getHostAPIList() + soundApi.selected = manager.getAPI() + keylock.update() + keylock.selected = keylock.options[manager.getKeylockEngine()] + + // Router + router.multiSoundcard.selected = router.multiSoundcard.options[manager.getSyncBuffers()] + router.update(manager.getAPI()) + + //Delays + mainDelayLabel.enabled = mainEnabled.value + mainDelaySlider.enabled = mainEnabled.value + mainDelaySlider.value = mainDelay.value + boothDelayLabel.enabled = boothEnabled.value + boothDelaySlider.enabled = boothEnabled.value + boothDelaySlider.value = boothDelay.value + headphoneDelayLabel.enabled = headEnabled.value + headphoneDelaySlider.enabled = headEnabled.value + headphoneDelaySlider.value = headDelay.value + + root.hasChanges = Qt.binding(function() { return router.hasChanges; }); + } + + Component.onCompleted: { + load() + } + + ColumnLayout { + anchors.fill: parent + + Item { + id: tabSection + Layout.fillWidth: true + Layout.preferredHeight: root.selectedIndex == 0 ? engine.height : delays.height + Mixxx.SettingGroup { + label: "Engine" + visible: root.selectedIndex == 0 + onActivated: { + root.selectedIndex = 0 + } + anchors.left: parent.left + anchors.right: parent.right + RowLayout { + id: engine + anchors.left: parent.left + anchors.right: parent.right + ColumnLayout { + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop + RowLayout { + Text { + Mixxx.SettingParameter { + label: "Main Mix" + } + Layout.fillWidth: true + text: "Main Mix" + color: Theme.white + font.pixelSize: 14 + } + RatioChoice { + id: mainMixEnabled + options: [ + "on", + "off" + ] + selected: options[mainEnabled.value ? 0 : 1 ] + onSelectedChanged: { + root.hasChanges = true + } + } + } + + RowLayout { + Text { + Mixxx.SettingParameter { + label: "Main Output Mode" + } + Layout.fillWidth: true + text: "Main Output Mode" + color: Theme.white + font.pixelSize: 14 + } + RatioChoice { + id: mainOutputMode + options: [ + "mono", + "stereo" + ] + selected: options[monoMix.value ? 0 : 1 ] + onSelectedChanged: { + root.hasChanges = true + } + } + } + + RowLayout { + Text { + Mixxx.SettingParameter { + label: "Sound Clock" + } + Layout.fillWidth: true + text: "Sound Clock" + color: Theme.white + font.pixelSize: 14 + } + RatioChoice { + id: soundClock + options: [ + "soundcard", + "network" + ] + onSelectedChanged: { + root.hasChanges = true + } + } + } + + RowLayout { + Text { + Layout.fillWidth: true + text: "Keylock engine" + color: Theme.white + font.pixelSize: 14 + } + RatioChoice { + id: keylock + normalizedWidth: false + maxWidth: tabSection.width * 0.4 + options: [] + tooltips: [] + + function update() { + let options = [] + let tooltips = [] + for (let engine of Mixxx.SoundManager.getKeylockEngines()) { + switch (engine) { + case 0: + options.push(qsTr("Soundtouch")) + tooltips.push(qsTr("Faster")) + break + case 1: + options.push(qsTr("Rubberband")) + tooltips.push(qsTr("Better")) + break + case 2: + options.push(qsTr("Rubberband R3")) + tooltips.push(qsTr("Near-hi-fi quality")) + break + } + } + keylock.options = options + keylock.tooltips = tooltips + } + + onSelectedChanged: { + root.hasChanges = true + } + + Mixxx.SettingParameter { + label: "Keylock engine" + } + } + } + } + Item { + Layout.preferredWidth: 70 + } + ColumnLayout { + Layout.alignment: Qt.AlignTop + RowLayout { + Text { + Layout.fillWidth: true + text: "Sound API" + color: Theme.white + font.pixelSize: 14 + } + RatioChoice { + id: soundApi + maxWidth: tabSection.width * 0.4 + options: [] + + onSelectedChanged: { + root.hasChanges = true + router.update(soundApi.selected) + sampleRate.update(soundApi.selected) + } + + Mixxx.SettingParameter { + label: "Sound API" + } + } + } + RowLayout { + Text { + Mixxx.SettingParameter { + label: "Sample Rate" + } + Layout.fillWidth: true + text: "Sample Rate" + color: Theme.white + font.pixelSize: 14 + } + RatioChoice { + id: sampleRate + Layout.minimumWidth: sampleRate.implicitWidth + options: [] + function update(api) { + let data = [] + for (let sampleRate of Mixxx.SoundManager.getSampleRates(api)) { + data.push(qsTr("%1 Hz").arg(sampleRate)); + } + sampleRate.options = data + } + onSelectedChanged: { + root.hasChanges = true + } + } + } + + Connections { + target: sampleRate + function onSelectedChanged() { + let sampleRateValue = parseInt(sampleRate.selected) + audioBuffer.update(sampleRateValue) + } + } + + RowLayout { + Text { + Mixxx.SettingParameter { + label: "Audio Buffer" + } + Layout.fillWidth: true + text: "Audio Buffer" + color: Theme.white + font.pixelSize: 14 + } + Skin.ComboBox { + id: audioBuffer + spacing: 2 + clip: true + + font.pixelSize: 12 + + function update(sampleRate) { + let data = [] + let framesPerBuffer = 1; + for (; framesPerBuffer / sampleRate * 1000 < 1.0; framesPerBuffer *= 2) { + } + for (let i = 0; i < 7; i++) { + const latency = framesPerBuffer / sampleRate * 1000; + // i + 1 in the next line is a latency index as described in SSConfig + data.push(qsTr("%1 ms").arg(latency.toFixed(1))); + framesPerBuffer *= 2 + } + let currentIndex = audioBuffer.currentIndex + audioBuffer.model = data + audioBuffer.currentIndex = currentIndex + } + onCurrentIndexChanged: { + root.hasChanges = true + } + } + } + + RowLayout { + Text { + Mixxx.SettingParameter { + label: "Microphone Monitor Mode" + } + Layout.fillWidth: true + text: "Microphone Monitor Mode" + color: Theme.white + opacity: Mixxx.SoundManager.hasMicInputs() ? 1.0 : 0.5 + font.pixelSize: 14 + } + Skin.ComboBox { + id: microphoneMonitorMode + spacing: 2 + clip: true + opacity: enabled ? 1.0 : 0.5 + + font.pixelSize: 12 + model: [ + "Main output only", + "Main and booth outputs", + "Direct monitor (recording and broadcasting only)" + ] + onCurrentIndexChanged: { + root.hasChanges = true + } + } + } + } + } + } + + Mixxx.SettingGroup { + label: "Delays" + visible: root.selectedIndex == 1 + onActivated: { + root.selectedIndex = 1 + } + anchors.left: parent.left + anchors.right: parent.right + GridLayout { + id: delays + anchors.left: parent.left + anchors.right: parent.right + columns: 2 + rowSpacing: 0 + Text { + Mixxx.SettingParameter { + label: "Main Output" + } + id: mainDelayLabel + Layout.fillWidth: true + text: "Main Output" + color: Theme.white + opacity: enabled ? 1 : 0.5 + font.pixelSize: 14 + } + Skin.Slider { + id: mainDelaySlider + Layout.fillWidth: true + markers: ["0ms", "100ms", "1s", "10s", null] + suffix: "ms" + slider.to: 1000 + + onValueChanged: { + root.hasChanges = true + } + } + Text { + Mixxx.SettingParameter { + label: "Booth Output" + } + id: boothDelayLabel + Layout.fillWidth: true + text: "Booth Output" + color: Theme.white + opacity: enabled ? 1 : 0.5 + enabled: boothEnabled.value + font.pixelSize: 14 + } + Skin.Slider { + id: boothDelaySlider + Layout.fillWidth: true + markers: ["0ms", "100ms", "1s", "10s", null] + suffix: "ms" + enabled: boothEnabled.value + value: boothDelay.value + slider.to: 1000 + + onValueChanged: { + root.hasChanges = true + } + } + Text { + Mixxx.SettingParameter { + label: "Headphone Output" + } + id: headphoneDelayLabel + Layout.fillWidth: true + text: "Headphone Output" + color: Theme.white + opacity: enabled ? 1 : 0.5 + enabled: headEnabled.value + font.pixelSize: 14 + } + Skin.Slider { + id: headphoneDelaySlider + Layout.fillWidth: true + markers: ["0ms", "100ms", "1s", "10s", null] + suffix: "ms" + enabled: headEnabled.value + value: headDelay.value + slider.to: 1000 + + onValueChanged: { + root.hasChanges = true + } + } + } + } + + Mixxx.SettingGroup { + label: "Stats" + visible: root.selectedIndex == 2 + onActivated: { + root.selectedIndex = 2 + } + Mixxx.SettingParameter { + label: "A white square" + Rectangle { + width: 20 + height: 20 + color: 'white' + } + } + } + } + Mixxx.SettingGroup { + label: "Router" + Layout.fillWidth: true + Layout.fillHeight: true + AudioRouter { + id: router + anchors.fill: parent + } + Rectangle { + anchors.fill: parent + visible: root.committing + color: Qt.alpha('grey', 0.3) + MouseArea { + anchors.fill: parent + preventStealing: true + hoverEnabled: true + + onWheel: (mouse)=> { + mouse.accepted = true + } + } + } + } + RowLayout { + Layout.topMargin: 4 + Skin.FormButton { + enabled: !root.committing + visible: root.hasChanges + text: "Cancel" + opacity: enabled ? 1.0 : 0.5 + backgroundColor: "#7D3B3B" + activeColor: "#999999" + onPressed: { + root.load() + } + } + Item { + Layout.fillWidth: true + } + Text { + Layout.alignment: Qt.AlignVCenter + Layout.rightMargin: 16 + id: errorMessage + text: "" + color: "#7D3B3B" + } + Skin.FormButton { + enabled: root.hasChanges && !root.committing + text: "Save" + opacity: enabled ? 1.0 : 0.5 + backgroundColor: root.hasChanges ? "#3a60be" : "#3F3F3F" + activeColor: "#999999" + onPressed: { + errorMessage.text = "" + root.save() + } + } + } + } + Connections { + target: Mixxx.SoundManager + function onCommitted(error) { + root.committing = false + if (error) { + errorMessage.text = error + } + root.load() + } + } +} diff --git a/res/qml/Settings/StatsPerformance.qml b/res/qml/Settings/StatsPerformance.qml new file mode 100644 index 000000000000..a61b68730339 --- /dev/null +++ b/res/qml/Settings/StatsPerformance.qml @@ -0,0 +1,16 @@ +import QtQuick +import Mixxx 1.0 as Mixxx + +Category { + label: "Stats & Performance" + + Mixxx.SettingParameter { + label: "A grey square" + + Rectangle { + color: 'grey' + height: 20 + width: 20 + } + } +} diff --git a/res/qml/Slider.qml b/res/qml/Slider.qml index bcae15fdde9b..ae9f828f73f0 100644 --- a/res/qml/Slider.qml +++ b/res/qml/Slider.qml @@ -1,49 +1,170 @@ -import Mixxx.Controls 1.0 as MixxxControls import Qt5Compat.GraphicalEffects import QtQuick 2.12 +import QtQuick.Controls +import QtQuick.Layouts import "Theme" -MixxxControls.Slider { +RowLayout { id: root + property list markers: ["", ""] - property alias fg: handleImage.source - property alias bg: backgroundImage.source + property alias suffix: textInputSection.suffix + property alias slider: control + property alias value: control.value - bar: true - barMargin: 10 - implicitWidth: backgroundImage.implicitWidth - implicitHeight: backgroundImage.implicitHeight + height: 30 - Image { - id: handleImage + Slider { + id: control - visible: false - source: Theme.imgSliderHandle - fillMode: Image.PreserveAspectFit - } - - handle: Item { - id: handleItem + Layout.fillWidth: true - width: handleImage.paintedWidth - height: handleImage.paintedHeight - x: root.horizontal ? (root.visualPosition * (root.width - width)) : ((root.width - width) / 2) - y: root.vertical ? (root.visualPosition * (root.height - height)) : ((root.height - height) / 2) + background: Item { + x: control.leftPadding + 7 + implicitWidth: 200 + implicitHeight: 4 + width: control.availableWidth - 7 + height: control.availableHeight + Rectangle { + width: parent.width + height: 4 + radius: 2 + color: "#181818" + } + Repeater { + id: delegate + model: markers + anchors.fill: parent + anchors.leftMargin: 7 + Item { + required property int index + required property var modelData + x: parent.width * (index / (delegate.model.length - 1)) + y: -4 + height: control.availableHeight - DropShadow { - source: handleImage - width: parent.width + 5 - height: parent.height + 5 - radius: 5 - verticalOffset: 5 - color: "#80000000" + Rectangle { + id: mark + visible: modelData != null + anchors { + top: parent.top + } + width: 1 + height: 11 + color: Qt.alpha(Theme.white, 0.25) + } + Text { + id: label + visible: modelData != null + anchors { + top: mark.bottom + topMargin: 4 + horizontalCenter: mark.left + } + color: Qt.alpha(Theme.white, 0.25) + font.pixelSize: 9 + text: modelData ?? "" + } + } + } + } + handle: Item { + x: control.leftPadding + control.visualPosition * (control.availableWidth - width) + y: -5 + width: 14 + height: 14 + Rectangle { + id: handle + anchors.fill: parent + radius: 7 + color: Theme.accentColor + } + InnerShadow { + id: handleEffect1 + anchors.fill: parent + samples: 16 + horizontalOffset: 0 + verticalOffset: 0 + radius: 16.0 + color: "#0E2A54" + source: handle + } + DropShadow { + id: handleEffect2 + anchors.fill: parent + source: handleEffect1 + horizontalOffset: 0 + verticalOffset: 0 + radius: 12.0 + color: Qt.alpha(Theme.darkGray, 0.25) + } } } + FocusScope { + id: textInputSection + Layout.leftMargin: 17 + Layout.minimumWidth: fontMetrics.advanceWidth + 8 + Layout.preferredHeight: 30 + Layout.margins: 4 - background: Image { - id: backgroundImage + property string suffix: "" + visible: suffix.length > 0 - anchors.fill: parent - anchors.margins: root.barMargin + Rectangle { + id: backgroundInput + radius: 4 + color: Theme.darkGray2 + anchors.fill: parent + anchors.margins: 4 + } + DropShadow { + id: dropSetting + anchors.fill: parent + horizontalOffset: 0 + verticalOffset: 0 + radius: 4.0 + color: Theme.darkGray + source: backgroundInput + } + InnerShadow { + id: effect2 + anchors.fill: parent + source: dropSetting + spread: 0.2 + radius: 12 + samples: 24 + horizontalOffset: 0 + verticalOffset: 0 + color: "#353535" + } + Item { + anchors.fill: parent + anchors.margins: 4 + TextInput { + anchors.left: parent.left + anchors.right: inputField.left + anchors.margins: 3 + focus: true + color: Qt.alpha(acceptableInput ? Theme.white : Theme.warningColor, root.enabled ? 1 : 0.5) + onAccepted: { + control.value = parseInt(text) + } + text: Math.round(control.value) + horizontalAlignment: TextInput.AlignRight + validator: IntValidator {bottom: control.from; top: control.to} + } + Text { + id: inputField + anchors.right: parent.right + anchors.margins: textInputSection.suffix.length > 0 ? 10 : 0 + text: textInputSection.suffix + color: Qt.alpha(Theme.white, root.enabled ? 1 : 0.5) + TextMetrics { + id: fontMetrics + font.family: inputField.font.family + text: `${control.to} ${parent.text}` + } + } + } } } diff --git a/res/qml/Theme/Theme.qml b/res/qml/Theme/Theme.qml index ca1b4d498e51..31154df62ce0 100644 --- a/res/qml/Theme/Theme.qml +++ b/res/qml/Theme/Theme.qml @@ -2,65 +2,73 @@ import QtQuick 2.12 pragma Singleton QtObject { - property color white: "#e3d7fb" - property color yellow: "#fca001" - property color red: "#ea2a4e" + property color accent: "#2D4EA1" + property color accentColor: "#3a60be" + property color backgroundColor: "#2E2E2E" property color blue: "#01dcfc" - property color green: "#85c85b" - property color lightGray: "#747474" - property color lightGray2: "#b0b0b0" - property color midGray: "#696969" - property color darkGray: "#0f0f0f" - property color darkGray2: "#2e2e2e" - property color eqHighColor: white - property color eqMidColor: white - property color eqLowColor: white - property color eqFxColor: red - property color effectColor: yellow - property color effectUnitColor: red property color bpmSliderBarColor: green - property color volumeSliderBarColor: blue - property color gainKnobColor: blue - property color samplerColor: blue - property color crossfaderOrientationColor: lightGray + property color buttonNormalColor: midGray property color crossfaderBarColor: red - property color toolbarBackgroundColor: darkGray2 - property color pflActiveButtonColor: blue - property color backgroundColor: "#1e1e20" + property color crossfaderOrientationColor: lightGray + property color darkGray: "#0f0f0f" + property color darkGray2: "#242424" + property color darkGray3: "#202020" property color deckActiveColor: green property color deckBackgroundColor: darkGray - property color knobBackgroundColor: "#262626" property color deckLineColor: darkGray2 - property color deckTextColor: lightGray2 + property color deckTextColor: white + property color effectColor: yellow + property color effectUnitColor: red property color embeddedBackgroundColor: "#a0000000" - property color buttonNormalColor: midGray - property color textColor: lightGray2 + property color eqFxColor: red + property color eqHighColor: white + property color eqLowColor: white + property color eqMidColor: white + property color gainKnobColor: blue + property color green: "#85c85b" + property color knobBackgroundColor: "#262626" + property color lightGray2: "#b0b0b0" + property color lightGray: "#747474" + property color midGray: "#696969" + property color panelSplitterBackground: backgroundColor + property color panelSplitterHandleActive: lightGray2 + property color panelSplitterHandle: midGray + property color pflActiveButtonColor: blue + property color red: "#ea2a4e" + property color samplerColor: blue + property color sunkenBackgroundColor: "#0C0C0C" + property color textColor: white property color toolbarActiveColor: white - property color waveformPrerollColor: midGray - property color waveformPostrollColor: midGray + property color toolbarBackgroundColor: darkGray2 + property color volumeSliderBarColor: blue + property color warningColor: "#7D3B3B" property color waveformBeatColor: lightGray property color waveformCursorColor: white property color waveformMarkerDefault: '#ff7a01' - property color waveformMarkerLabel: Qt.rgba(255, 255, 255, 0.8) property color waveformMarkerIntroOutroColor: '#2c5c9a' + property color waveformMarkerLabel: Qt.rgba(255, 255, 255, 0.8) property color waveformMarkerLoopColor: '#00b400' property color waveformMarkerLoopColorDisabled: '#FFFFFF' - property string fontFamily: "Open Sans" - property int textFontPixelSize: 14 + property color waveformPostrollColor: midGray + property color waveformPrerollColor: midGray + property color white: "#D9D9D9" + property color yellow: "#fca001" property int buttonFontPixelSize: 10 + property int textFontPixelSize: 14 + property string fontFamily: "Open Sans" + property string imgBpmSliderBackground: "images/slider_bpm.svg" property string imgButton: "images/button.svg" property string imgButtonPressed: "images/button_pressed.svg" - property string imgSliderHandle: "images/slider_handle.svg" - property string imgBpmSliderBackground: "images/slider_bpm.svg" - property string imgVolumeSliderBackground: "images/slider_volume.svg" - property string imgCrossfaderHandle: "images/slider_handle_crossfader.svg" property string imgCrossfaderBackground: "images/slider_crossfader.svg" - property string imgMicDuckingSliderHandle: "images/slider_handle_micducking.svg" - property string imgMicDuckingSlider: "images/slider_micducking.svg" - property string imgPopupBackground: imgButton + property string imgCrossfaderHandle: "images/slider_handle_crossfader.svg" property string imgKnob: "images/knob.svg" - property string imgKnobShadow: "images/knob_shadow.svg" property string imgKnobMini: "images/miniknob.svg" property string imgKnobMiniShadow: "images/miniknob_shadow.svg" + property string imgKnobShadow: "images/knob_shadow.svg" + property string imgMicDuckingSlider: "images/slider_micducking.svg" + property string imgMicDuckingSliderHandle: "images/slider_handle_micducking.svg" + property string imgPopupBackground: imgButton property string imgSectionBackground: "images/section.svg" + property string imgSliderHandle: "images/slider_handle.svg" + property string imgVolumeSliderBackground: "images/slider_volume.svg" } diff --git a/res/qml/WaveformDisplay.qml b/res/qml/WaveformDisplay.qml index bc3b74c59f68..18bc24780554 100644 --- a/res/qml/WaveformDisplay.qml +++ b/res/qml/WaveformDisplay.qml @@ -10,6 +10,8 @@ Item { required property string group property bool splitStemTracks: false + readonly property string zoomGroup: Mixxx.Config.waveformZoomSynchronization() ? "[Channel1]" : group + enum MouseStatus { Normal, Bending, @@ -22,6 +24,13 @@ Item { zoom: zoomControl.value backgroundColor: "#5e000000" + Behavior on zoom { + SmoothedAnimation { + duration: 500 + velocity: -1 + } + } + Mixxx.WaveformRendererEndOfTrack { color: '#ff8872' endOfTrackWarningTime: 30 @@ -62,11 +71,11 @@ Item { } } - Mixxx.WaveformRendererRGB { + Mixxx.WaveformRendererFiltered { axesColor: '#a1a1a1a1' - lowColor: '#ff2154d7' - midColor: '#cfb26606' - highColor: '#e5029c5c' + lowColor: '#2154D7' + midColor: '#97632D' + highColor: '#D5C2A2' gainAll: 1.0 gainLow: 1.0 @@ -84,13 +93,14 @@ Item { } Mixxx.WaveformRendererMark { - playMarkerColor: 'cyan' - playMarkerBackground: 'orange' + playMarkerColor: '#D9D9D9' + playMarkerBackground: '#D9D9D9' defaultMark: Mixxx.WaveformMark { align: "bottom|right" color: "#00d9ff" textColor: "#1a1a1a" text: " %1 " + endIcon: Qt.resolvedUrl("images/jump_%1.svg") } untilMark.showTime: true @@ -180,8 +190,14 @@ Item { Mixxx.ControlProxy { id: zoomControl - group: root.group + group: root.zoomGroup key: "waveform_zoom" + + Component.onCompleted: { + if (group == root.group) { + value = Mixxx.Config.waveformDefaultZoom() + } + } } MouseArea { @@ -243,10 +259,10 @@ Item { mouseStatus = WaveformDisplay.MouseStatus.Normal; } - onWheel: { - if (wheel.angleDelta.y < 0 && zoomControl.value > 1) { + onWheel: (mouse) => { + if (mouse.angleDelta.y < 0 && zoomControl.value > 1) { zoomControl.value -= 1; - } else if (wheel.angleDelta.y > 0 && zoomControl.value < 10.0) { + } else if (mouse.angleDelta.y > 0 && zoomControl.value < 10.0) { zoomControl.value += 1; } } diff --git a/res/qml/WaveformRow.qml b/res/qml/WaveformRow.qml deleted file mode 100644 index be129fc42bfa..000000000000 --- a/res/qml/WaveformRow.qml +++ /dev/null @@ -1,380 +0,0 @@ -import "." as Skin -import Mixxx 1.0 as Mixxx -import QtQuick 2.14 -import QtQuick.Shapes 1.12 -import "Theme" - -Item { - id: root - - enum MouseStatus { - Normal, - Bending, - Scratching - } - - property string group // required - property var deckPlayer: Mixxx.PlayerManager.getPlayer(group) - - Item { - id: waveformContainer - - property real duration: samplesControl.value / sampleRateControl.value - - anchors.fill: parent - clip: true - - Mixxx.ControlProxy { - id: samplesControl - - group: root.group - key: "track_samples" - } - - Mixxx.ControlProxy { - id: sampleRateControl - - group: root.group - key: "track_samplerate" - } - - Mixxx.ControlProxy { - id: playPositionControl - - group: root.group - key: "playposition" - } - - Mixxx.ControlProxy { - id: rateRatioControl - - group: root.group - key: "rate_ratio" - } - - Mixxx.ControlProxy { - id: zoomControl - - group: root.group - key: "waveform_zoom" - } - - Mixxx.ControlProxy { - id: introStartPosition - - group: root.group - key: "intro_start_position" - } - - Mixxx.ControlProxy { - id: introEndPosition - - group: root.group - key: "intro_end_position" - } - - Mixxx.ControlProxy { - id: outroStartPosition - - group: root.group - key: "outro_start_position" - } - - Mixxx.ControlProxy { - id: outroEndPosition - - group: root.group - key: "outro_end_position" - } - - Mixxx.ControlProxy { - id: loopStartPosition - - group: root.group - key: "loop_start_position" - } - - Mixxx.ControlProxy { - id: loopEndPosition - - group: root.group - key: "loop_end_position" - } - - Mixxx.ControlProxy { - id: loopEnabled - - group: root.group - key: "loop_enabled" - } - - Mixxx.ControlProxy { - id: mainCuePosition - - group: root.group - key: "cue_point" - } - - Item { - id: waveform - - property real effectiveZoomFactor: (1 / rateRatioControl.value) * (100 / zoomControl.value) - - width: waveformContainer.duration * effectiveZoomFactor - height: parent.height - x: playMarker.screenPosition * waveformContainer.width - playPositionControl.value * width - visible: root.deckPlayer.isLoaded - - WaveformShader { - group: root.group - anchors.fill: parent - } - - Shape { - id: preroll - - property real triangleHeight: waveform.height - property real triangleWidth: 0.25 * waveform.effectiveZoomFactor - property int numTriangles: Math.ceil(width / triangleWidth) - - anchors.top: waveform.top - anchors.right: waveform.left - width: Math.max(0, waveform.x) - height: waveform.height - - ShapePath { - strokeColor: Theme.waveformPrerollColor - strokeWidth: 1 - fillColor: "transparent" - - PathMultiline { - paths: { - let p = []; - for (let i = 0; i < preroll.numTriangles; i++) { - p.push([ - Qt.point(preroll.width - i * preroll.triangleWidth, preroll.triangleHeight / 2), - Qt.point(preroll.width - (i + 1) * preroll.triangleWidth, 0), - Qt.point(preroll.width - (i + 1) * preroll.triangleWidth, preroll.triangleHeight), - Qt.point(preroll.width - i * preroll.triangleWidth, preroll.triangleHeight / 2), - ]); - } - return p; - } - } - } - } - - Shape { - id: postroll - - property real triangleHeight: waveform.height - property real triangleWidth: 0.25 * waveform.effectiveZoomFactor - property int numTriangles: Math.ceil(width / triangleWidth) - - anchors.top: waveform.top - anchors.left: waveform.right - width: waveformContainer.width / 2 - height: waveform.height - - ShapePath { - strokeColor: Theme.waveformPostrollColor - strokeWidth: 1 - fillColor: "transparent" - - PathMultiline { - paths: { - let p = []; - for (let i = 0; i < postroll.numTriangles; i++) { - p.push([ - Qt.point(i * postroll.triangleWidth, postroll.triangleHeight / 2), - Qt.point((i + 1) * postroll.triangleWidth, 0), - Qt.point((i + 1) * postroll.triangleWidth, postroll.triangleHeight), - Qt.point(i * postroll.triangleWidth, postroll.triangleHeight / 2), - ]); - } - return p; - } - } - } - } - - Repeater { - model: root.deckPlayer.beatsModel - - Rectangle { - property real alpha: 0.9 // TODO: Make this configurable (i.e., "[Waveform],beatGridAlpha" config option) - - width: 1 - height: waveform.height - x: (framePosition * 2 / samplesControl.value) * waveform.width - color: Theme.waveformBeatColor - } - } - - Skin.WaveformIntroOutro { - id: intro - - visible: introStartPosition.value != -1 || introEndPosition.value != -1 - - height: waveform.height - x: ((introStartPosition.value != -1 ? introStartPosition.value : introEndPosition.value) / samplesControl.value) * waveform.width - width: introEndPosition.value == -1 ? 0 : ((introEndPosition.value - introStartPosition.value) / samplesControl.value) * waveform.width - } - - Skin.WaveformIntroOutro { - id: outro - - visible: outroStartPosition.value != -1 || outroEndPosition.value != -1 - isIntro: false - - height: waveform.height - x: ((outroStartPosition.value != -1 ? outroStartPosition.value : outroEndPosition.value) / samplesControl.value) * waveform.width - width: outroEndPosition.value == -1 || outroStartPosition.value == -1 ? 0 : ((outroEndPosition.value - outroStartPosition.value) / samplesControl.value) * waveform.width - } - - Skin.WaveformLoop { - id: loop - - visible: loopStartPosition.value != -1 && loopEndPosition.value != -1 - - height: waveform.height - x: (loopStartPosition.value / samplesControl.value) * waveform.width - width: ((loopEndPosition.value - loopStartPosition.value) / samplesControl.value) * waveform.width - enabled: loopEnabled.value - } - - Repeater { - model: root.deckPlayer.hotcuesModel - - Item { - id: cue - - required property int startPosition - required property int endPosition - required property string label - required property bool isLoop - required property int hotcueNumber - - Skin.WaveformHotcue { - group: root.group - hotcueNumber: cue.hotcueNumber + 1 - label: cue.label - isLoop: cue.isLoop - - x: (startPosition * 2 / samplesControl.value) * waveform.width - width: cue.isLoop ? ((endPosition - startPosition) * 2 / samplesControl.value) * waveform.width : null - height: waveform.height - } - } - } - - Skin.WaveformCue { - id: maincue - - height: waveform.height - x: (mainCuePosition.value / samplesControl.value) * waveform.width - } - } - } - - Shape { - id: playMarkerShape - - anchors.fill: parent - - ShapePath { - id: playMarker - - property real screenPosition: 0.5 - - startX: playMarkerShape.width * playMarker.screenPosition - startY: 0 - strokeColor: Theme.waveformCursorColor - strokeWidth: 1 - - PathLine { - id: marker - - x: playMarkerShape.width * playMarker.screenPosition - y: playMarkerShape.height - } - } - } - - Mixxx.ControlProxy { - id: scratchPositionEnableControl - - group: root.group - key: "scratch_position_enable" - } - - Mixxx.ControlProxy { - id: scratchPositionControl - - group: root.group - key: "scratch_position" - } - - Mixxx.ControlProxy { - id: wheelControl - - group: root.group - key: "wheel" - } - - MouseArea { - property int mouseStatus: WaveformRow.MouseStatus.Normal - property point mouseAnchor: Qt.point(0, 0) - - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - onPressed: { - mouseAnchor = Qt.point(mouse.x, mouse.y); - if (mouse.button == Qt.LeftButton) { - if (mouseStatus == WaveformRow.MouseStatus.Bending) - wheelControl.parameter = 0.5; - - mouseStatus = WaveformRow.MouseStatus.Scratching; - scratchPositionEnableControl.value = 1; - // TODO: Calculate position properly - scratchPositionControl.value = -mouse.x * waveform.effectiveZoomFactor * 2; - console.log(mouse.x); - } else { - if (mouseStatus == WaveformRow.MouseStatus.Scratching) - scratchPositionEnableControl.value = 0; - - wheelControl.parameter = 0.5; - mouseStatus = WaveformRow.MouseStatus.Bending; - } - } - onPositionChanged: { - switch (mouseStatus) { - case WaveformRow.MouseStatus.Bending: { - const diff = mouse.x - mouseAnchor.x; - // Start at the middle of [0.0, 1.0], and emit values based on how far - // the mouse has traveled horizontally. Note, for legacy (MIDI) reasons, - // this is tuned to 127. - const v = 0.5 + (diff / 1270); - // clamp to [0.0, 1.0] - wheelControl.parameter = Mixxx.MathUtils.clamp(v, 0, 1); - break; - }; - case WaveformRow.MouseStatus.Scratching: - // TODO: Calculate position properly - scratchPositionControl.value = -mouse.x * waveform.effectiveZoomFactor * 2; - break; - } - } - onReleased: { - switch (mouseStatus) { - case WaveformRow.MouseStatus.Bending: - wheelControl.parameter = 0.5; - break; - case WaveformRow.MouseStatus.Scratching: - scratchPositionEnableControl.value = 0; - break; - } - mouseStatus = WaveformRow.MouseStatus.Normal; - } - } -} diff --git a/res/qml/WaveformShader.qml b/res/qml/WaveformShader.qml deleted file mode 100644 index 33de4acde0cf..000000000000 --- a/res/qml/WaveformShader.qml +++ /dev/null @@ -1,88 +0,0 @@ -import Mixxx 1.0 as Mixxx -import QtQuick 2.12 - -ShaderEffect { - id: root - - property string group // required - property var deckPlayer: Mixxx.PlayerManager.getPlayer(group) - property size framebufferSize: Qt.size(width, height) - property int waveformLength: root.deckPlayer.waveformLength - property int textureSize: root.deckPlayer.waveformTextureSize - property int textureStride: root.deckPlayer.waveformTextureStride - property real firstVisualIndex: 1 - property real lastVisualIndex: root.deckPlayer.waveformLength / 2 - property color axesColor: "#FFFFFF" - property color highColor: "#0000FF" - property color midColor: "#00FF00" - property color lowColor: "#FF0000" - property real highGain: filterWaveformEnableControl.value ? (filterHighKillControl.value ? 0 : filterHighControl.value) : 1 - property real midGain: filterWaveformEnableControl.value ? (filterMidKillControl.value ? 0 : filterMidControl.value) : 1 - property real lowGain: filterWaveformEnableControl.value ? (filterLowKillControl.value ? 0 : filterLowControl.value) : 1 - property real allGain: pregainControl.value - property Image waveformTexture - - fragmentShader: "qrc:/shaders/rgbsignal_qml.frag.qsb" - - Mixxx.ControlProxy { - id: pregainControl - - group: root.group - key: "pregain" - } - - Mixxx.ControlProxy { - id: filterWaveformEnableControl - - group: root.group - key: "filterWaveformEnable" - } - - Mixxx.ControlProxy { - id: filterHighControl - - group: "[EqualizerRack1_" + root.group + "_Effect1]" - key: "parameter3" - } - - Mixxx.ControlProxy { - id: filterHighKillControl - - group: "[EqualizerRack1_" + root.group + "_Effect1]" - key: "button_parameter3" - } - - Mixxx.ControlProxy { - id: filterMidControl - - group: "[EqualizerRack1_" + root.group + "_Effect1]" - key: "parameter2" - } - - Mixxx.ControlProxy { - id: filterMidKillControl - - group: "[EqualizerRack1_" + root.group + "_Effect1]" - key: "button_parameter2" - } - - Mixxx.ControlProxy { - id: filterLowControl - - group: "[EqualizerRack1_" + root.group + "_Effect1]" - key: "parameter1" - } - - Mixxx.ControlProxy { - id: filterLowKillControl - - group: "[EqualizerRack1_" + root.group + "_Effect1]" - key: "button_parameter1" - } - - waveformTexture: Image { - visible: false - layer.enabled: false - source: root.deckPlayer.waveformTexture - } -} diff --git a/res/qml/images/gear.svg b/res/qml/images/gear.svg new file mode 100644 index 000000000000..c4f6cebc1aaa --- /dev/null +++ b/res/qml/images/gear.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + diff --git a/res/qml/images/jump_backward.svg b/res/qml/images/jump_backward.svg new file mode 100644 index 000000000000..9131647878b1 --- /dev/null +++ b/res/qml/images/jump_backward.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/qml/images/jump_forward.svg b/res/qml/images/jump_forward.svg new file mode 100644 index 000000000000..e16aff0117d4 --- /dev/null +++ b/res/qml/images/jump_forward.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/qml/images/library_computer.png b/res/qml/images/library_computer.png new file mode 100644 index 000000000000..c8fd2fd4d368 Binary files /dev/null and b/res/qml/images/library_computer.png differ diff --git a/res/qml/images/library_crates.png b/res/qml/images/library_crates.png new file mode 100644 index 000000000000..4d6874104abe Binary files /dev/null and b/res/qml/images/library_crates.png differ diff --git a/res/qml/images/library_playlist.png b/res/qml/images/library_playlist.png new file mode 100644 index 000000000000..c6f88e1ce98c Binary files /dev/null and b/res/qml/images/library_playlist.png differ diff --git a/res/qml/main.qml b/res/qml/main.qml index ced85a02856e..f79470440c41 100644 --- a/res/qml/main.qml +++ b/res/qml/main.qml @@ -1,86 +1,79 @@ import "." as Skin import Mixxx 1.0 as Mixxx import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick.Controls +import QtQuick.Layouts +import Qt5Compat.GraphicalEffects import "Theme" ApplicationWindow { id: root + property alias maximizeLibrary: maximizeLibraryButton.checked property alias show4decks: show4DecksButton.checked property alias showEffects: showEffectsButton.checked property alias showSamplers: showSamplersButton.checked - property alias maximizeLibrary: maximizeLibraryButton.checked - width: 1920 - height: 1080 color: Theme.backgroundColor + height: 1080 visible: true + width: 1920 Column { + id: content anchors.fill: parent + move: Transition { + NumberAnimation { + duration: 150 + properties: "x,y" + } + } + Rectangle { id: toolbar - - width: parent.width - height: 36 color: Theme.toolbarBackgroundColor + height: 36 radius: 1 + width: parent.width - Row { - padding: 5 - spacing: 5 + RowLayout { + anchors.fill: parent Skin.Button { id: show4DecksButton - - text: "4 Decks" activeColor: Theme.white checkable: true + text: "4 Decks" } - Skin.Button { id: maximizeLibraryButton - - text: "Library" activeColor: Theme.white checkable: true + text: "Library" } - Skin.Button { id: showEffectsButton - - text: "Effects" activeColor: Theme.white checkable: true + text: "Effects" } - Skin.Button { id: showSamplersButton - - text: "Sampler" activeColor: Theme.white checkable: true + text: "Sampler" } - - Skin.Button { - id: showPreferencesButton - - text: "Prefs" - activeColor: Theme.white - onClicked: { - Mixxx.PreferencesDialog.show(); - } + Item { + Layout.fillWidth: true } - Skin.Button { id: showDevToolsButton - - text: "Develop" activeColor: Theme.white checkable: true checked: devToolsWindow.visible + text: "Develop" + onClicked: { if (devToolsWindow.visible) devToolsWindow.close(); @@ -90,132 +83,152 @@ ApplicationWindow { DeveloperToolsWindow { id: devToolsWindow - - width: 640 height: 480 + width: 640 + } + } + Skin.Button { + id: showPreferencesButton + activeColor: Theme.white + checked: settingsPopup.opened + icon.height: 16 + icon.source: "images/gear.svg" + icon.width: 16 + implicitWidth: implicitHeight + + onClicked: { + if (!settingsPopup.opened) { + settingsPopup.open(); + } + } + onPressAndHold: { + Mixxx.PreferencesDialog.show(); } } } } - Skin.WaveformDisplay { id: deck3waveform - group: "[Channel3]" - width: root.width height: 120 visible: root.show4decks && !root.maximizeLibrary + width: root.width - FadeBehavior on visible { + FadeBehavior on visible { fadeTarget: deck3waveform } } - Skin.WaveformDisplay { id: deck1waveform - group: "[Channel1]" - width: root.width height: 120 visible: !root.maximizeLibrary + width: root.width - FadeBehavior on visible { + FadeBehavior on visible { fadeTarget: deck1waveform } } - Skin.WaveformDisplay { id: deck2waveform - group: "[Channel2]" - width: root.width height: 120 visible: !root.maximizeLibrary + width: root.width - FadeBehavior on visible { + FadeBehavior on visible { fadeTarget: deck2waveform } } - Skin.WaveformDisplay { id: deck4waveform - group: "[Channel4]" - width: root.width height: 120 visible: root.show4decks && !root.maximizeLibrary + width: root.width - FadeBehavior on visible { + FadeBehavior on visible { fadeTarget: deck4waveform } } - Skin.DeckRow { id: decks12 - leftDeckGroup: "[Channel1]" + minimized: root.maximizeLibrary rightDeckGroup: "[Channel2]" width: parent.width - minimized: root.maximizeLibrary } - Skin.CrossfaderRow { id: crossfader - crossfaderWidth: decks12.mixer.width - width: parent.width visible: !root.maximizeLibrary + width: parent.width - Skin.FadeBehavior on visible { + Skin.FadeBehavior on visible { fadeTarget: crossfader } } - Skin.DeckRow { id: decks34 - leftDeckGroup: "[Channel3]" - rightDeckGroup: "[Channel4]" - width: parent.width minimized: root.maximizeLibrary + rightDeckGroup: "[Channel4]" visible: root.show4decks + width: parent.width - Skin.FadeBehavior on visible { + Skin.FadeBehavior on visible { fadeTarget: decks34 } } - Skin.SamplerRow { id: samplers - - width: parent.width visible: root.showSamplers + width: parent.width - Skin.FadeBehavior on visible { + Skin.FadeBehavior on visible { fadeTarget: samplers } } - Skin.EffectRow { id: effects - - width: parent.width visible: root.showEffects + width: parent.width - Skin.FadeBehavior on visible { + Skin.FadeBehavior on visible { fadeTarget: effects } } - Skin.Library { - width: parent.width height: parent.height - y + width: parent.width } - - move: Transition { - NumberAnimation { - properties: "x,y" - duration: 150 + } + Skin.Settings { + id: settingsPopup + height: Math.max(840, parent.height * 0.7) + modal: true + width: Math.max(1400, parent.width * 0.8) + x: Math.round((parent.width - width) / 2) + y: Math.round((parent.height - height) / 2) + + Overlay.modal: Rectangle { + id: overlayModal + property real radius: 12 + + readonly property bool hasHardwareAcceleration: Mixxx.Config.useAcceleration() + + anchors.fill: parent + color: Qt.alpha('#00000010', hasHardwareAcceleration ? 1.0 : 0.6) + + Repeater { + model: hasHardwareAcceleration ? 1 : 0 + GaussianBlur { + anchors.fill: overlayModal + deviation: 4 + radius: Math.max(0, overlayModal.radius) + samples: 16 + source: content + } } } } diff --git a/res/skins/Deere/style.qss b/res/skins/Deere/style.qss index 698132fbae35..0b7e9c58b9a1 100644 --- a/res/skins/Deere/style.qss +++ b/res/skins/Deere/style.qss @@ -2439,6 +2439,18 @@ WEffectChainPresetSelector::indicator:unchecked:selected, outline: none; } +#CueStandardButton { +/* tall button, about the same height as cue number + label edit box */ + width: 28px; + height: 46px; + /* make the icon slightly larger than default 16px */ + qproperty-iconSize: 20px; + qproperty-icon: url(skin:/../Deere/icon/ic_loop_in_48px.svg); + background-color: #3B3B3B; + border-radius: 2px; + outline: none; +} + #CueSavedLoopButton { /* tall button, about the same height as cue number + label edit box */ width: 28px; @@ -2451,11 +2463,23 @@ WEffectChainPresetSelector::indicator:unchecked:selected, outline: none; } -#CueDeleteButton:hover, #CueSavedLoopButton:hover { +#CueSavedJumpButton { +/* tall button, about the same height as cue number + label edit box */ + width: 28px; + height: 46px; + /* make the icon slightly larger than default 16px */ + qproperty-iconSize: 20px; + qproperty-icon: url(skin:/../Deere/icon/ic_beatjump_forward_48px.svg); + background-color: #3B3B3B; + border-radius: 2px; + outline: none; +} + +#CueDeleteButton:hover, #CueStandardButton:hover, #CueSavedLoopButton:hover, #CueSavedJumpButton:hover { background-color: #4B4B4B; } -#CueSavedLoopButton:checked { +#CueDeleteButton:checked, #CueStandardButton:checked, #CueSavedLoopButton:checked, #CueSavedJumpButton:checked { background-color: #006596; } diff --git a/res/skins/LateNight/classic/buttons/btn__bpm_select_edit.svg b/res/skins/LateNight/classic/buttons/btn__bpm_select_edit.svg new file mode 100644 index 000000000000..c707ee4610d8 --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__bpm_select_edit.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/skins/LateNight/classic/buttons/btn__bpm_select_tap.svg b/res/skins/LateNight/classic/buttons/btn__bpm_select_tap.svg new file mode 100644 index 000000000000..8cd1a6190baa --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__bpm_select_tap.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_minus.svg b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_minus.svg new file mode 100644 index 000000000000..f27274bf9864 --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_minus.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_minus_pressed.svg b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_minus_pressed.svg new file mode 100644 index 000000000000..ed779861a128 --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_minus_pressed.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_plus.svg b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_plus.svg new file mode 100644 index 000000000000..e88f557fb0a6 --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_plus.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_plus_pressed.svg b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_plus_pressed.svg new file mode 100644 index 000000000000..676b351296e3 --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__bpm_spinbox_plus_pressed.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/res/skins/LateNight/classic/buttons/spinbox_down_pressed.svg b/res/skins/LateNight/classic/buttons/spinbox_down_pressed.svg index ae2f639884e1..b5e1582e2680 100644 --- a/res/skins/LateNight/classic/buttons/spinbox_down_pressed.svg +++ b/res/skins/LateNight/classic/buttons/spinbox_down_pressed.svg @@ -1,14 +1,14 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/res/skins/LateNight/classic/buttons/spinbox_up_pressed.svg b/res/skins/LateNight/classic/buttons/spinbox_up_pressed.svg index 0356b0c6b029..83dee27b45bd 100644 --- a/res/skins/LateNight/classic/buttons/spinbox_up_pressed.svg +++ b/res/skins/LateNight/classic/buttons/spinbox_up_pressed.svg @@ -1,14 +1,14 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/res/skins/LateNight/classic/style/mark_jump_backward.svg b/res/skins/LateNight/classic/style/mark_jump_backward.svg new file mode 100644 index 000000000000..32eb6fe7fa84 --- /dev/null +++ b/res/skins/LateNight/classic/style/mark_jump_backward.svg @@ -0,0 +1,51 @@ + + + + + + diff --git a/res/skins/LateNight/classic/style/mark_jump_forward.svg b/res/skins/LateNight/classic/style/mark_jump_forward.svg new file mode 100644 index 000000000000..1bac1d9150f8 --- /dev/null +++ b/res/skins/LateNight/classic/style/mark_jump_forward.svg @@ -0,0 +1,51 @@ + + + + + + diff --git a/res/skins/LateNight/decks/rate_controls.xml b/res/skins/LateNight/decks/rate_controls.xml index 8736cf01feb9..156b5e1299c8 100644 --- a/res/skins/LateNight/decks/rate_controls.xml +++ b/res/skins/LateNight/decks/rate_controls.xml @@ -20,40 +20,32 @@ min,me - - BpmRateTapContainer + + + + BpmTapSyncContainer vertical - min,me - ,46 + min,min + BpmTapContainer - stacked - 57f,-1me + + 62f,42f - - - tempo_tap_bpm_tap_visual_bpm - BpmTap - 57f,-1me - 1 - - ,tempo_tap - - - ,bpm_tap - RightButton - - - + + AlignCenter + 0,0 vertical - 57f,-1me + 62f,-1me BpmText visual_bpm - 57f,22f + 62f,22f center 2 @@ -69,43 +61,50 @@ + + + visual_bpm_edit + 0,0 + 62f,42f + + - - - + - - SyncBox - horizontal - min,min - - - sync_enabled - SyncDeck - 40f,22f - 2 - true - - ,sync_enabled - LeftButton - - - ,sync_leader - RightButton - - - - sync_leader - SyncLeader - 22f,22f - 3 - - ,sync_leader - LeftButton - - + + SyncBox + horizontal + min,min + + + sync_enabled + SyncDeck + 40f,22f + 2 + true + + ,sync_enabled + LeftButton + + + ,sync_leader + RightButton + + + + sync_leader + SyncLeader + 22f,22f + 3 + + ,sync_leader + LeftButton + + + + - + 0min,0me diff --git a/res/skins/LateNight/decks/rate_controls_compact.xml b/res/skins/LateNight/decks/rate_controls_compact.xml index 77a92533863e..1164e14ed718 100644 --- a/res/skins/LateNight/decks/rate_controls_compact.xml +++ b/res/skins/LateNight/decks/rate_controls_compact.xml @@ -15,105 +15,171 @@ - BpmRateTapContainer + RateContainer vertical - min,min + max,min - - BpmTapContainer - stacked - 60f,40f + + + + BpmTapSyncContainer + vertical + min,max - - - tempo_tap_bpm_tap_visual_bpm - BpmTap - me,me - 1 - - ,tempo_tap - - - ,bpm_tap - RightButton - - - - AlignCenter - vertical - me,me + + + BpmTapContainer + + 62f,42f + + + + AlignCenter + 0,0 + vertical + 62f,42f + + + BpmText + visual_bpm + 62f,22f + center + 2 + + ,visual_bpm + + + + rate_display + RateText + center + + 2 + + + + + + visual_bpm_edit + 0,0 + 62f,42f + + + + + + + SyncBox + horizontal + min,min - - BpmText - visual_bpm - -1me,22f - center - 2 + + sync_enabled + SyncDeck + 40f,22f + 2 + true + + ,sync_enabled + LeftButton + - ,visual_bpm + ,sync_leader + RightButton - - - rate_display - RateText - - center - 2 - + + + sync_leader + SyncLeader + 22f,22f + 3 + + ,sync_leader + LeftButton + + - + + [LateNight],show_sync_button_compact + visible + + - + - 0min,0me + 0f,0me RateControls - min,min horizontal + min,min - - - AlignCenter - min,min - vertical - - - SyncBoxCompact - horizontal - min,min + + + RateStack + + + + RateSliderBoxCompact + 59f,97f + stacked - - sync_enabled - SyncDeck - 40f,22f - 2 - true - - ,sync_enabled - LeftButton - - - ,sync_leader - RightButton - - - - sync_leader - SyncLeader - 22f,22f - 3 - - ,sync_leader - LeftButton - - + + + 54f,97f + + + + + RateSlider + 40f,95f + 10,2 + rate + skins:LateNight//sliders/knob_pitch_deck.svg + skins:LateNight//sliders/slider_pitch_deck_compact.svg + false + + + + true + 20.0 + false + + ,rate + + + + + + + min,me + vertical + + + RateRangeDisplayTop + + 0min,0me + + RateRangeDisplayBottom + + + - + - - RateSliderBoxCompactSync + + RateSliderBoxCompact stacked max,me @@ -124,7 +190,7 @@ - - - - [LateNight],show_sync_button_compact - visible - - - - - RateSliderBoxCompact - max,min - stacked - - - - 54f,97f - - - - - RateSlider - 40f,95f - 5,2 - rate - skins:LateNight//sliders/knob_pitch_deck.svg - skins:LateNight//sliders/slider_pitch_deck_compact.svg - false - - - - true - 20.0 - false - - ,rate - - - - + - - min,me - vertical - - - RateRangeDisplayTop - - 0min,0me - - RateRangeDisplayBottom - - - - - [LateNight],show_sync_button_compact - - visible - - + + - 0min,0me + 0f,0me diff --git a/res/skins/LateNight/palemoon/buttons/btn__1_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__1_jump_active.svg new file mode 100644 index 000000000000..32db0fbeef18 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__1_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__1_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__1_jump_backward_active.svg new file mode 100644 index 000000000000..3a5cbf0fa4c6 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__1_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__1_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__1_jump_backward_set.svg new file mode 100644 index 000000000000..80d42927df85 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__1_jump_backward_set.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__1_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__1_jump_set.svg new file mode 100644 index 000000000000..df9ede90a00f --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__1_jump_set.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 1 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__2_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__2_jump_active.svg new file mode 100644 index 000000000000..65852c2770bd --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__2_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 2 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__2_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__2_jump_backward_active.svg new file mode 100644 index 000000000000..5f3f6beae404 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__2_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 2 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__2_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__2_jump_backward_set.svg new file mode 100644 index 000000000000..e659764ff09e --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__2_jump_backward_set.svg @@ -0,0 +1,141 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 2 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__2_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__2_jump_set.svg new file mode 100644 index 000000000000..878c29d5d780 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__2_jump_set.svg @@ -0,0 +1,139 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 2 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__3_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__3_jump_active.svg new file mode 100644 index 000000000000..8c1e1f74e21c --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__3_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 3 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__3_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__3_jump_backward_active.svg new file mode 100644 index 000000000000..42279089324c --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__3_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 3 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__3_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__3_jump_backward_set.svg new file mode 100644 index 000000000000..24cdf8a22619 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__3_jump_backward_set.svg @@ -0,0 +1,142 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 3 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__3_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__3_jump_set.svg new file mode 100644 index 000000000000..9e0fb7988d16 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__3_jump_set.svg @@ -0,0 +1,139 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 3 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__4_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__4_jump_active.svg new file mode 100644 index 000000000000..af6642fed585 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__4_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 4 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__4_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__4_jump_backward_active.svg new file mode 100644 index 000000000000..6b7edbf3dde8 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__4_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 4 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__4_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__4_jump_backward_set.svg new file mode 100644 index 000000000000..a713dcb31f9a --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__4_jump_backward_set.svg @@ -0,0 +1,141 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 4 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__4_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__4_jump_set.svg new file mode 100644 index 000000000000..975238cd8819 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__4_jump_set.svg @@ -0,0 +1,139 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 4 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__5_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__5_jump_active.svg new file mode 100644 index 000000000000..c763f411727d --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__5_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 5 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__5_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__5_jump_backward_active.svg new file mode 100644 index 000000000000..33f2d776f67c --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__5_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 5 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__5_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__5_jump_backward_set.svg new file mode 100644 index 000000000000..6d95d1c93e06 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__5_jump_backward_set.svg @@ -0,0 +1,141 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 5 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__5_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__5_jump_set.svg new file mode 100644 index 000000000000..e795b9511e65 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__5_jump_set.svg @@ -0,0 +1,139 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 5 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__6_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__6_jump_active.svg new file mode 100644 index 000000000000..f30ba783b5b5 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__6_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 6 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__6_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__6_jump_backward_active.svg new file mode 100644 index 000000000000..2462bab48307 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__6_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 6 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__6_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__6_jump_backward_set.svg new file mode 100644 index 000000000000..4ee803845153 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__6_jump_backward_set.svg @@ -0,0 +1,141 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 6 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__6_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__6_jump_set.svg new file mode 100644 index 000000000000..5330e902b77d --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__6_jump_set.svg @@ -0,0 +1,139 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 6 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__7_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__7_jump_active.svg new file mode 100644 index 000000000000..c8627f977f95 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__7_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 7 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__7_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__7_jump_backward_active.svg new file mode 100644 index 000000000000..59d22b14edc7 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__7_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 7 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__7_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__7_jump_backward_set.svg new file mode 100644 index 000000000000..bdf8f36c43ec --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__7_jump_backward_set.svg @@ -0,0 +1,141 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 7 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__7_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__7_jump_set.svg new file mode 100644 index 000000000000..bda752ca3323 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__7_jump_set.svg @@ -0,0 +1,139 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 7 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__8_jump_active.svg b/res/skins/LateNight/palemoon/buttons/btn__8_jump_active.svg new file mode 100644 index 000000000000..40febc1fde78 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__8_jump_active.svg @@ -0,0 +1,138 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 8 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__8_jump_backward_active.svg b/res/skins/LateNight/palemoon/buttons/btn__8_jump_backward_active.svg new file mode 100644 index 000000000000..6329382ee52a --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__8_jump_backward_active.svg @@ -0,0 +1,140 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 8 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__8_jump_backward_set.svg b/res/skins/LateNight/palemoon/buttons/btn__8_jump_backward_set.svg new file mode 100644 index 000000000000..9b0a526335ba --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__8_jump_backward_set.svg @@ -0,0 +1,141 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 8 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__8_jump_set.svg b/res/skins/LateNight/palemoon/buttons/btn__8_jump_set.svg new file mode 100644 index 000000000000..14816a72589f --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__8_jump_set.svg @@ -0,0 +1,139 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 8 + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__bpm_select_edit.svg b/res/skins/LateNight/palemoon/buttons/btn__bpm_select_edit.svg new file mode 100644 index 000000000000..db137487b591 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__bpm_select_edit.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__bpm_select_tap.svg b/res/skins/LateNight/palemoon/buttons/btn__bpm_select_tap.svg new file mode 100644 index 000000000000..c8607f950187 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__bpm_select_tap.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__bpm_spinbox_minus.svg b/res/skins/LateNight/palemoon/buttons/btn__bpm_spinbox_minus.svg new file mode 100644 index 000000000000..d63889bcbbcb --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__bpm_spinbox_minus.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__bpm_spinbox_plus.svg b/res/skins/LateNight/palemoon/buttons/btn__bpm_spinbox_plus.svg new file mode 100644 index 000000000000..bac91ac3c610 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__bpm_spinbox_plus.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/skins/LateNight/palemoon/buttons/btn__jump_backward.svg b/res/skins/LateNight/palemoon/buttons/btn__jump_backward.svg new file mode 120000 index 000000000000..aef92f44c47c --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__jump_backward.svg @@ -0,0 +1 @@ +btn__beatjump_left.svg \ No newline at end of file diff --git a/res/skins/LateNight/palemoon/buttons/btn__jump_forward.svg b/res/skins/LateNight/palemoon/buttons/btn__jump_forward.svg new file mode 120000 index 000000000000..8b75f65c6344 --- /dev/null +++ b/res/skins/LateNight/palemoon/buttons/btn__jump_forward.svg @@ -0,0 +1 @@ +btn__beatjump_right.svg \ No newline at end of file diff --git a/res/skins/LateNight/style.qss b/res/skins/LateNight/style.qss index c3997c4afc52..ffa57fd19755 100644 --- a/res/skins/LateNight/style.qss +++ b/res/skins/LateNight/style.qss @@ -13,6 +13,7 @@ WTrackProperty, WRecordingDuration, QSpinBox, WBeatSpinBox, +WBpmEditor QDoubleSpinBox, WCueMenuPopup, WCueMenuPopup QLabel, WCueMenuPopup QLineEdit, @@ -481,14 +482,9 @@ WSpinny { /* #SyncBox { qproperty-layoutAlignment: 'AlignHCenter | AlignTop'; } -#BpmRateTapContainer { - margin: 1px; -} #RateControls { qproperty-layoutAlignment: 'AlignHCenter | AlignBottom'; -} -#RateSliderBoxCompactSync { margin-left: 5px; } @@ -498,6 +494,18 @@ WTrackProperty[selected="false"] { border: 0px solid transparent; border-radius: 1px; } + +#BpmClickOverlay, +#BpmTapButton, +#BpmTapButton:focus { + background-color: transparent; +} +WBpmEditor, +#BpmClickOverlay { + border: none; +} + + /************** Decks ********************************************************/ diff --git a/res/skins/LateNight/style_classic.qss b/res/skins/LateNight/style_classic.qss index 3df5b9279419..78d1d0179a6d 100644 --- a/res/skins/LateNight/style_classic.qss +++ b/res/skins/LateNight/style_classic.qss @@ -88,11 +88,20 @@ WLibrary, WTrackProperty:hover, WTrackProperty:hover[selected="false"], WTrackProperty:hover[selected="true"], -#BpmTapContainer:hover { +#BpmTapContainer:hover, +#BpmTapSelectButton, +#BpmEditSelectButton { background-color: #151517; border-radius: 1px; } - #BpmTap[pressed="true"] { + #BpmTapSelectButton { + image: url(skins:LateNight/classic/buttons/btn__bpm_select_tap.svg) no-repeat center center; + } + #BpmEditSelectButton { + border-left: 0px; + image: url(skins:LateNight/classic/buttons/btn__bpm_select_edit.svg) no-repeat left top; + } + #BpmTapButton[pressed="true"] { border: 1px solid #7d350d; } @@ -287,16 +296,13 @@ WSearchLineEdit, } WBeatSpinBox, +WBpmEditor QDoubleSpinBox, #spinBoxTransition { selection-color: #000; selection-background-color: #d2d2d2; } - WBeatSpinBox:focus { - selection-color: #000; - selection-background-color: #d2d2d2; - } WBeatSpinBox:focus, - #spinBoxTransition:focus { + WBpmEditor QDoubleSpinBox:focus { background-color: #000; } @@ -604,7 +610,7 @@ WLibrary { /************** RateControls ********************************************/ #RateContainer { - padding: 4px 0px 0px 0px; + padding: 2px 0px 0px 0px; } #RateText { @@ -612,8 +618,8 @@ WLibrary { margin: 0px; } - #SyncBox { - margin: 2px 1px 1px 2px; + #BpmTapSyncContainer { + margin: 0px 2px 1px 2px; } #RateControls { @@ -627,12 +633,16 @@ WLibrary { /********************** Loop Controls / AutoDJ spinbox ************************/ +WBeatSpinBox, +WBpmEditor QDoubleSpinBox, +#spinBoxTransition { + background-color: #0f0f0f; + } WBeatSpinBox { border-width: 2px 19px 2px 2px; border-image: url(skins:LateNight/classic/buttons/spinbox_elevated_border.svg) 2 19 2 2; margin: 1px 0px 0px 1px; padding: 0px -17px 2px 1px; - background-color: #0f0f0f; } WBeatSpinBox:focus { border-image: url(skins:LateNight/classic/buttons/spinbox_elevated_border_focus.svg) 2 19 2 2; @@ -645,7 +655,6 @@ WLibrary { height: 19px; padding: 0px -15px 0px 0px; margin: 0px 2px 3px 5px; - background-color: #0f0f0f; } #spinBoxTransition:focus { border-image: url(skins:LateNight/classic/buttons/spinbox_embedded_border_focus_orange.svg) 3 19 2 3; @@ -695,6 +704,54 @@ WLibrary { } +WBpmEditor { + padding: 0px; + margin: 0px; + border: none; +} +WBpmEditor QDoubleSpinBox, +WBpmEditor QDoubleSpinBox:focus { + border-image: none; + border: 1px solid #d08e00; + border-radius: 2px; + margin: 0px; + /* top/bottom padding is required to make room for the buttons! */ + padding: 2px 0px 16px 0px; + font-size: 14px/14px; +} +WBpmEditor QDoubleSpinBox QLineEdit { + text-align: center; +} + +WBpmEditor QDoubleSpinBox::up-button, +WBpmEditor QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom; + position: absolute; + height: 16px; + width: 30px; + background-color: #171719; +} +WBpmEditor QDoubleSpinBox::up-button { + image: url(skins:LateNight/classic/buttons/btn__bpm_spinbox_plus.svg) no-repeat; + bottom: 0px; + left: 30px; + right: 0px; + } + WBpmEditor QDoubleSpinBox::up-button:pressed { + image: url(skins:LateNight/classic/buttons/btn__bpm_spinbox_plus_pressed.svg) no-repeat; + } +WBpmEditor QDoubleSpinBox::down-button { + bottom: 0px; + left: 0px; + right: 30px; + image: url(skins:LateNight/classic/buttons/btn__bpm_spinbox_minus.svg) no-repeat; + } + WBpmEditor QDoubleSpinBox::down-button:pressed { + image: url(skins:LateNight/classic/buttons/btn__bpm_spinbox_minus_pressed.svg) no-repeat; + } + + /************** Mixer *********************************************************/ @@ -1214,7 +1271,9 @@ WSearchLineEdit QAbstractScrollArea, #fadeModeCombobox:!editable, #fadeModeCombobox:!editable:on, #fadeModeCombobox QAbstractScrollArea, -WBeatSpinBox, #spinBoxTransition, +WBeatSpinBox, +#spinBoxTransition, +WBpmEditor QDoubleSpinBox, #LibraryFeatureControls QLabel, #LibraryFeatureControls QRadioButton { color: #888; @@ -1640,7 +1699,6 @@ QPushButton#pushButtonAnalyze:checked { WPushButton#PlayDeck[displayValue="0"], WPushButton#PlayDeckMini[displayValue="0"], WPushButton#PlaySampler[displayValue="0"], -WPushButton#BpmTap[displayValue="0"], WPushButton#FxFocusButton[displayValue="0"], #SamplerSettings WPushButton[displayValue="0"], #SamplerSettingsMini WPushButton[displayValue="0"], @@ -2116,8 +2174,28 @@ QPushButton#pushButtonRepeatPlaylist:!checked { } /* widgets in cue popup menu */ -#CueDeleteButton, -#CueSavedLoopButton { +#CueDeleteButton { + qproperty-icon: url(skins:LateNight/classic/buttons/btn__delete.svg); + /* color buttons are 42x24 px. + To get the final size for the Delete button consider border width. + It's a tall button, about the same height as cue number + label edit box */ + width: 24px; + height: 24px; + border-width: 2px; + border-image: url(skins:LateNight/classic/buttons/btn_embedded_library.svg) 2 2 2 2; + qproperty-iconSize: 18px; + /* has no effect + padding: 0px; */ +} +#CueDeleteButton:hover { + background-color: #6c2e2e; +} + +#CueDeleteButton[pressed="true"], #CueDeleteButton:pressed, #CueDeleteButton:clicked { + background-color: #dc4141 !important; +} + +#CueStandardButton, #CueSavedLoopButton, #CueSavedJumpButton { /* color buttons are 42x24 px. To get the final size for the Delete button consider border width. It's a tall button, about the same height as cue number + label edit box */ @@ -2125,18 +2203,43 @@ QPushButton#pushButtonRepeatPlaylist:!checked { height: 42px; border-width: 2px; border-image: url(skins:LateNight/classic/buttons/btn_embedded_library.svg) 2 2 2 2; + /* make the icon slightly larger than default 16px */ + qproperty-iconSize: 20px; + /* has no effect + padding: 0px; */ } #CueDeleteButton { image: url(skins:LateNight/classic/buttons/btn__delete.svg); } +#CueStandardButton { + qproperty-icon: url(skins:LateNight/classic/buttons/btn__beats_hotcues_later.svg); +} #CueSavedLoopButton { image: url(skins:LateNight/classic/buttons/btn__loop.svg); + qproperty-icon: url(skins:LateNight/classic/buttons/btn__loop.svg); +} +#CueSavedJumpButton[direction="impossible"], #CueSavedJumpButton[direction="forward"] { + qproperty-icon: url(skins:LateNight/classic/buttons/btn__beatjump_right.svg); } -#CueDeleteButton:pressed, +#CueSavedJumpButton[direction="backward"] { + qproperty-icon: url(skins:LateNight/classic/buttons/btn__beatjump_left.svg); +} + #CueSavedLoopButton:pressed, #CueSavedLoopButton:checked { background-color: #db0000; outline: none; + image: url(skins:LateNight/classic/buttons/btn__loop_active.svg); +} + +#CueSavedJumpButton:pressed, WCueMenuPopup #CueSavedJumpButton:checked, + #CueStandardButton:pressed, WCueMenuPopup #CueStandardButton:checked { + background-color: #db0000; + outline: none; +} +#CueSavedJumpButton[direction="impossible"] { + background-color: #787878 !important; + outline: none; } #CueLabelEdit { @@ -2252,13 +2355,23 @@ WLibrary QPlainTextEdit, #LibraryBPMSpinBox, /* Track label inline editor in decks and samplers */ WTrackPropertyEditor, -WTrackProperty[selected="true"] { +WTrackProperty[selected="true"], +#BpmTapSelectButton, #BpmEditSelectButton { color: #ddd; background-color: #0f0f0f; selection-color: #000; selection-background-color: #ccc; border: 1px solid #5E4507; } +#BpmTapSelectButton { + border-right: 0px; +} +#BpmTapButton { + border: 1px solid #5E4507; + } + #BpmTapButton:pressed { + border: 1px solid #d08e00; + } /* Entire BPM cell */ /* Lock icon at the left */ diff --git a/res/skins/LateNight/style_palemoon.qss b/res/skins/LateNight/style_palemoon.qss index 4eb0deadec76..3543f5720f95 100644 --- a/res/skins/LateNight/style_palemoon.qss +++ b/res/skins/LateNight/style_palemoon.qss @@ -353,6 +353,8 @@ WTrackProperty:hover[selected="false"], WTrackProperty:hover[selected="true"], WTrackProperty[selected="true"], #BpmTapContainer:hover, +#BpmTapSelectButton, +#BpmEditSelectButton, #PlayPositionText:hover, #PlayPositionTextSmall:hover { background-color: #151517; } @@ -360,10 +362,21 @@ WTrackProperty[selected="true"], WTrackProperty[selected="true"] { background-color: #181819; } - #BpmTap[pressed="true"], - WTrackProperty[selected="true"] { + WTrackProperty[selected="true"], + #BpmTapSelectButton, + #BpmEditSelectButton, + #BpmTapButton { border: 1px solid #7d350d; -/* border: 1px solid #888;*/ + } + #BpmTapSelectButton { + border-right: 0px; + image: url(skins:LateNight/palemoon/buttons/btn__bpm_select_tap.svg) no-repeat center center; + } + #BpmEditSelectButton { + image: url(skins:LateNight/palemoon/buttons/btn__bpm_select_edit.svg) no-repeat left top; + } + #BpmTapButton:pressed { + border: 1px solid #257b82; } /* Disabled for now since the hover effect is stuck as soon as the @@ -640,7 +653,7 @@ WTrackProperty[selected="true"], /************** RateControls ********************************************/ #RateContainer { - padding: 4px 0px 0px 0px; + padding: 2px 0px 0px 0px; } #RateText { @@ -648,8 +661,8 @@ WTrackProperty[selected="true"], margin: 0px 2px 0px 0px; } -#SyncBox { - margin: 2px 1px 1px 2px; +#BpmTapSyncContainer { + margin: 0px 2px 1px 2px; } #RateControls { @@ -659,11 +672,13 @@ WTrackProperty[selected="true"], /********************** Loop Controls / AutoDJ spinbox ************************/ WBeatSpinBox, +WBpmEditor QDoubleSpinBox, #spinBoxTransition { selection-color: #a7998b; selection-background-color: #111; } WBeatSpinBox:focus, + WBpmEditor QDoubleSpinBox:focus, #spinBoxTransition:focus, #LibraryBPMSpinBox:focus { selection-color: #000; @@ -675,6 +690,7 @@ WBeatSpinBox { border-width: 3px 19px 2px 3px; border-image: url(skins:LateNight/palemoon/buttons/btn_embedded_spinbox.svg) 3 19 2 3; } + #spinBoxTransition { width: 24px; height: 19px; @@ -682,11 +698,11 @@ WBeatSpinBox { margin: 0px 2px 3px 5px; border-width: 3px 19px 2px 3px; border-image: url(skins:LateNight/palemoon/buttons/btn_embedded_spinbox_autodj.svg) 3 19 2 3; - } - WBeatSpinBox:focus, - #spinBoxTransition:focus { - border-image: url(skins:LateNight/palemoon/buttons/btn_embedded_spinbox_focus_blue.svg) 3 19 2 3; - } +} +WBeatSpinBox:focus, +#spinBoxTransition:focus { + border-image: url(skins:LateNight/palemoon/buttons/btn_embedded_spinbox_focus_blue.svg) 3 19 2 3; +} WBeatSpinBox::up-button, WBeatSpinBox::down-button, @@ -694,34 +710,74 @@ WBeatSpinBox::down-button, #spinBoxTransition::down-button { subcontrol-origin: content; position: relative; - /* as with spinbox: border is added to size. */ - width: 18px; padding: 0px; + width: 18px; } + WBeatSpinBox::up-button, #spinBoxTransition::up-button { - height: 11px; subcontrol-position: top right; image: url(skins:LateNight/palemoon/buttons/btn__spinbox_up.svg) no-repeat; + height: 11px; } WBeatSpinBox::up-button { margin: -2px -1px 0px 0px; - } + } #spinBoxTransition::up-button { margin: -2px -3px 0px 0px; - } + } + WBeatSpinBox::down-button, #spinBoxTransition::down-button { - height: 11px; subcontrol-position: bottom right; image: url(skins:LateNight/palemoon/buttons/btn__spinbox_down.svg) no-repeat; + height: 11px; + margin: 0px -1px -3px 0px; } - WBeatSpinBox::down-button { - margin: 0px -1px -3px 0px; - } #spinBoxTransition::down-button { margin: 0px -3px -1px 0px; - } + } + +WBpmEditor { + padding: 0px; + margin: 0px; + border: none; +} +WBpmEditor QDoubleSpinBox, +WBpmEditor QDoubleSpinBox:focus { + border-image: none; + border: 1px solid #257b82; + border-radius: 2px; + margin: 0px; + /* top/bottom padding is required to make room for the buttons! */ + padding: 2px 0px 16px 0px; + font-size: 14px/14px; +} +WBpmEditor QDoubleSpinBox QLineEdit { + text-align: center; +} + +WBpmEditor QDoubleSpinBox::up-button, +WBpmEditor QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom; + position: absolute; + height: 16px; + width: 30px; + background-color: #171719; +} +WBpmEditor QDoubleSpinBox::up-button { + image: url(skins:LateNight/palemoon/buttons/btn__bpm_spinbox_plus.svg) no-repeat; + bottom: 0px; + left: 30px; + right: 0px; + } +WBpmEditor QDoubleSpinBox::down-button { + bottom: 0px; + left: 0px; + right: 30px; + image: url(skins:LateNight/palemoon/buttons/btn__bpm_spinbox_minus.svg) no-repeat; +} /************** Mixer ***************************************************/ @@ -1303,6 +1359,7 @@ WEffectChainPresetSelector:!editable:on, } WBeatSpinBox, + WBpmEditor QDoubleSpinBox, #spinBoxTransition { color: #a7998b; } @@ -1494,13 +1551,13 @@ WEffectSelector:!editable, #fadeModeCombobox:!editable, #LibraryFeatureControls QPushButton:enabled, #CueDeleteButton, -#CueSavedLoopButton { +#CueStandardButton, +#CueSavedLoopButton, +#CueSavedJumpButton { outline: none; border-width: 2px; border-image: url(skins:LateNight/palemoon/buttons/btn_embedded_library.svg) 2 2 2 2; } - /* - WPushButton#BpmTap[displayValue="1"], */ WPushButton#VinylStatus[displayValue="1"], WPushButton#VinylStatus[displayValue="2"], WPushButton#VinylStatus[displayValue="3"], @@ -1524,8 +1581,12 @@ WEffectSelector:!editable, WEffectSelector:!editable:on, #fadeModeCombobox:!editable:on, #CueDeleteButton[pressed="true"], + #CueStandardButton[pressed="true"], + #CueStandardButton:checked, #CueSavedLoopButton[pressed="true"], - #CueSavedLoopButton:checked { + #CueSavedLoopButton:checked, + #CueSavedJumpButton[pressed="true"], + #CueSavedJumpButton:checked { border-width: 2px; border-image: url(skins:LateNight/palemoon/buttons/btn_embedded_library_active.svg) 2 2 2 2; } @@ -1613,7 +1674,8 @@ WPushButton#FxToggleButton[displayValue="0"], #MicDuckingContainer WPushButton[displayValue="0"], WBeatSpinBox, WBeatSpinBox::up-button, -WBeatSpinBox::down-button { +WBeatSpinBox::down-button, +WBpmEditor QDoubleSpinBox { background-color: #121213; } /* dim buttons in top-level containers */ @@ -1659,7 +1721,9 @@ WBeatSpinBox::down-button { /* bright buttons in dimmed containers #BeatgridControls WPushButton[displayValue="0"], */ #CueDeleteButton, + #CueStandardButton, #CueSavedLoopButton, + #CueSavedJumpButton, #SplitCue[displayValue="0"], #PlayPreview[displayValue="0"], /* library controls */ @@ -1715,9 +1779,12 @@ WPushButton#LoopAnchor[pressed="true"], #BeatjumpControls WPushButton[value="1"], #RateControls WPushButton[value="1"], #BeatgridControls WPushButton[pressed="true"]/*, -#CueDeleteButton[pressed="true"], +#CueStandardButton[pressed="true"], +#CueStandardButton:checked, #CueSavedLoopButton[pressed="true"], -#CueSavedLoopButton:checked*/ { +#CueSavedLoopButton:checked, +#CueSavedJumpButton[pressed="true"], +#CueSavedJumpButton:checked*/ { background-color: #7d350d; } @@ -1744,6 +1811,8 @@ WPushButton#VinylStatus[displayValue="1"], /* enabled, OK */ /* Blue for Fx buttons 3/4 */ #FxUnit3 #FxToggleButton[displayValue="1"], #FxUnit4 #FxToggleButton[displayValue="1"], +WBpmEditor QDoubleSpinBox::up-button:pressed, +WBpmEditor QDoubleSpinBox::down-button:pressed, WBeatSpinBox::up-button:pressed, WBeatSpinBox::down-button:pressed, #spinBoxTransition::up-button:pressed, @@ -1954,6 +2023,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue1 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__1_loop_dark.svg) no-repeat center center; } + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__1_jump_active.svg) no-repeat center center; + } + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__1_jump_backward_active.svg) no-repeat center center; + } + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__1_jump_set.svg) no-repeat center center; + } + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue1 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue1 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__1_jump_backward_set.svg) no-repeat center center; + } #Hotcue2 WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__2.svg) no-repeat center center; @@ -1974,6 +2067,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue2 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__2_loop_dark.svg) no-repeat center center; } + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__2_jump_active.svg) no-repeat center center; + } + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__2_jump_backward_active.svg) no-repeat center center; + } + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__2_jump_set.svg) no-repeat center center; + } + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue2 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue2 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__2_jump_backward_set.svg) no-repeat center center; + } #Hotcue3 WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__3.svg) no-repeat center center; @@ -1994,6 +2111,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue3 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__3_loop_dark.svg) no-repeat center center; } + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__3_jump_active.svg) no-repeat center center; + } + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__3_jump_backward_active.svg) no-repeat center center; + } + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__3_jump_set.svg) no-repeat center center; + } + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue3 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue3 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__3_jump_backward_set.svg) no-repeat center center; + } #Hotcue4 WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__4.svg) no-repeat center center; @@ -2014,6 +2155,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue4 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__4_loop_dark.svg) no-repeat center center; } + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__4_jump_active.svg) no-repeat center center; + } + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__4_jump_backward_active.svg) no-repeat center center; + } + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__4_jump_set.svg) no-repeat center center; + } + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue4 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue4 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__4_jump_backward_set.svg) no-repeat center center; + } #Hotcue5 WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__5.svg) no-repeat center center; @@ -2034,6 +2199,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue5 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__5_loop_dark.svg) no-repeat center center; } + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__5_jump_active.svg) no-repeat center center; + } + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__5_jump_backward_active.svg) no-repeat center center; + } + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__5_jump_set.svg) no-repeat center center; + } + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue5 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue5 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__5_jump_backward_set.svg) no-repeat center center; + } #Hotcue6 WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__6.svg) no-repeat center center; @@ -2054,6 +2243,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue6 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__6_loop_dark.svg) no-repeat center center; } + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__6_jump_active.svg) no-repeat center center; + } + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__6_jump_backward_active.svg) no-repeat center center; + } + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__6_jump_set.svg) no-repeat center center; + } + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue6 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue6 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__6_jump_backward_set.svg) no-repeat center center; + } #Hotcue7 WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__7.svg) no-repeat center center; @@ -2074,6 +2287,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue7 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__7_loop_dark.svg) no-repeat center center; } + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__7_jump_active.svg) no-repeat center center; + } + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__7_jump_backward_active.svg) no-repeat center center; + } + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__7_jump_set.svg) no-repeat center center; + } + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue7 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue7 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__7_jump_backward_set.svg) no-repeat center center; + } #Hotcue8 WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__8.svg) no-repeat center center; @@ -2094,6 +2331,30 @@ WPushButton#PlayDeck[value="0"] { #Hotcue8 WPushButton[type="loop"][displayValue="2"][dark="true"] { image: url(skins:LateNight/palemoon/buttons/btn__8_loop_dark.svg) no-repeat center center; } + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="true"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="true"], + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="true"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__8_jump_active.svg) no-repeat center center; + } + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="true"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="true"], + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="true"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="true"] { + image: url(skins:LateNight/palemoon/buttons/btn__8_jump_backward_active.svg) no-repeat center center; + } + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="false"][active="false"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="false"][active="false"], + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="forward"][dark="true"][active="false"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="forward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__8_jump_set.svg) no-repeat center center; + } + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="false"][active="false"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="false"][active="false"], + #Hotcue8 WPushButton[type="jump"][displayValue="1"][direction="backward"][dark="true"][active="false"], + #Hotcue8 WPushButton[type="jump"][displayValue="2"][direction="backward"][dark="true"][active="false"] { + image: url(skins:LateNight/palemoon/buttons/btn__8_jump_backward_set.svg) no-repeat center center; + } #SpecialCueButton_intro_start WPushButton[displayValue="0"] { image: url(skins:LateNight/palemoon/buttons/btn__intro_start.svg) no-repeat center center; @@ -2578,30 +2839,72 @@ QPushButton#pushButtonRepeatPlaylist:!checked { /* AutoDJ button icons */ /* widgets in cue popup menu */ -WCueMenuPopup #CueDeleteButton, +WCueMenuPopup #CueDeleteButton { + icon: url(skins:LateNight/palemoon/buttons/btn__delete.svg); + width: 24px; + height: 24px; + icon-size: 18px; +} +WCueMenuPopup #CueStandardButton { + icon: url(skins:LateNight/palemoon/buttons/btn__beats_hotcues_later.svg); + width: 24px; + height: 42px; + /* make the icon slightly larger than default 16px */ + icon-size: 24px; +} WCueMenuPopup #CueSavedLoopButton { + icon: url(skins:LateNight/palemoon/buttons/btn__loop.svg); width: 24px; height: 42px; + /* make the icon slightly larger than default 16px */ + icon-size: 24px; } -WCueMenuPopup #CueDeleteButton { - /* Note: we can't use qproperty-icon here because it's evauated only once - and therefore won't style the checked state */ - image: url(skins:LateNight/palemoon/buttons/btn__delete.svg); +WCueMenuPopup #CueSavedJumpButton { + width: 24px; + height: 42px; + /* make the icon slightly larger than default 16px */ + icon-size: 24px; +} +WCueMenuPopup #CueSavedJumpButton[direction="impossible"], +WCueMenuPopup #CueSavedJumpButton[direction="forward"] { + icon: url(skins:LateNight/palemoon/buttons/btn__beatjump_right.svg); +} +WCueMenuPopup #CueSavedJumpButton[direction="backward"] { + icon: url(skins:LateNight/palemoon/buttons/btn__beatjump_left.svg); } - WCueMenuPopup #CueDeleteButton:pressed { - background-color: #b24c12; - outline: none; - image: url(skins:LateNight/palemoon/buttons/btn__delete_active.svg); - } -WCueMenuPopup #CueSavedLoopButton { - image: url(skins:LateNight/palemoon/buttons/btn__loop.svg); +#CueDeleteButton:hover { + background-color: #6c2e2e; +} + +#CueDeleteButton[pressed="true"], #CueDeleteButton:pressed, #CueDeleteButton:clicked { + background-color: #dc4141 !important; + outline: none; +} + +#CueSavedLoopButton:pressed, #CueSavedLoopButton:checked { + background-color: #b24c12; + outline: none; + icon: url(skins:LateNight/palemoon/buttons/btn__loop_active.svg); +} +#CueSavedJumpButton:pressed, #CueSavedJumpButton:checked { + background-color: #b24c12; + outline: none; +} +#CueSavedJumpButton[direction="impossible"] { + background-color: #787878 !important; + outline: none; +} +#CueSavedJumpButton[direction="forward"]:pressed, #CueSavedJumpButton[direction="forward"]:checked { + icon: url(skins:LateNight/palemoon/buttons/btn__beatjump_right_active.svg); +} +#CueSavedJumpButton[direction="backward"]:pressed, #CueSavedJumpButton[direction="backward"]:checked { + icon: url(skins:LateNight/palemoon/buttons/btn__beatjump_left_active.svg); } -WCueMenuPopup #CueSavedLoopButton:pressed, -WCueMenuPopup #CueSavedLoopButton:checked { +#CueStandardButton:pressed, #CueStandardButton:checked { background-color: #b24c12; outline: none; - image: url(skins:LateNight/palemoon/buttons/btn__loop_active.svg); + icon: url(skins:LateNight/palemoon/buttons/btn__beats_hotcues_later_active.svg); } WCueMenuPopup #CueLabelEdit { diff --git a/res/skins/LateNight/waveform.xml b/res/skins/LateNight/waveform.xml index 7b830e1ec946..32ad97ddbae6 100644 --- a/res/skins/LateNight/waveform.xml +++ b/res/skins/LateNight/waveform.xml @@ -196,6 +196,8 @@ bottom|right #FF0000 #FFFFFF + skins:LateNight/classic/style/mark_jump_%1.svg + 0.25 %1 diff --git a/res/skins/Shade/style.qss b/res/skins/Shade/style.qss index ee22c069e7d2..f6b7aba0c3fb 100644 --- a/res/skins/Shade/style.qss +++ b/res/skins/Shade/style.qss @@ -435,7 +435,10 @@ WEffectSelector QAbstractScrollArea, WCueMenuPopup QLabel { color: #060613; } -#CueDeleteButton { +#CueDeleteButton, +#CueStandardButton, +#CueSavedLoopButton, +#CueSavedJumpButton { /* set any border to allow styles for other properties as well */ border: 1px solid #060613; /* To get the final size for the Delete button consider border width. @@ -444,28 +447,36 @@ WCueMenuPopup QLabel { height: 43px; padding: 0px; background-color: #aab2b7; - qproperty-icon: url(skin:/btn/btn_delete.svg); /* make the icon slightly larger than default 16px */ qproperty-iconSize: 20px; outline: none; } +#CueDeleteButton { + qproperty-icon: url(skin:/btn/btn_delete.svg); +} +#CueStandardButton { + qproperty-icon: url(skin:/btn/btn_vinylcontrol.png); +} #CueSavedLoopButton { - /* set any border to allow styles for other properties as well */ - border: 1px solid #060613; -/* To get the final size for the Delete button consider border width. - tall button, about the same height as cue number + label edit box */ - width: 24px; - height: 43px; - padding: 0px; - background-color: #aab2b7; - qproperty-icon: url(skin:/btn/btn_hotcue_loop.png); - /* make the icon slightly larger than default 16px */ - qproperty-iconSize: 20px; - outline: none; + qproperty-icon: url(skin:/btn/btn_repeat.png); +} +#CueSavedJumpButton[direction="impossible"], +#CueSavedJumpButton[direction="forward"] { + qproperty-icon: url(skin:/btn/btn_beatjump_forward.png); +} +#CueSavedJumpButton[direction="backward"] { + qproperty-icon: url(skin:/btn/btn_beatjump_backward.png); } -#CueSavedLoopButton:pressed, #CueSavedLoopButton:checked { +#CueDeleteButton:pressed, #CueDeleteButton:checked, #CueDeleteButton:clicked, +#CueStandardButton:pressed, #CueStandardButton:checked, + #CueSavedLoopButton:pressed, #CueSavedLoopButton:checked, + #CueSavedJumpButton:pressed, #CueSavedJumpButton:checked { background-color: #F90562; } +#CueSavedJumpButton[direction="impossible"] { + background-color: #787878 !important; + outline: none; +} #CueLabelEdit { border: 1px solid #060613; border-radius: 0px; diff --git a/res/skins/Shade/style_dark.qss b/res/skins/Shade/style_dark.qss index 0f7fb2a8e1e1..f0917170e19c 100644 --- a/res/skins/Shade/style_dark.qss +++ b/res/skins/Shade/style_dark.qss @@ -153,9 +153,22 @@ WEffectSelector::indicator:unchecked:selected, #CueDeleteButton { background-color: #8a8a8a; } -#CueSavedLoopButton:pressed, #CueSavedLoopButton:checked { +#CueDeleteButton:hover { + background-color: #6c2e2e; +} + +#CueDeleteButton[pressed="true"], #CueDeleteButton:pressed, #CueDeleteButton:clicked { + background-color: #dc4141 !important; +} +#CueStandardButton:pressed, #CueStandardButton:checked, + #CueSavedLoopButton:pressed, #CueSavedLoopButton:checked, + #CueSavedJumpButton:pressed, #CueSavedJumpButton:checked { background-color: #b79d00; } +#CueSavedJumpButton[direction="impossible"] { + background-color: #787878 !important; + outline: none; +} #CueLabelEdit { background-color: #3F3041; } diff --git a/res/skins/Shade/style_summer_sunset.qss b/res/skins/Shade/style_summer_sunset.qss index 0682c70b7bf1..c428c07da882 100644 --- a/res/skins/Shade/style_summer_sunset.qss +++ b/res/skins/Shade/style_summer_sunset.qss @@ -144,15 +144,28 @@ WEffectSelector::indicator:unchecked:selected, border: 0px solid #f8ba54; } -#CueDeleteButton { +#CueDeleteButton, + #CueStandardButton, + #CueSavedLoopButton, + #CueSavedJumpButton { background-color: #cdbb5d; } -#CueSavedLoopButton { - background-color: #cdbb5d; +#CueDeleteButton:hover { + background-color: #6c2e2e; +} + +#CueDeleteButton[pressed="true"], #CueDeleteButton:pressed, #CueDeleteButton:clicked { + background-color: #dc4141 !important; } -#CueSavedLoopButton:pressed, #CueSavedLoopButton:checked { +#CueStandardButton:pressed, #CueStandardButton:checked, + #CueSavedLoopButton:pressed, #CueSavedLoopButton:checked, + #CueSavedJumpButton:pressed, #CueSavedJumpButton:checked { background-color: #54fd05; } +#CueSavedJumpButton[direction="impossible"] { + background-color: #787878 !important; + outline: none; +} #CueLabelEdit { background-color: #706633; } diff --git a/res/skins/Tango/style.qss b/res/skins/Tango/style.qss index ac64473af226..809949aba1bb 100644 --- a/res/skins/Tango/style.qss +++ b/res/skins/Tango/style.qss @@ -2480,7 +2480,35 @@ WSearchRelatedTracksMenu #SearchSelectedAction::indicator { } /* widgets in cue popup menu */ -#CueDeleteButton, +#CueDeleteButton { + /* color buttons are 42x24 px. + To get the final size for the Delete button consider border width. + tall button, about the same height as cue number + label edit box */ + width: 26px; + height: 26px; + border: 1px solid #666; + background-color: #333; + border-radius: 2px; + qproperty-icon: url(skin:/../Tango/buttons/btn_delete.svg); + /* make the icon slightly larger than default 16px */ + qproperty-iconSize: 16px; +} +#CueStandardButton { + /* color buttons are 42x24 px. + To get the final size for the Delete button consider border width. + tall button, about the same height as cue number + label edit box */ + width: 26px; + height: 44px; + border: 1px solid #666; + background-color: #333; + border-radius: 2px; + qproperty-icon: url(skin:/../Tango/buttons/btn_hotcues_later.svg); + /* make the icon slightly larger than default 16px */ + qproperty-iconSize: 20px; +} +#CueStandardButton:checked { + background-color: #ff7b00; +} #CueSavedLoopButton { /* color buttons are 42x24 px. To get the final size for the Delete button consider border width. @@ -2490,7 +2518,31 @@ WSearchRelatedTracksMenu #SearchSelectedAction::indicator { border: 1px solid #666; background-color: #333; border-radius: 2px; - } + qproperty-icon: url(skin:/../Tango/buttons/btn_loop_beatjump_off.svg); + /* make the icon slightly larger than default 16px */ + qproperty-iconSize: 20px; +} +#CueSavedLoopButton:checked { + background-color: #ff7b00; + qproperty-icon: url(skin:/../Tango/buttons/btn_loop_beatjump_on.svg); +} +#CueSavedJumpButton { + /* color buttons are 42x24 px. + To get the final size for the Delete button consider border width. + tall button, about the same height as cue number + label edit box */ + width: 26px; + height: 44px; + border: 1px solid #666; + background-color: #333; + border-radius: 2px; + qproperty-icon: url(skin:/../Tango/buttons/btn_beatjump_forward.svg); + /* make the icon slightly larger than default 16px */ + qproperty-iconSize: 20px; +} +#CueSavedJumpButton:checked { + qproperty-icon: url(skin:/../Tango/buttons/btn_beatjump_forward_pressed.svg); + background-color: #ff7b00; +} #CueDeleteButton { /* Note: we can't use qproperty-icon here because it's evauated only once and therefore won't style the checked state */ diff --git a/res/translations/mixxx.ts b/res/translations/mixxx.ts index 181778c47575..752dc57f3845 100644 --- a/res/translations/mixxx.ts +++ b/res/translations/mixxx.ts @@ -324,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. @@ -979,2582 +979,2557 @@ trace - Above + Profiling messages ControlPickerMenu - + Headphone Output - - - + + + Deck %1 - + Sampler %1 - + Preview Deck %1 - + Microphone %1 - + Auxiliary %1 - + Reset to default - + Effect Rack %1 - + Parameter %1 - + Mixer - - + + Crossfader - + Headphone mix (pre/main) - + Toggle headphone split cueing - + Headphone delay - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - - + + Mix orientation (e.g. left, right, center) - - + + Set mix orientation to left - - + + Set mix orientation to center - - + + Set mix orientation to right - + Toggle slip mode - - + + BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode - + Equalizers - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll - + Library - + Slot %1 - + Headphone Mix - + Headphone Split Cue - + Headphone Delay - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - - + + Orientation - - + + Orient Left - - + + Orient Center - - + + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original - + High EQ - + Mid EQ - - + + Main Output - + Main Output Balance - + Main Output Delay - + Main Output Gain - + Low EQ - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + + Quick Effects + + + + Deck %1 Quick Effect Super Knob - - + Quick Effect Super Knob (control linked effect parameters) - - - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out - + Headphone Gain - + Headphone gain - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) - - + + Adjust %1 - - Deck %1 Stem %2 - - - - + Effect Unit %1 - + Button Parameter %1 - + Skin - + Controller - + Crossfader / Orientation - + Main Output gain - + Main Output balance - + Main Output delay - + Headphone - - + + Kill %1 - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - + Move Beatgrid Half a Beat - + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - - + + Sort hotcues by position - - + + Sort hotcues by position (remove offsets) - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - - Quick Effects Deck %1 - - - - + Deck %1 Quick Effect Enable Button - - + Quick Effect Enable Button - - Deck %1 Stem %2 Quick Effect Super Knob - - - - - Deck %1 Stem %2 Quick Effect Enable Button - - - - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - - Deck %1 Stems - - - - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3669,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -5228,78 +5203,78 @@ associated with each key. DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting @@ -5309,32 +5284,32 @@ Apply settings and continue? - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5665,6 +5640,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6256,62 +6241,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7252,33 +7237,33 @@ and allows you to pitch adjust them for harmonic mixing. DlgPrefRecord - + Choose recordings directory - - + + Recordings directory invalid - + Recordings directory must be set to an existing directory. - + Recordings directory must be set to a directory. - + Recordings directory not writable - + You do not have write access to %1. Choose a recordings directory you have write access to. @@ -7296,43 +7281,55 @@ and allows you to pitch adjust them for harmonic mixing. - - + + This will include the filepath for each track in the CUE file. +This option makes the CUE file less portable and can reveal personal +information from filepaths (i.e. username) + + + + + Enable File Annotation in CUE file + + + + + Quality - + Tags - + Title - + Author - + Album - + Output File Format - + Compression - + Lossy @@ -7347,12 +7344,12 @@ and allows you to pitch adjust them for harmonic mixing. - + Compression Level - + Lossless @@ -9171,7 +9168,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9627,57 +9624,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9750,22 +9747,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10035,129 +10032,129 @@ Do you really want to overwrite it? - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10179,7 +10176,7 @@ Do you want to select an input device? - + Playlists @@ -10220,27 +10217,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -11719,13 +11716,13 @@ Fully right: end of the effect period - + encoder failure - + Failed to apply the selected settings. @@ -11864,7 +11861,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -12068,42 +12065,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12558,7 +12555,7 @@ may introduce a 'pumping' effect and/or distortion. SoftwareWaveformWidget - + Filtered @@ -13335,7 +13332,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13707,11 +13704,6 @@ tracks with constant tempo. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -15034,12 +15026,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -15452,47 +15444,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15617,323 +15609,353 @@ This can not be undone! - Create &New Playlist + Search in Current View... + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + + Create &New Playlist + + + + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title @@ -15950,74 +15972,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -16052,25 +16074,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - - - - + Search noun - + Clear input @@ -16081,92 +16091,86 @@ This can not be undone! - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history - - - - - Esc + + in search history - - Exit search - Exit search bar and leave focus + + Delete query from history @@ -16933,7 +16937,7 @@ This can not be undone! - + Setting cover art of %n track(s) @@ -16941,7 +16945,7 @@ This can not be undone! - + Reloading cover art of %n track(s) @@ -17049,52 +17053,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_bg.qm b/res/translations/mixxx_bg.qm index 8b0e62ad1f6c..3f91b1106b0d 100644 Binary files a/res/translations/mixxx_bg.qm and b/res/translations/mixxx_bg.qm differ diff --git a/res/translations/mixxx_bg.ts b/res/translations/mixxx_bg.ts index 50fc06e3e5a4..0f7502263cd3 100644 --- a/res/translations/mixxx_bg.ts +++ b/res/translations/mixxx_bg.ts @@ -19,22 +19,52 @@ AutoDJFeature - + Crates Колекции - + + Enable Auto DJ + + + + + Disable Auto DJ + + + + + Clear Auto DJ Queue + + + + Remove Crate as Track Source Премахни Колекция като Пистов Източник - + Auto DJ Авто-DJ (Автодиджей) - + + Confirmation Clear + + + + + Do you really want to remove all tracks from the Auto DJ queue? + + + + + This can not be undone. + + + + Add Crate as Track Source Добави Колекция като Пистов Източник @@ -117,154 +147,161 @@ BasePlaylistFeature - + New Playlist Нов списък с песни - + Add to Auto DJ Queue (bottom) Добавяне към Авто DJ опашка (край) - - + + Create New Playlist Създаване на нов списък с песни - + Add to Auto DJ Queue (top) Добавяне към Авто DJ опашка (начало) - + Remove Премахване - + Rename Преименуване - + Lock Заключване - + Duplicate Дубликат - - + + Import Playlist Внасяне на списък за изпълнение - + Export Track Files - + Analyze entire Playlist Анализирай целия списък с песни - + Enter new name for playlist: Въведи ново име за списък с песни: - + Duplicate Playlist Копиране на списъка с песни - - + + Enter name for new playlist: Въведете име за нов списък с песни - - + + Export Playlist Изнасяне на списъка с песни - + Add to Auto DJ Queue (replace) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Преименуване на списъка с песни - - + + Renaming Playlist Failed Преименуването на списъка с песни не бе успепно - - - + + + A playlist by that name already exists. Вече съществува списък с песни с това име - - - + + + A playlist cannot have a blank name. Списъка с песни не може да бъде без име. - + _copy //: Appendix to default name when duplicating a playlist _копие - - - - - - + + + + + + Playlist Creation Failed Създаването на списъка за изпъленине се провали - - + + An unknown error occurred while creating playlist: По време на създаването на списъка за изпълнение възникна неизвестна грешка: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U Списък с песни (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Списък за изпълнение M3U (*.m3u);;Списък за изпълнение M3U8 (*.m3u8);;Списък за изпълнение PLS (*.pls);;Текст в CSV (*.csv);;Четим текст (*.txt) @@ -272,12 +309,12 @@ BaseSqlTableModel - + # - + Timestamp Дата @@ -285,7 +322,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Песента не може да бъде заредена. @@ -293,137 +330,142 @@ BaseTrackTableModel - + Album Албум - + Album Artist Изпълнител - + Artist Изпълнител - + Bitrate Бит./сек. (bitrate) - + BPM Уд/мин (BPM) - + Channels Канали - + Color - + Comment Коментар - + Composer Композитор - + Cover Art Обложка - + Date Added Дата на добавяне - + Last Played - + Duration Продължителност - + Type Тип - + Genre Жанр - + Grouping Групировка - + Key Ключ - + Location Местоположение - + + Overview + + + + Preview Преглед - + Rating Оценка - + ReplayGain - + Samplerate - + Played Пускано - + Title Заглавие - + Track # Пътека/писта/запис № - + Year Година - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -445,22 +487,22 @@ BroadcastProfile - + Can't use secure password storage: keychain access failed. - + Secure password retrieval unsuccessful: keychain access failed. - + Settings error Грешка в настройките - + <b>Error with settings for '%1':</b><br> <b>Грешка в настройките за '%1':</b><br> @@ -511,213 +553,215 @@ BrowseFeature - + Add to Quick Links Добави към Бързи връзки - + Remove from Quick Links Премахни от Бързи връзки - + Add to Library Добави в библиотека - + Refresh directory tree - + Quick Links Бързи връзки - - + + Devices Устройства - + Removable Devices Преносими устройства - - + + Computer Компютър - + Music Directory Added Музикалната папка е добавена - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Вие сте добавили една или повече папки с музика. Файловете в тези папки няма да са налични докато не сканирате повторно вашата библиотека. Желаете ли да сканирате повторно сега? - + Scan Сканиране - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel - + Preview Преглед - + Filename Име на файл - + Artist Изпълнител - + Title Заглавие - + Album Албум - + Track # Пътека/писта/запис № - + Year Година - + Genre Жанр - + Composer Композитор - + Comment Коментар - + Duration Продължителност - + BPM Уд/мин (BPM) - + Key Ключ - + Type Тип - + Bitrate Бит./сек. (bitrate) - + ReplayGain - + Location Местоположение - + Album Artist Изпълнител - + Grouping Групировка - + File Modified Файла е модифициран - + File Created Файла е създаден - + Mixxx Library Библиотека на Mixxx - + Could not load the following file because it is in use by Mixxx or another application. Следният файл не може да бъде зареден, защото се използва отMixxx или друго приложение. - - BulkController - - - USB Controller - USB Контролер - - CachingReaderWorker - + The file '%1' could not be found. - + The file '%1' could not be loaded. - + The file '%1' could not be loaded because it contains %2 channels, and only 1 to %3 are supported. - + The file '%1' is empty and could not be loaded. @@ -725,82 +769,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + + Rescans the library when Mixxx is launched. + + + + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -810,22 +859,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. + + + + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1007,13 +1066,13 @@ trace - Above + Profiling messages - + Set to full volume - + Set to zero volume @@ -1038,13 +1097,13 @@ trace - Above + Profiling messages - + Headphone listen button - + Mute button Бутон за заглушаване @@ -1055,25 +1114,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1114,22 +1173,22 @@ trace - Above + Profiling messages - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1139,193 +1198,193 @@ trace - Above + Profiling messages Еквалайзери - + Vinyl Control Контрол с грамофони - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1441,20 +1500,20 @@ trace - Above + Profiling messages - - + + Volume Fader - + Full Volume - + Zero Volume @@ -1470,7 +1529,7 @@ trace - Above + Profiling messages - + Mute Заглушаване @@ -1481,7 +1540,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1502,25 +1561,25 @@ trace - Above + Profiling messages - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1590,82 +1649,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync Синхронизация - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1706,456 +1765,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Добавяне към Авто DJ опашка (край) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Добавяне към Авто DJ опашка (начало) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix Запиши микс - + Toggle mix recording - + Effects Ефекти - + Quick Effects Бързи ефекти - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear Изчисти - + Clear the current effect - + Изчисти текущия ефект - + Toggle - + Toggle the current effect - + Next Следваща - + Switch to next effect - + Previous Предишна - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle Активиране на Автоматичен DJ - + Toggle Auto DJ On/Off - - Microphone & Auxiliary Show/Hide - - - - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2170,102 +2224,102 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Скорост на възпроизвеждане - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2288,7 +2342,7 @@ trace - Above + Profiling messages Skin - + Кожа @@ -2417,1039 +2471,1075 @@ trace - Above + Profiling messages - - - Toggle the BPM/beatgrid lock + + Move Beatgrid Half a Beat - - Revert last BPM/Beatgrid Change + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. - Revert last BPM/Beatgrid Change of the loaded track. + + Toggle the BPM/beatgrid lock - - Sync / Sync Lock + + Revert last BPM/Beatgrid Change - - Internal Sync Leader + + Revert last BPM/Beatgrid Change of the loaded track. - - Toggle Internal Sync Leader + + Sync / Sync Lock + Internal Sync Leader + + + - Internal Leader BPM + Toggle Internal Sync Leader + + Internal Leader BPM + + + + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Вкл./изкл. микрофон - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Авто-DJ (Автодиджей) - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - + + Microphone && Auxiliary Show/Hide + keep double & to prevent creation of keyboard accelerator + + + + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star + + Controller + + + Unknown + + + ControllerInputMappingTableModel @@ -3539,12 +3629,12 @@ trace - Above + Profiling messages - + Unnamed - + <i>FPS: %0/%1</i> @@ -3552,32 +3642,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3585,27 +3675,27 @@ trace - Above + Profiling messages ControllerScriptEngineLegacy - + Controller Mapping File Problem - + The mapping for controller "%1" cannot be opened. - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + File: - + Error: @@ -3626,15 +3716,15 @@ trace - Above + Profiling messages Премахване - + Create New Crate - + Rename - + Преименуване @@ -3685,7 +3775,7 @@ trace - Above + Profiling messages Внасяне на колекция - + Export Crate Изнасяне на колекция @@ -3695,7 +3785,7 @@ trace - Above + Profiling messages Отключване - + An unknown error occurred while creating crate: Неочаквана грешка при създаване на колекция: @@ -3704,12 +3794,6 @@ trace - Above + Profiling messages Rename Crate Преименуване на колекция - - - - Export to Engine Prime - - Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. @@ -3727,25 +3811,31 @@ trace - Above + Profiling messages Колекцията не бе преименувана успешно. - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Списък за изпълнение M3U (*.m3u);;Списък за изпълнение M3U8 (*.m3u8);;Списък за изпълнение PLS (*.pls);;Текст в CSV (*.csv);;Четим текст (*.txt) - + M3U Playlist (*.m3u) - + M3U Списък с песни (*.m3u) Crates are a great way to help organize the music you want to DJ with. + + + + Export to Engine DJ + + Crates let you organize your music however you'd like! @@ -3857,12 +3947,12 @@ trace - Above + Profiling messages Програмисти от стари версии - + Official Website - + Donate @@ -3918,7 +4008,7 @@ trace - Above + Profiling messages - + Analyze Анализиране @@ -3968,12 +4058,12 @@ trace - Above + Profiling messages Спиране на анализирането - + Analyzing %1% %2/%3 - + Analyzing %1/%2 @@ -3981,92 +4071,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Пропускане - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Секунди - - Full Intro + Outro - - - - - Fade At Outro Start - - - - - Full Track - - - - - Skip Silence - - - - + Auto DJ Fade Modes Full Intro + Outro: @@ -4088,59 +4158,89 @@ silence between tracks. Skip Silence: Play the whole track except for silence at the beginning and end. Begin crossfading from the selected number of seconds before the -last sound. +last sound. + +Skip Silence Start Full Volume: +The same as Skip Silence, but starting transitions with a centered +crossfader, so that the intro starts at full volume. + - - Repeat + + Full Intro + Outro - - Auto DJ requires two decks assigned to opposite sides of the crossfader. + + Fade At Outro Start - - One deck must be stopped to enable Auto DJ mode. + + Full Track + + + + + Skip Silence + + + + + Skip Silence Start Full Volume + + + + + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. + + + + + Repeat + + + + + Auto DJ requires two decks assigned to opposite sides of the crossfader. - - Decks 3 and 4 must be stopped to enable Auto DJ mode. + + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Авто-DJ (Автодиджей) - + Shuffle Разбъркано възпроизвеждане - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4159,7 +4259,7 @@ If no track sources are configured, the track is added from the library instead. - + Choose between different algorithms to detect beats. @@ -4194,9 +4294,24 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - - Choose Analyzer - Избери Анализатор + + Use rhythmic channel when analysing stem file + + + + + Disabled + + + + + Enforced + + + + + Choose Analyzer + Избери Анализатор @@ -4240,7 +4355,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Close - + Затваряне @@ -4255,7 +4370,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Cancel - + Отказ @@ -4305,7 +4420,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Retry - + Отново @@ -4348,32 +4463,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 + + + + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4412,17 +4532,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4488,7 +4608,7 @@ You tried to learn: %1,%2 - + &Close @@ -4556,7 +4676,7 @@ You tried to learn: %1,%2 % - + % @@ -4575,42 +4695,42 @@ You tried to learn: %1,%2 - + Add Random Tracks - + Enable random track addition to queue - + Add random tracks from Track Source if the specified minimum tracks remain - + Minimum allowed tracks before addition - + Minimum number of tracks after which random tracks may be added - + Crossfader Behaviour - + Reset the Crossfader back to center after disabling AutoDJ - + Hint: Resetting the crossfader to center will cause a drop of the main output's volume if you've selected "Constant Power" crossfader curve in the Mixer preferences. @@ -4620,7 +4740,7 @@ You tried to learn: %1,%2 Icecast 2 - + Icecast 2 @@ -4630,12 +4750,12 @@ You tried to learn: %1,%2 Icecast 1 - + Icecast 1 MP3 - + MP3 @@ -4675,65 +4795,65 @@ You tried to learn: %1,%2 Stereo - + Стерео - - - - + + + + Action failed Неуспешно действие - + You can't create more than %1 source connections. - + Source connection %1 - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -4758,7 +4878,7 @@ Two source connections to the same server that have the same mountpoint can not http://www.mixxx.org - + http://www.mixxx.org @@ -5006,13 +5126,13 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefColors - - + + By hotcue number - + Color @@ -5055,132 +5175,133 @@ Two source connections to the same server that have the same mountpoint can not Replace… - - - DlgPrefController - - Apply device settings? + + When key colors are enabled, Mixxx will display a color hint +associated with each key. - - Your settings must be applied before starting the learning wizard. -Apply settings and continue? + + Enable Key Colors - - None + + Key palette + + + DlgPrefController - - %1 by %2 + + Apply device settings? - - No Name + + Your settings must be applied before starting the learning wizard. +Apply settings and continue? - - No Description - + + None + Без - - No Author + + %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5188,65 +5309,115 @@ Apply settings and continue? DlgPrefControllerDlg - - (device category goes here) - - - - + Controller Name - + Enabled Включено - - Description: + + Device Info - - Support: + + Physical Interface: + + + + + Vendor name: + + + + + Product name: + + + + + Vendor ID + + + + + VID: - - Mapping settings + + Product ID - + + PID: + + + + + Serial number: + + + + + USB interface number: + + + + + HID Usage-Page: + + + + + HID Usage: + + + + + Description: + + + + + Support: + + + + Screens preview - + Input Mappings - - + + Search - - + + Add Добавяне - - + + Remove Премахване - + Click to start the Controller Learning wizard. @@ -5256,48 +5427,53 @@ Apply settings and continue? - - Controller Setup - - - - + Load Mapping: - + Mapping Info - + Author: - + Name: - + Learning Wizard (MIDI Only) - + + Data protocol: + + + + Mapping Files: - - - Clear All + + Mapping Settings - + + + Clear All + Изчистване на всичко + + + Output Mappings @@ -5305,22 +5481,28 @@ Apply settings and continue? DlgPrefControllers - + + %1 is a virtual controller that allows to use e.g. the 'MIDI for light' mapping.<br/>You need to restart Mixxx in order to enable it.<br/><b>Note:</b> mappings meant for physical controllers can cause issues and even render the Mixxx GUI unresponsive when being loaded to %1. + text enclosed in <b> is bold, <br/> is a linebreak %1 is the placehodler for 'MIDI Through Port' + + + + Mixxx uses "mappings" to connect messages from your controller to controls in Mixxx. If you do not see a mapping for your controller in the "Load Mapping" menu when you click on your controller on the left sidebar, you may be able to download one online from the %1. Place the XML (.xml) and Javascript (.js) file(s) in the "User Mapping Folder" then restart Mixxx. If you download a mapping in a ZIP file, extract the XML and Javascript file(s) from the ZIP file to your "User Mapping Folder" then restart Mixxx. - + Mixxx DJ Hardware Guide - + MIDI Mapping File Format - + MIDI Scripting with Javascript @@ -5343,17 +5525,22 @@ Apply settings and continue? - + + Enable MIDI Through Port + + + + Mappings - + Open User Mapping Folder - + Resources @@ -5363,7 +5550,7 @@ Apply settings and continue? - + You can create your own mapping by using the MIDI Learning Wizard when you select your controller in the sidebar. You can edit mappings by selecting the "Input Mappings" and "Output Mappings" tabs in the preference page for your controller. See the Resources below for more details on making mappings. @@ -5373,7 +5560,7 @@ Apply settings and continue? Skin - + Кожа @@ -5445,6 +5632,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -5586,7 +5783,7 @@ Apply settings and continue? 10% - + 10% @@ -5601,12 +5798,12 @@ Apply settings and continue? 50% - + 50% 90% - + 90% @@ -5662,7 +5859,7 @@ CUP mode: Remaining - + Остава @@ -5901,124 +6098,134 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Преименуване - + Export Изнасяне - + Delete Изтриване - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - + + + + + + + + + + + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6026,62 +6233,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Информация - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -6094,193 +6301,208 @@ You can always drag-and-drop tracks on screen to clone a deck. - + When key detection is enabled, Mixxx detects the musical key of your tracks and allows you to pitch adjust them for harmonic mixing. - + Enable Key Detection - + Choose Analyzer Избери Анализатор - + Choose between different algorithms to detect keys. - + Analyzer Settings Настройки на Анализатор - + Enable Fast Analysis (For slow computers, may be less accurate) - + Re-analyze keys when settings change or 3rd-party keys are present - + + Exclude rhythmic channel when analysing stem file + + + + + Disabled + + + + + Enforced + + + + Key Notation - + Lancelot - + Lancelot/Traditional - + OpenKey - + OpenKey/Traditional - + Traditional - + Custom - + A - + Bb - + B - + C - + Db - + D - + Eb - + E - + F - + F# - + G - + Ab - + Am - + Bbm - + Bm - + Cm - + C#m - + Dm - + Ebm - + Em - + Fm - + F#m - + Gm - + G#m @@ -6288,72 +6510,72 @@ and allows you to pitch adjust them for harmonic mixing. DlgPrefLibrary - + See the manual for details - + Music Directory Added - + Музикалната папка е добавена - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Вие сте добавили една или повече папки с музика. Файловете в тези папки няма да са налични докато не сканирате повторно вашата библиотека. Желаете ли да сканирате повторно сега? - + Scan Сканиране - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - + Select Library Font @@ -6404,7 +6626,7 @@ and allows you to pitch adjust them for harmonic mixing. Audio File Formats - + Аудио формати @@ -6715,22 +6937,22 @@ and allows you to pitch adjust them for harmonic mixing. - + Only allow EQ knobs to control EQ-specific effects - + Uncheck to allow any effect to be loaded into the EQ knobs. - + Use the same EQ filter for all decks - + Uncheck to allow different decks to use different EQ effects. @@ -6740,17 +6962,17 @@ and allows you to pitch adjust them for harmonic mixing. - + Quick Effect - + Bypass EQ effect processing - + When checked, EQs are not processed, improving performance on slower computers. @@ -6775,39 +6997,44 @@ and allows you to pitch adjust them for harmonic mixing. - + + Reset stem controls on track load + + + + Equalizer frequency Shelves - + High EQ - - + + 16 Hz - + 16 Hz - - + + 20.05 kHz - + 20.05 kHz - + Low EQ - + Main EQ - + Reset Parameter @@ -6846,12 +7073,12 @@ and allows you to pitch adjust them for harmonic mixing. High - + Високо None - + Без @@ -7115,7 +7342,7 @@ and allows you to pitch adjust them for harmonic mixing. DlgPrefReplayGain - + %1 LUFS (adjust by %2 dB) @@ -7228,173 +7455,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Включено - + Stereo Стерео - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + %1 ms - + Configuration error Грешка в настройките @@ -7412,133 +7638,133 @@ The loudness target is approximate and assumes track pregain and main output lev API на звука - + Sample Rate Честота на дискретизация - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Изход - + Input Вход - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices - + Проверка за устройства @@ -7570,12 +7796,12 @@ The loudness target is approximate and assumes track pregain and main output lev Input - + Вход Vinyl Configuration - + Настройки на плочите @@ -7635,7 +7861,7 @@ The loudness target is approximate and assumes track pregain and main output lev Signal Quality - + Качество на сигнала @@ -7645,7 +7871,7 @@ The loudness target is approximate and assumes track pregain and main output lev Powered by xwax - + с помощта на xwax @@ -7691,17 +7917,28 @@ The loudness target is approximate and assumes track pregain and main output lev - + + 1/3 of waveform viewer + options for "Text height limit" + + + + + Entire waveform viewer + + + + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7714,245 +7951,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low Ниско - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies - + Visual gain of the low frequencies - + High - + Високо - + Global visual gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - - Time until next marker + + Preferred font size - - Placement + + Text height limit + + + + + Time until next marker - - Font size + + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % - + % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -7960,47 +8208,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Звуков хардуер - + Controllers - + Library Библиотека - + Interface Интерфейс - + Waveforms - + Mixer - + Смесител - + Auto DJ Авто-DJ (Автодиджей) - + Decks - + Colors @@ -8008,7 +8256,7 @@ Select from different types of displays for the waveform, which differ primarily &Help Preferences standard buttons: consider the other buttons to choose a unique Alt hotkey (&) - + Помо&щ @@ -8035,47 +8283,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Ефекти - + Recording - + Записване - + Beat Detection - + Key Detection - + Normalization Нормализация - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Контрол с грамофони - + Live Broadcasting Живо излъчване - + Modplug Decoder @@ -8090,7 +8338,7 @@ Select from different types of displays for the waveform, which differ primarily 1 - + 1 @@ -8108,22 +8356,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Начало на записа - + Recording to file: - + Stop Recording Спиране на записа - + %1 MiB written in %2 @@ -8178,27 +8426,27 @@ Select from different types of displays for the waveform, which differ primarily - + Selecting database rows... - + No colors changed! - + No cues matched the specified criteria. - + Confirm Color Replacement - + The colors of %1 cues in %2 tracks will be replaced. This change cannot be undone! Are you sure? @@ -8250,7 +8498,7 @@ Select from different types of displays for the waveform, which differ primarily Изпълнител - + Fetching track data from the MusicBrainz database @@ -8327,72 +8575,67 @@ Select from different types of displays for the waveform, which differ primarily - + Original tags - + Metadata applied - + %1 - - Could not find this track in the MusicBrainz database. - - - - + Suggested tags - + The results are ready to be applied - + Can't connect to %1: %2 - + Looking for cover art - + Cover art found, receiving image. - + Cover Art is not available for selected metadata - + Metadata & Cover Art applied - + Selected cover art applied - + Cover Art File Already Exists - + File: %1 Folder: %2 Override existing file? @@ -8428,7 +8671,7 @@ This can not be undone! Track Editor - + Редактор на песни @@ -8436,102 +8679,102 @@ This can not be undone! - + Filetype: - + BPM: - + Темпо: - + Location: - + Bitrate: - + Comments - + BPM Уд/мин (BPM) - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Пътека/писта/запис № - + Album Artist Изпълнител - + Composer Композитор - + Title Заглавие - + Grouping Групировка - + Key Ключ - + Year Година - + Artist Изпълнител - + Album Албум - + Genre Жанр @@ -8541,179 +8784,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: Продължителност: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Темпо на песента: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat Щракнете в такт - + Hint: Use the Library Analyze view to run BPM detection. Щракнете на "Анализ", за да активирате засичане на темпо. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Прилагане - + &Cancel &Отказ - + (no color) @@ -8781,12 +9024,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Re-Import Metadata from files - + Color @@ -8870,7 +9113,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9049,7 +9292,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EffectParameterSlotBase - + No effect loaded. @@ -9072,27 +9315,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9236,54 +9479,86 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes - + iTunes - + Select your iTunes library Изберете вашата библиотека на iTunes - + (loading) iTunes iTunes (зареждане) - + Use Default Library Използване на стандартната библиотека - + Choose Library... Избор на библиотека... - + Error Loading iTunes Library Грешка при зареждане библиотеката на iTunes - + There was an error loading your iTunes library. Check the logs for details. + + LegacyControllerColorSetting + + + Change color + + + + + Choose a new color + + + + + LegacyControllerFileSetting + + + Browse... + + + + + + No file selected + + + + + Select a file + + + LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9294,57 +9569,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9352,62 +9627,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9417,22 +9692,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Внасяне на списък за изпълнение - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Списъци за изпълнение (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9479,32 +9754,27 @@ Do you really want to overwrite it? MidiController - - MIDI Controller + + MixxxControl(s) not found - - MixxxControl(s) not found - - - - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9564,18 +9834,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9587,208 +9857,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Аудио устройството е заето. - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Опитайте отново</b> след като затворите другото приложение и включите аудио устройството - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Повторно</b> конфигуриране на настройките на Mixxx за аудио устройството. - - + + Get <b>Help</b> from the Mixxx Wiki. Получете <b>Помощ</b> от Уики-то на Mixxx. - - - + + + <b>Exit</b> Mixxx. <b>Изход</b> от Mixxx. - + Retry Отново - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Пренастройване - + Help Помощ - - + + Exit Изход - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue Продължаване - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + Потвърждане на излизането - + A deck is currently playing. Exit Mixxx? В момента свири дек. Изход от Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9804,52 +10115,169 @@ Do you want to select an input device? PlaylistFeature - + Lock Заключване - - + + Playlists Списъци с песни - + Shuffle Playlist - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Отключване - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Създаване на нов списък с песни + + PredefinedColorPaletes + + + Mixxx Hotcue Colors + + + + + PredefinedColorPalettes + + + Serato DJ Track Metadata Hotcue Colors + + + + + Serato DJ Pro Hotcue Colors + + + + + Rekordbox COLD1 Hotcue Colors + + + + + Rekordbox COLD2 Hotcue Colors + + + + + Rekordbox COLORFUL Hotcue Colors + + + + + Mixxx Track Colors + + + + + Rekordbox Track Colors + + + + + Serato DJ Pro Track Colors + + + + + Traktor Pro Track Colors + + + + + VirtualDJ Track Colors + + + + + Mixxx Key Colors + + + + + Traktor Key Colors + + + + + Mixed In Key - Key Colors + + + + + Protanopia / Protanomaly Key Colors + + + + + Deuteranopia / Deuteranomaly Key Colors + + + + + Tritanopia / Tritanomaly Key Colors + + + QMessageBox @@ -10091,7 +10519,7 @@ Do you want to scan your library for cover files now? Encoder - + Кодек @@ -10199,8 +10627,8 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx - + Feedback @@ -10249,8 +10677,8 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx - + Triplets @@ -10317,8 +10745,8 @@ Default: flat top - + Depth @@ -10382,13 +10810,13 @@ With width at zero, this allows for manually sweeping over the entire delay rang - + Intensity of the effect - + Divide rounded 1/2 beats of the Period parameter by 3. @@ -10409,40 +10837,55 @@ With width at zero, this allows for manually sweeping over the entire delay rang - + Metronome - + + The Mixxx Team + + + + Adds a metronome click sound to the stream - + BPM Уд/мин (BPM) - + Set the beats per minute value of the click sound - + Sync Синхронизация - + Synchronizes the BPM with the track if it can be retrieved + + + Gain + + + + + Set the gain of metronome click sound + + - + Period @@ -10539,15 +10982,15 @@ Higher values result in less attenuation of high frequencies. - - + + Low - + Ниско - + Gain for Low Filter @@ -10599,7 +11042,7 @@ Higher values result in less attenuation of high frequencies. High - + Високо @@ -10674,7 +11117,7 @@ Higher values result in less attenuation of high frequencies. - + Gain for Low Filter (neutral at 1.0) @@ -10684,60 +11127,60 @@ Higher values result in less attenuation of high frequencies. - + Phaser - + Stereo - + Стерео - + Stages - + Mixes the input signal with a copy passed through a series of all-pass filters to create comb filtering - + Period of the LFO (low frequency oscillator) 1/4 - 4 beats rounded to 1/2 beat if tempo is detected 1/4 - 4 seconds if no tempo is detected - + Controls how much of the output signal is looped - - + + Range - + Controls the frequency range across which the notches sweep. - + Number of stages - + Sets the LFOs (low frequency oscillators) for the left and right channels out of phase with each others @@ -10779,7 +11222,7 @@ Higher values result in less attenuation of high frequencies. Ctrl+Shift+O - + Ctrl+Shift+O @@ -10890,12 +11333,12 @@ Higher values result in less attenuation of high frequencies. - + This stream is online for testing purposes! - + Live Mix @@ -11208,7 +11651,7 @@ Fully right: end of the effect period - + MP3 encoding is not supported. Lame could not be initialized @@ -11230,7 +11673,7 @@ Fully right: end of the effect period - + Deck %1 Дек %1 @@ -11270,52 +11713,52 @@ Fully right: end of the effect period - + Pitch Shift - + Raises or lowers the original pitch of a sound. - + Pitch - + The pitch shift applied to the sound. - + The range of the Pitch knob (0 - 2 octaves). - + Semitones - + Change the pitch in semitone steps instead of continuously. - + Formant - + Preserve the resonant frequencies (formants) of the human vocal tract and other instruments. Hint: compensates "chipmunk" or "growling" voices @@ -11363,7 +11806,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Чисто преминаване на сигнала @@ -11394,170 +11837,170 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 - - + + Compressor - + Auto Makeup Gain - + Makeup - + The Auto Makeup button enables automatic gain adjustment to keep the input signal and the processed output signal as close as possible in perceived loudness - + Off - + On - + Threshold (dBFS) - + Threshold - + The Threshold knob adjusts the level above which the compressor starts attenuating the input signal - + Ratio (:1) - + Ratio - + The Ratio knob determines how much the signal is attenuated above the chosen threshold. For a ratio of 4:1, one dB remains for every four dB of input signal above the threshold. At a ratio of 1:1 no compression is happening, as the input is exactly the output. - + Knee (dBFS) - + Knee - + The Knee knob is used to achieve a rounder compression curve - + Attack (ms) - + Attack - + The Attack knob sets the time that determines how fast the compression will set in once the signal exceeds the threshold - + Release (ms) - + Release - + The Release knob sets the time that determines how fast the compressor will recover from the gain reduction once the signal falls under the threshold. Depending on the input signal, short release times may introduce a 'pumping' effect and/or distortion. - - + + Level - + The Level knob adjusts the level of the output signal after the compression was applied - + various - + built-in - + missing - + Distribute stereo channels into mono channels processed in parallel. - + Warning! - + Processing stereo signal as mono channel may result in pitch and tone imperfection, and this is mono-incompatible, due to third party limitations. - + Dual threading mode is incompatible with mono main mix. - + Dual threading mode is only available with RubberBand. @@ -11567,42 +12010,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11660,54 +12103,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Списъци с песни - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11715,10 +12158,10 @@ may introduce a 'pumping' effect and/or distortion. RhythmboxFeature - - + + Rhythmbox - + Rythmbox @@ -11762,34 +12205,34 @@ may introduce a 'pumping' effect and/or distortion. SeratoFeature - - - + + + Serato - + Reads the following from the Serato Music directory and removable devices: - + Tracks - + Crates - + Колекции - + Check for Serato databases (refresh) - + (loading) Serato @@ -11797,64 +12240,64 @@ may introduce a 'pumping' effect and/or distortion. SetlogFeature - + Join with previous (below) - + Mark all tracks played - + Finish current and start new - + Lock all child playlists - + Unlock all child playlists - + Delete all unlocked child playlists - + History - + Unlock - + Отключване - + Lock - + Заключване - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12121,7 +12564,7 @@ may introduce a 'pumping' effect and/or distortion. Max - + от @@ -12147,12 +12590,27 @@ may introduce a 'pumping' effect and/or distortion. - - Identifying track through Acoustid + + Reading track for fingerprinting failed. + + + + + Identifying track through AcoustID + + + + + Could not identify track through AcoustID. + + + + + Could not find this track in the MusicBrainz database. - + Retrieving metadata from MusicBrainz @@ -12210,656 +12668,656 @@ may introduce a 'pumping' effect and/or distortion. - + Use the mouse to scratch, spin-back or throw tracks. - + Waveform Display - + Shows the loaded track's waveform near the playback position. - + Drag with mouse to make temporary pitch adjustments. - + Scroll to change the waveform zoom level. - + Waveform Zoom Out - + Waveform Zoom In - + Waveform Zoom - - + + Spinning Vinyl - + Rotates during playback and shows the position of a track. - + Right click to show cover art of loaded track. - + Gain - + Adjusts the pre-fader gain of the track (to avoid clipping). - + (too loud for the hardware and is being distorted). - + Indicates when the signal on the channel is clipping, - + Channel Volume Meter - + Shows the current channel volume. - + Microphone Volume Meter - + Shows the current microphone volume. - + Auxiliary Volume Meter - + Shows the current auxiliary volume. - + Auxiliary Peak Indicator - + Indicates when the signal on the auxiliary is clipping, - + Volume Control - + Adjusts the volume of the selected channel. - + Booth Gain - + Adjusts the booth output gain. - + Crossfader - + Кросфейдър - + Balance - + Headphone Volume - + Adjusts the headphone output volume. - + Headphone Gain - + Adjusts the headphone output gain. - + Headphone Mix - + Headphone Split Cue - + Adjust the Headphone Mix so in the left channel is not the pure cueing signal. - + Microphone - + Микрофон - + Show/hide the Microphone section. - + Sampler - + Show/hide the Sampler section. - + Vinyl Control - + Контрол с грамофони - + Show/hide the Vinyl Control section. - + Preview Deck - + Show/hide the Preview deck. - - - + + + Cover Art Обложка - + Show/hide Cover Art. - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Show Library - + Show or hide the track library. - + Show Effects - + Show or hide the effects. - + Toggle Mixer - + Show or hide the mixer. - + Show/hide volume meters for channels and main output. - + Microphone Volume - + Adjusts the microphone volume. - + Microphone Gain - + Adjusts the pre-fader microphone gain. - + Auxiliary Gain - + Adjusts the pre-fader auxiliary gain. - + Microphone Talk-Over - + Hold-to-talk or short click for latching to - + Microphone Talkover Mode - + Off: Do not reduce music volume - + Manual: Reduce music volume by a fixed amount set by the Strength knob. - + Behavior depends on Microphone Talkover Mode: - + Off: Does nothing - + Change the step-size in the Preferences -> Decks menu. - + Low EQ - + Adjusts the gain of the low EQ filter. - + Mid EQ - + Adjusts the gain of the mid EQ filter. - + High EQ - + Adjusts the gain of the high EQ filter. - + Hold-to-kill or short click for latching. - + High EQ Kill - + Holds the gain of the high EQ to zero while active. - + Mid EQ Kill - + Holds the gain of the mid EQ to zero while active. - + Low EQ Kill - + Holds the gain of the low EQ to zero while active. - + Displays the tempo of the loaded track in BPM (beats per minute). - + Tempo - + Key The musical key of a track - + Ключ - + BPM Tap - + When tapped repeatedly, adjusts the BPM to match the tapped BPM. - + Adjust BPM Down - + When tapped, adjusts the average BPM down by a small amount. - + Adjust BPM Up - + When tapped, adjusts the average BPM up by a small amount. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -12869,1092 +13327,1165 @@ may introduce a 'pumping' effect and/or distortion. - + + Left click and hold allows to preview the position where the play head will jump to on release. Dragging can be aborted with right click. + + + + Big Spinny/Cover Art - + Show a big version of the Spinny or track cover art if enabled. - + Main Output Peak Indicator - + Indicates when the signal on the main output is clipping, - + Main Output L Peak Indicator - + Indicates when the left signal on the main output is clipping, - + Main Output R Peak Indicator - + Indicates when the right signal on the main output is clipping, - + Main Channel L Volume Meter - + Shows the current volume for the left channel of the main output. - + Shows the current volume for the right channel of the main output. - - + + Main Output Gain - - + + Adjusts the main output gain. - + Determines the main output by fading between the left and right channels. - + Adjusts the left/right channel balance on the main output. - + Crossfades the headphone output between the main mix and cueing (PFL or Pre-Fader Listening) signal. - + If activated, the main mix signal plays in the right channel, while the cueing signal plays in the left channel. - + Show/hide Cover Art of the selected track in the library. - + Show/hide the scrolling waveforms - + Show/hide the beatgrid controls section - + + Show/hide the stem mixing controls section + + + + Hide all skin sections except the decks to have more screen space for the track library. - + Volume Meters - + mix microphone input into the main output. - + Auto: Automatically reduce music volume when microphone volume rises above threshold. - - + + Adjust the amount the music volume is reduced with the Strength knob. - + Auto: Sets how much to reduce the music volume when the volume of active microphones rises above threshold. - + Manual: Sets how much to reduce the music volume, when talkover is activated regardless of volume of microphone inputs. - + If keylock is disabled, pitch is also affected. - + Speed Up - + Raises the track playback speed (tempo). - + Raises playback speed in small steps. - + Slow Down - + Lowers the track playback speed (tempo). - + Lowers playback speed in small steps. - + Speed Up Temporarily (Nudge) - + Holds playback speed higher while active (tempo). - + Holds playback speed higher (small amount) while active. - + Slow Down Temporarily (Nudge) - + Holds playback speed lower while active (tempo). - + Holds playback speed lower (small amount) while active. - + When tapped repeatedly, adjusts the tempo to match the tapped BPM. - + Tempo Tap - + Rate Tap and BPM Tap - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + + Hint: Change the default cue mode in Preferences -> Decks. + + + + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. + + + + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + + Stem Label + + + + + Name of the stem stored in the stem file + + + + + Text is displayed in the stem color stored in the stem file + + + + + this stem color is also used for the waveform of this stem + + + + + Stem Mute + + + + + Toggle the stem mute/unmuted + + + + + Stem Volume Knob + + + + + Adjusts the volume of the stem + + + + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Запазване на банка с фрази - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Зареждане на банка с фрази - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear Изчисти - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next - + Следваща - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous - + Предишна - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. - + Channel Peak Indicator @@ -13974,143 +14505,143 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Right click hotcues to edit their labels and colors. - + Right click anywhere else to show the time at that point. - + Channel L Peak Indicator - + Indicates when the left signal on the channel is clipping, - + Channel R Peak Indicator - + Indicates when the right signal on the channel is clipping, - + Channel L Volume Meter - + Shows the current channel volume for the left channel. - + Channel R Volume Meter - + Shows the current channel volume for the right channel. - + Microphone Peak Indicator - + Indicates when the signal on the microphone is clipping, - + Sampler Volume Meter - + Shows the current sampler volume. - + Sampler Peak Indicator - + Indicates when the signal on the sampler is clipping, - + Preview Deck Volume Meter - + Shows the current Preview Deck volume. - + Preview Deck Peak Indicator - + Indicates when the signal on the Preview Deck is clipping, - + Maximize Library - + Microphone Talkover Ducking Strength - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14125,215 +14656,225 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Main Channel R Volume Meter - + (while stopped) - + Cue - + Headphone - + Mute Заглушаване - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix Запиши микс - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator - + If Vinyl control is enabled, displays time-coded vinyl signal quality (see Preferences -> Vinyl Control). @@ -14343,289 +14884,284 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Change the crossfader curve in Preferences -> Crossfader - + Crossfader Orientation - + Set the channel's crossfader orientation. - + Either to the left side of crossfader, to the right side or to the center (unaffected by crossfader) - + Activate Vinyl Control from the Menu -> Options. - + Displays the current musical key of the loaded track after pitch shifting. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat - + When active the track will repeat if you go past the end or reverse before the start. - + Eject - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - - Hint: Change the default cue mode in Preferences -> Interface. - - - - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist - + Displays the artist of the loaded track. - + Track Title - + Displays the title of the loaded track. - + Track Album Албум - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -14633,12 +15169,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -14646,33 +15182,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - Overwrite Existing File? + + Replace Existing File? - - "%1" already exists, overwrite? + + "%1" already exists, replace? - - &Overwrite + + &Replace - - Over&write All + + Apply to all files @@ -14681,12 +15217,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - - Skip &All - - - - + Export Error @@ -14694,7 +15225,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportWizard - + Export Track Files To @@ -14702,23 +15233,23 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportWorker - - + + Export process was canceled - + Error removing file %1: %2. Stopping. - + Error exporting track %1 to %2: %3. Stopping. - + Error exporting tracks @@ -14726,23 +15257,23 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TraktorFeature - - + + Traktor Traktor - + (loading) Traktor Traktor (зареждане) - + Error Loading Traktor Library Грешка при зареждане библиотеката на Traktor - + There was an error loading your Traktor library. Some of your Traktor tracks or playlists may not have loaded. Грешка при зареждането на Traktor библиотеката. Някои от вашите Traktor песни или плейлисти може да не са заредени. @@ -14858,47 +15389,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -14921,7 +15452,7 @@ This can not be undone! - + Save snapshot @@ -15022,407 +15553,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... + + + + + Search for tracks in the current library view - - Export the library to the Engine Prime format + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library - + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist - + Създаване на нов списък с песни - + Ctrl+n - + Create New &Crate - + Create a new crate - + Създаване на нова колекция - + Ctrl+Shift+N - - + + &View &Изглед - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen &На цял екран - + Display Mixxx using the full screen Показване на Mixxx на цял екран - + &Options &Опции - + &Vinyl Control &Контрол с грамофони - + Use timecoded vinyls on external turntables to control Mixxx Ползване на грамофонни плочи с код за контролиране на Mixxx - + Enable Vinyl Control &%1 - + &Record Mix &Записване на микс - + Record your mix to a file Записва Вашия микс във файл - + Ctrl+R - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server Излъчвайте миксовете чрез shoutcast или icecast сървър - + Ctrl+L - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Нас&тройки - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help Помо&щ - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support &Поддръжка от общността - + Get help with Mixxx - + &User Manual Н&аръчник на потребителя - + Read the Mixxx user manual. Прочетете наръчника за потребителя на Mixxx. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. Помогнете на превода на този софтуер на Вашия език. - + &About - + &За - + About the application Относно приложението @@ -15430,25 +15992,25 @@ This can not be undone! WOverview - + Passthrough Чисто преминаване на сигнала - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15457,25 +16019,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - - - - + Search noun - + Clear input @@ -15486,169 +16036,163 @@ This can not be undone! Търсене... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history - - - - - Esc + + in search history - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Ключ - + harmonic with %1 - + BPM Уд/мин (BPM) - + between %1 and %2 - + Artist Изпълнител - + Album Artist Изпълнител - + Composer Композитор - + Title Заглавие - + Album Албум - + Grouping Групировка - + Year Година - + Genre Жанр - + Directory - + &Search selected @@ -15656,594 +16200,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck Дек - + Sampler - + Add to Playlist Добавяне към списък с песни - + Crates - + Колекции - + Metadata - + Update external collections - + Cover Art - + Обложка - + Adjust BPM - + Select Color - - + + Analyze - + Анализиране - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Добавяне към Авто DJ опашка (край) - + Add to Auto DJ Queue (top) Добавяне към Авто DJ опашка (начало) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Премахване - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Оценка - + Cue Point - + + Hotcues - + Intro - + Outro - + Key Ключ - + ReplayGain - + Waveform - + Comment Коментар - + All Всички - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Дек %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Създаване на нов списък с песни - + Enter name for new playlist: Въведете име за нов списък с песни - + New Playlist Нов списък с песни - - - + + + Playlist Creation Failed Създаването на списъка за изпъленине се провали - + A playlist by that name already exists. Вече съществува списък с песни с това име - + A playlist cannot have a blank name. Списъка с песни не може да бъде без име. - + An unknown error occurred while creating playlist: По време на създаването на списъка за изпълнение възникна неизвестна грешка: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Отказ - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Затваряне - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + + Don't show again during this session + + + + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16256,40 +16831,78 @@ This can not be undone! + + WTrackStemMenu + + + Load for stem mixing + + + + + Load pre-mixed stereo track + + + + + Load the "%1" stem + + + + + Load multiple stem into a stereo deck + + + + + Select stems to load + + + + + Release "CTRL" to load the current selection + + + + + Use "CTRL" to select multiple stems + + + WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16297,60 +16910,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Показване или скриване на колони. + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Изберете папка за музикалната библиотека - + controllers - + Cannot open database Не може да се отвори базата данни - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16364,67 +16982,78 @@ Mixxx се нуждае от QT с поддръжка за SQLite. Молже п mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Разглеждане - + Export directory - + Database version - + Export Изнасяне - + Cancel Отказ - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16443,30 +17072,35 @@ Mixxx се нуждае от QT с поддръжка за SQLite. Молже п - mixxx::LibraryExporter + mixxx::EnginePrimeExportJob - - Export Completed + + Failed to export track %1 - %2: +%3 + %1 is the artist %2 is the title and %3 is the original error message + + + mixxx::LibraryExporter - Exported %1 track(s) and %2 crate(s). + Export Completed - - Export Failed + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - Export failed: %1 + Export Failed - Exporting to Engine Prime... + Exporting to Engine DJ... @@ -16478,69 +17112,6 @@ Mixxx се нуждае от QT с поддръжка за SQLite. Молже п - - mixxx::hid::DeviceCategory - - - HID Interface %1: - - - - - Generic HID Pointer - - - - - Generic HID Mouse - - - - - Generic HID Joystick - - - - - Generic HID Game Pad - - - - - Generic HID Keyboard - - - - - Generic HID Keypad - - - - - Generic HID Multi-axis Controller - - - - - Unknown HID Desktop Device: - - - - - Apple HID Infrared Control - - - - - Unknown Apple HID Device: - - - - - Unknown HID Device: - - - mixxx::network::WebTask diff --git a/res/translations/mixxx_br.ts b/res/translations/mixxx_br.ts index e2799006bc2d..a0196e30b8d9 100644 --- a/res/translations/mixxx_br.ts +++ b/res/translations/mixxx_br.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist @@ -258,13 +258,13 @@ - + Playlist Creation Failed - + An unknown error occurred while creating playlist: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Pladenn - + Album Artist - + Artist Arzour - + Bitrate - + BPM - + Channels - + Color - + Comment - + Composer - + Cover Art - + Date Added Deiziad ouzhpennet - + Last Played - + Duration Padelezh - + Type - + Genre - + Grouping - + Key Alc'hwez - + Location - + Preview - + Rating - + ReplayGain - + Samplerate - + Played - + Title - + Track # - + Year Bloaz - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library - + Refresh directory tree - + Quick Links - - + + Devices - + Removable Devices - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages - + Export Crate - + Unlock - + An unknown error occurred while creating crate: - + Rename Crate + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. - + A crate by that name already exists. @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 - + Shoutcast 1 - + Icecast 1 - + MP3 - + Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% - + 16% - + 24% - + 50% - + 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename - + Export - + Delete - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: - + Location: - + Bitrate: - + Comments - + BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # - + Album Artist - + Composer - + Title - + Grouping - + Key Alc'hwez - + Year Bloaz - + Artist Arzour - + Album Pladenn - + Genre @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Alc'hwez - + harmonic with %1 - + BPM - + between %1 and %2 - + Artist Arzour - + Album Artist - + Composer - + Title - + Album Pladenn - + Grouping - + Year Bloaz - + Genre - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating - + Cue Point - + Hotcues - + Intro - + Outro - + Key Alc'hwez - + ReplayGain - + Waveform - + Comment - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist - - - + + + Playlist Creation Failed - + A playlist by that name already exists. - + A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_bs.ts b/res/translations/mixxx_bs.ts index 00725ebe21e1..e6aa4fec0bc1 100644 --- a/res/translations/mixxx_bs.ts +++ b/res/translations/mixxx_bs.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist @@ -258,13 +258,13 @@ - + Playlist Creation Failed - + An unknown error occurred while creating playlist: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Nije u mogućnosti pustiti pjesmu. @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Album - + Album Artist - + Artist Umjetnik - + Bitrate - + BPM - + Channels - + Color - + Comment - + Composer - + Cover Art - + Date Added Dodata na datum - + Last Played - + Duration - + Type - + Genre Žanr - + Grouping - + Key - + Location - + Preview - + Rating Ocjena - + ReplayGain - + Samplerate - + Played Puštano - + Title Naslov - + Track # Pjesma # - + Year Godina - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library - + Refresh directory tree - + Quick Links Brzi linkovi - - + + Devices Uređaji - + Removable Devices Uklonjivi uređaji - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Zaključaj @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages Uvezi sanduk - + Export Crate Izvezi sanduk - + Unlock Otključaj - + An unknown error occurred while creating crate: Došlo je do nepoznate greške prilikom pravljenja sanduka: - + Rename Crate Preimenuj sanduk + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Preimenovanje sanduka neuspješno - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Sanduk ne može imati prazno ime. - + A crate by that name already exists. Sanduk sa tim imenom već postoji. @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 - + Shoutcast 1 - + Icecast 1 - + MP3 - + Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% 10% - + 16% - + 24% - + 50% 50% - + 90% 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Preimenuj - + Export - + Delete Izbriši - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Uključen - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input Ulaz - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev Vinyl Konfiguracija - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: - + Location: - + Bitrate: - + Comments - + BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Pjesma # - + Album Artist - + Composer - + Title Naslov - + Grouping - + Key - + Year Godina - + Artist Umjetnik - + Album Album - + Genre Žanr @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Zaključaj - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock Otključaj - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Zaključaj - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key - + harmonic with %1 - + BPM - + between %1 and %2 - + Artist Umjetnik - + Album Artist - + Composer - + Title Naslov - + Album Album - + Grouping - + Year Godina - + Genre Žanr - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates Sanduci - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Ukloni - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Ocjena - + Cue Point - + Hotcues - + Intro - + Outro - + Key - + ReplayGain - + Waveform - + Comment - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist - - - + + + Playlist Creation Failed - + A playlist by that name already exists. - + A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_ca.qm b/res/translations/mixxx_ca.qm index 535c7bf8aacd..a339cfd0690d 100644 Binary files a/res/translations/mixxx_ca.qm and b/res/translations/mixxx_ca.qm differ diff --git a/res/translations/mixxx_ca.ts b/res/translations/mixxx_ca.ts index 5aeff2d1de3e..827eb20f6cde 100644 --- a/res/translations/mixxx_ca.ts +++ b/res/translations/mixxx_ca.ts @@ -2480,7 +2480,7 @@ traça - Per sobre + Missatges de perfil Move Beatgrid Half a Beat - Desplaça mig batec la graella rítmica + Desplaça mitja pulsació la graella rítmica @@ -2815,7 +2815,7 @@ traça - Per sobre + Missatges de perfil Create %1-beat loop with the current play position as loop end - Creeu un bucle d'1 ritme amb la posició de reproducció actual com a final del bucle + Creeu %1-beat bucle amb la posició de reproducció actual com a final del bucle @@ -3650,32 +3650,32 @@ traça - Per sobre + Missatges de perfil ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. Es deshabilitaran les funcions de les assignacions de controlador fins que el problema s'hagi resolt. - + You can ignore this error for this session but you may experience erratic behavior. Podeu ignorar l'error per aquesta sessió, però podríeu experimentar comportaments erràtics. - + Try to recover by resetting your controller. Intentar que s'arregli reiniciant la controladora. - + Controller Mapping Error Error de l'assignació de controlador - + The mapping for your controller "%1" is not working properly. L'assignació per al vostre controlador "%1" no funciona correctament. - + The script code needs to be fixed. Cal corregir el codi del script. @@ -5693,6 +5693,16 @@ Volue aplicar la configuració i continuar? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6302,62 +6312,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. La mida mínima de l'aparenca és més gran que la resolució de la vostra pantalla - + Allow screensaver to run Permet que s'activi l'estalvi de pantalla - + Prevent screensaver from running Evita que s'activi l'estalvi de pantalla - + Prevent screensaver while playing Evita l'estalvi de pantalla mentre reprodueix - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Aquesta aparença no suporta els esquemes de colors - + Information Informació - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7299,33 +7309,33 @@ Per més informació sobre aquestes opcions, aneu a %1 DlgPrefRecord - + Choose recordings directory Seleccioneu la carpeta d'enregistraments - - + + Recordings directory invalid El directori de les gravacions és incorrecte. - + Recordings directory must be set to an existing directory. El directori de les gravacions ha de ser un directori existent. - + Recordings directory must be set to a directory. Cal informar el camp de directori de gravacions - + Recordings directory not writable No es pot escriure al directori de gravacions - + You do not have write access to %1. Choose a recordings directory you have write access to. No teniu permis d'escriptura a %1. Seleccioneu un directori de gravació on tingueu permís d'escriptura. @@ -7343,43 +7353,55 @@ Per més informació sobre aquestes opcions, aneu a %1 Navega… - - + + This will include the filepath for each track in the CUE file. +This option makes the CUE file less portable and can reveal personal +information from filepaths (i.e. username) + + + + + Enable File Annotation in CUE file + + + + + Quality Qualitat - + Tags Etiquetes - + Title Tí­tol - + Author Autor - + Album Àlbum - + Output File Format Format de fitxer de sortida - + Compression Compressió - + Lossy Amb pèrdues @@ -7394,12 +7416,12 @@ Per més informació sobre aquestes opcions, aneu a %1 Directori: - + Compression Level Nivell de compressió - + Lossless Sense pèrdues @@ -9682,57 +9704,57 @@ Shown when VuMeter can not be displayed. Please keep OpenGL. - + activate activa - + toggle commuta - + right dreta - + left esquerra - + right small dreta petit - + left small esquerra petit - + up amunt - + down avall - + up small amunt petit - + down small avall petit - + Shortcut Drecera @@ -9805,22 +9827,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Importa la llista de reproducció - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Llistes de reproducció (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Voleu sobreescriure el fitxer? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10094,133 +10116,133 @@ Voleu sobreescriure aquesta llista? Continua - + Load track to Deck %1 Carrega la pista a la platina %1 - + Deck %1 is currently playing a track. La platina %1 està reproduint una pista. - + Are you sure you want to load a new track? Esteu segur de voler carregar una nova pista? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. No hi ha cap dispositiu d'entrada seleccionat per a aquest control de vinil. Si us plau, seleccioneu primer un dispositiu d'entrada a les preferències de Maquinari de so. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. No hi ha cap dispositiu d'entrada seleccionat per a aquest control de pas d'audio. Si us plau, seleccioneu primer un dispositiu d'entrada a les preferències de Maquinari de so. - + There is no input device selected for this microphone. Do you want to select an input device? No hi ha cap dispositiu d'entrada seleccionat per aquest micròfon. Volue seleccionar ara un dispositiu d'entrada? - + There is no input device selected for this auxiliary. Do you want to select an input device? No hi ha cap dispositiu d'entrada seleccionat per aquest auxiliar. Voleu seleccionar ara un dispositiu d'entrada? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Error en el fitxer d'aparença - + The selected skin cannot be loaded. No es pot carregar l'aparença seleccionada. - + OpenGL Direct Rendering OpenGL Renderització Directa - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. La Renderizació Directa no està habilitada a la vostra màquina.<br><br> Això significa que els gràfics forma d'ona seran molt <br><b>lents i poden fer servir molta CPU</b>. Prove de canviar la<br> configuració per habilitar la renderització directa, o desactiveu<br>els gràfics de forma d'ona a les preferències del Mixxx seleccionant<br>"Buit" al tipus de forma d'ona, en la secció de "Gràfics d'ona". - - - + + + Confirm Exit Confirma la sortida - + A deck is currently playing. Exit Mixxx? Un plat està reproduint encara. Voleu sortir del Mixxx? - + A sampler is currently playing. Exit Mixxx? Hi ha un reproductor de mostres que està reproduint. Segur que voleu sortir del Mixxx? - + The preferences window is still open. La finestra de preferències està oberta encara. - + Discard any changes and exit Mixxx? Descartar els canvis i sortir del Mixxx? @@ -10242,7 +10264,7 @@ Voleu seleccionar ara un dispositiu d'entrada? - + Playlists Llistes de reproducció @@ -10283,27 +10305,27 @@ Voleu seleccionar ara un dispositiu d'entrada? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Alguns DJ preparen llistes de reproducció abans d'actuar, però altres prefereixen fer-les en viu. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Quan utilitzeu una llista de reproducció durant una sessió en viu, recordeu parar atenció a com reacciona l'audiència a la música que heu decidit reproduir. - + Create New Playlist Crea una nova llista de reproducció @@ -11809,13 +11831,13 @@ Configureu un format diferent a les preferències La gravació amb OGG no està suportada. No s'ha pogut inicialitzar la llibreria OGG/Vorbis. - + encoder failure errada en el compressor - + Failed to apply the selected settings. No s'han pogut activar les opcions seleccionades @@ -11955,7 +11977,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough De pas @@ -12159,42 +12181,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12649,7 +12671,7 @@ may introduce a 'pumping' effect and/or distortion. SoftwareWaveformWidget - + Filtered Filtrat @@ -13656,7 +13678,7 @@ may introduce a 'pumping' effect and/or distortion. Lowers playback speed in small steps. - Canvia la velocitat en petites reduccions. + Canvia la velocitat en petites reduccions @@ -15708,323 +15730,353 @@ Això no es pot desfer! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crea una &nova llista de reproducció - + Create a new playlist Crea una nova llista de reproducció - + Ctrl+n Ctrl+n - + Create New &Crate Crea una nova &caixa - + Create a new crate Crea una nova caixa - + Ctrl+Shift+N Ctrl+Majús+N - - + + &View &Visualització - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. No està disponible a totes les aparences - + Show Skin Settings Menu Mostra el menú de les opcions d'aparença - + Show the Skin Settings Menu of the currently selected Skin Mostra el menú d'opcions disponibles per a l'aparença seleccionada - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostra la secció del micròfon - + Show the microphone section of the Mixxx interface. Mostra la secció de micròfons en la interfície del Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostra la secció de control per vinils - + Show the vinyl control section of the Mixxx interface. Mostra la secció dels controls de vinil a la interfície del Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostra el reproductor de pre-escolta - + Show the preview deck in the Mixxx interface. Mostra el reproductor de pre-escolta a la interfície del Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Mostra la caràtula - + Show cover art in the Mixxx interface. Mostra la caràtula a la interfície del Mixxx - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximitza la biblioteca - + Maximize the track library to take up all the available screen space. Maximitza o restaura la vista de Biblioteca per abarcar tota la pantalla - + Space Menubar|View|Maximize Library Espai - + &Full Screen Pantalla sencera - + Display Mixxx using the full screen Mostra Mixx a pantalla sencera - + &Options &Opcions - + &Vinyl Control Control per &vinils - + Use timecoded vinyls on external turntables to control Mixxx Permet l'ús de vinils amb codi de temps en tocadisc externs per controlar el Mixxx - + Enable Vinyl Control &%1 Activa el control de vinil &%1 - + &Record Mix En&registra la mescla - + Record your mix to a file Enregistra la vostra mescla a un fitxer - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activa la retransmissió en directe(&B) - + Stream your mixes to a shoutcast or icecast server Transmeteu les vostres mescles a un servidor de shoutcast o d'icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Habilita les dreceres de teclat(&K) - + Toggles keyboard shortcuts on or off Activa o desactiva les dreceres de teclat - + Ctrl+` Ctrl+` - + &Preferences &Preferències - + Change Mixxx settings (e.g. playback, MIDI, controls) Canvia les opcions de Mixxx (p.ex. reproducció, MIDI, controladores) - + &Developer &Desenvolupador - + &Reload Skin &Recarrega l'aparença - + Reload the skin Recarrega l'aparença del disc - + Ctrl+Shift+R Ctrl+Majús+R - + Developer &Tools Eines de desenvolupador(&T) - + Opens the developer tools dialog Obre la finesta d'eines de desenvolupador - + Ctrl+Shift+T Ctrl+Majús+T - + Stats: &Experiment Bucket Estadístiques: Comptador &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Activa el mode experiment. Recupera les estadístiques corresponents al comptador EXPERIMENT. - + Ctrl+Shift+E Ctrl+Majús+E - + Stats: &Base Bucket Estadístiques: Comptador &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Activa el mode bàsic. Recupera les estadístiques del comptador BASE. - + Ctrl+Shift+B Ctrl+Majús+B - + Deb&ugger Enabled Motor de dep&uració activat - + Enables the debugger during skin parsing Activa el motor de depuració durant el parseig de l'aparença - + Ctrl+Shift+D Ctrl+Majús+D - + &Help &Ajuda - + Show Keywheel menu title @@ -16041,74 +16093,74 @@ Això no es pot desfer! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Suport de la &Comunitat - + Get help with Mixxx Obteniu ajuda sobre el Mixxx - + &User Manual Manual de l'&usuari - + Read the Mixxx user manual. Llegiu el manual de l'usuari de Mixxx. - + &Keyboard Shortcuts Dreceres de teclat(&K) - + Speed up your workflow with keyboard shortcuts. Fes les coses més ràpid amb les dreceres de teclat. - + &Settings directory Directori de &preferències - + Open the Mixxx user settings directory. Obre el directori de preferències d'usuari del Mixxx - + &Translate This Application &Traduïu aquesta aplicació - + Help translate this application into your language. Ajudeu a traduir aquesta aplicació a la vostra llengua. - + &About Sobre el Mixxx (&A) - + About the application Sobre l'aplicació @@ -16143,25 +16195,13 @@ Això no es pot desfer! WSearchLineEdit - - Clear input - Clear the search bar input field - Esborra el text - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Cerca - + Clear input Esborra el text @@ -16172,93 +16212,87 @@ Això no es pot desfer! Cerca... - + Clear the search bar input field Neteja el camp de la barra de cerca - - Enter a string to search for - Introduïu un text de cerca + + Return + Enter - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Utilitza operadors com bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Per a més informació, feu un cop d'ull la Manual d'usuari > Llibreria del Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Drecera + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Posa el cursor aquí + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Tecla de retrocés + + Additional Shortcuts When Focused: + - Shortcuts - tecles ràpides + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Enter + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space Ctrl+Espai - + Toggle search history Shows/hides the search history entries commuta l'històric de cerques - + Delete or Backspace Suprimir o Retroceso - - Delete query from history - Esborra la consulta de l'històric - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Surt de la cerca + + Delete query from history + Esborra la consulta de l'històric @@ -17066,52 +17100,52 @@ Això no es pot desfer! mixxx::CoreServices - + fonts tipus de llegra - + database base de dades - + effects efectes - + audio interface interfície d'àudio - + decks reproductors - + library biblioteca - + Choose music library directory Seleccioneu la carpeta de la biblioteca de música. - + controllers controladors - + Cannot open database No es pot obrir la base de dades - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_cs.qm b/res/translations/mixxx_cs.qm index 4e9ba504595e..e12218757136 100644 Binary files a/res/translations/mixxx_cs.qm and b/res/translations/mixxx_cs.qm differ diff --git a/res/translations/mixxx_cs.ts b/res/translations/mixxx_cs.ts index ddc60d57cc15..e370920a2fa6 100644 --- a/res/translations/mixxx_cs.ts +++ b/res/translations/mixxx_cs.ts @@ -3651,32 +3651,32 @@ trace - Výše + Profilování zpráv ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. Funkce poskytované přiřazením tohoto ovladače budou až do vyřešení problému vypnuty. - + You can ignore this error for this session but you may experience erratic behavior. Nemusíte si pro toto sezení všímat této chyby, ale můžete zažít nevyzpytatelné chování. - + Try to recover by resetting your controller. Pokuste se o obnovu znovunastavením vašeho ovladače. - + Controller Mapping Error Chyba v přiřazení ovladače - + The mapping for your controller "%1" is not working properly. Přiřazení pro váš ovladač "%1" nefunguje správně. - + The script code needs to be fixed. Kód skriptu je potřeba opravit. @@ -5662,6 +5662,16 @@ Použít nastavení a pokračovat? Multi-Sampling Vícenásobné vzorkování + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6276,62 +6286,62 @@ Vždy můžete přetažením skladeb na obrazovce naklonovat přehrávač. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Nejmenší velikost vybraného vzhledu je větší než rozlišení vaší obrazovky. - + Allow screensaver to run Povolit běh spořiče obrazovky - + Prevent screensaver from running Zabránit spořiči obrazovky v běhu - + Prevent screensaver while playing Zabránit spořiči obrazovky v běhu během přehrávání - + Disabled Zakázáno - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Tento vzhled nepodporuje barevná schémata - + Information Informace - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Předtím než se změny, škálování nebo vícenásobné vzorkování projeví, bude se muset Mixxx spustit znovu. @@ -9625,57 +9635,57 @@ Shown when VuMeter can not be displayed. Please keep pro OpenGL. - + activate Zapnout - + toggle Přepnout - + right Vpravo - + left Vlevo - + right small Trochu doprava - + left small Trochu doleva - + up Nahoru - + down Dolů - + up small Trochu nahoru - + down small Trochu dolů - + Shortcut Klávesová zkratka @@ -9748,22 +9758,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Nahrát seznam skladeb - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Soubory se seznamy skladeb (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Přepsat soubor? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10037,133 +10047,133 @@ Opravdu chcete přepsat soubor? Pokračovat - + Load track to Deck %1 Nahrát skladbu do přehrávací mechaniky %1 - + Deck %1 is currently playing a track. Přehrávací mechanika %1 nyní přehrává skladbu. - + Are you sure you want to load a new track? Jste si jistý, že chcete nahrát novou skladbu? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Není vybráno žádné vstupní zařízení pro toto ovládání vinylovou gramodeskou. Nejprve, prosím, vyberte nějaké vstupní zařízení v nastavení zvukového technického vybavení. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Není vybráno žádné vstupní zařízení pro toto ovládání předání dál. Nejprve, prosím, vyberte nějaké vstupní zařízení v nastavení zvukového technického vybavení. - + There is no input device selected for this microphone. Do you want to select an input device? Pro tento mikrofon nebylo zjištěno žádné vstupní zařízení. Chcete vybrat vstupní zařízení? - + There is no input device selected for this auxiliary. Do you want to select an input device? Pro tuto pomocnou jednotku nebylo zjištěno žádné vstupní zařízení. Chcete vybrat vstupní zařízení? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Chyba v souboru se vzhledem - + The selected skin cannot be loaded. Nelze nahrát vybraný vzhled. - + OpenGL Direct Rendering Přímé vykreslování OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Přímé vykreslování není na vašem stroji povoleno.<br><br>Znamená to, že zobrazování průběhové křivky bude velmi<br><b>pomalé a může hodně zatěžovat procesor</b>. Buď aktualizujte své<br>nastavení a povolte přímé vykreslování, nebo zakažte<br>zobrazování průběhové křivky v nastavení Mixxxu volbou<br>"Prázdný" jako zobrazování průběhové křivky v části 'Rozhraní'. - - - + + + Confirm Exit Potvrdit ukončení - + A deck is currently playing. Exit Mixxx? Některá z přehrávacích mechanik hraje. Ukončit Mixxx? - + A sampler is currently playing. Exit Mixxx? Vzorkovač nyní hraje. Ukončit Mixxx? - + The preferences window is still open. Okno s nastavením je stále otevřené. - + Discard any changes and exit Mixxx? Zahodit všechny změny a ukončit Mixxx? @@ -10185,7 +10195,7 @@ Chcete vybrat vstupní zařízení? - + Playlists Seznamy skladeb @@ -10226,27 +10236,27 @@ Chcete vybrat vstupní zařízení? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Seznamy skladeb jsou uspořádané seznamy skladeb, které vám umožňují plánovat vaše seznamy skladeb při míchání. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Může být nezbytné přeskočit některé skladby v předpřipraveném seznamu skladeb nebo přidat několik nových skladeb pro udržení posluchačů při síle. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Někteří diskžokejové sestavují seznamy skladeb, předtím než vystoupí živě, ale jiní upřednostňují jejich tvoření bez rozmýšlení. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Když používáte seznam skladeb během míchání, dávejte vždy obzvláštní pozor na to, jak hudba, kterou hrajete, účinkuje na posluchačstvo. - + Create New Playlist Vytvořit nový seznam skladeb @@ -11907,7 +11917,7 @@ Nápověda: vyvažuje „čipmánčí“ nebo „vrčící“ hlasyMíra zesílení použitého na zvukový signál. Ve vyšších úrovních bude zvuk více zkreslený. - + Passthrough Propustit skrz @@ -15661,323 +15671,353 @@ Tento krok nelze vrátit zpět! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Vytvořit &nový seznam skladeb - + Create a new playlist Vytvořit nový seznam skladeb - + Ctrl+n Ctrl+N - + Create New &Crate Vytvořit novou &přepravku - + Create a new crate Vytvořit novou přepravku - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Pohled - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Nebude pravděpodobně podporován všemi vzhledy. - + Show Skin Settings Menu Ukázat nabídku nastavení vzhledu - + Show the Skin Settings Menu of the currently selected Skin Ukázat nabídku nastavení vzhledu nyní vybraného vzhledu - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Ukázat mikrofony - + Show the microphone section of the Mixxx interface. Ukázat oblast s mikrofonem rozhraní Mixxxu. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Ukázat ovládání vinylem - + Show the vinyl control section of the Mixxx interface. Ukázat oblast ovládání vinylovou gramodeskou v rozhraní Mixxxu. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Ukázat přehrávač náhledu - + Show the preview deck in the Mixxx interface. Ukázat oblast s přehrávač náhledu v rozhraní Mixxxu. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Ukázat obal - + Show cover art in the Mixxx interface. Ukázat obal v rozhraní Mixxxu. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Zvětšit okno knihovny - + Maximize the track library to take up all the available screen space. Zvětšit knihovnu skladeb tak, aby zabírala veškerý na obrazovce dostupný prostor. - + Space Menubar|View|Maximize Library Mezerník - + &Full Screen Na &celou obrazovku - + Display Mixxx using the full screen Zobrazit Mixxx v režimu celé obrazovky - + &Options &Volby - + &Vinyl Control Ovládání &vinylem - + Use timecoded vinyls on external turntables to control Mixxx Použít vinylové gramodesky s časovým kódem k ovládání programu Mixxx vnějšími přehrávači (gramofony) - + Enable Vinyl Control &%1 Povolit ovládání vinylem &%1 - + &Record Mix Nah&rát míchání - + Record your mix to a file Nahrát míchání do souboru - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting &Povolit živé vysílání - + Stream your mixes to a shoutcast or icecast server Vysílat vaše míchání na server shoutcast nebo icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Povolit &klávesové zkratky - + Toggles keyboard shortcuts on or off Zapnout/Vypnout klávesové zkratky - + Ctrl+` Ctrl+` - + &Preferences &Nastavení - + Change Mixxx settings (e.g. playback, MIDI, controls) Změnit nastavení Mixxxu (např. přehrávání, MIDI, ovládací prvky) - + &Developer &Vývojář - + &Reload Skin Nahrát vzhled &znovu - + Reload the skin Nahrát vzhled znovu - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Vývojářské &nástroje - + Opens the developer tools dialog Otevře dialog vývojářských nástrojů - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Statistiky: &Pokusný kýbl - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Zapne pokusný režim. Sbírá statistiky do POKUSNÉHO sledovacího kýblu. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Statistiky: &Základní kýbl - + Enables base mode. Collects stats in the BASE tracking bucket. Zapne základní režim. Sbírá statistiky do ZÁKLADNÍHO sledovacího kýblu. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled &Ladění povoleno - + Enables the debugger during skin parsing Zapne ladiče během zpracování vzhledu - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Nápověda - + Show Keywheel menu title Zobrazit kolo klíčů @@ -15994,74 +16034,74 @@ Tento krok nelze vrátit zpět! - + Show keywheel tooltip text Zobrazit kolo klíčů - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Podpora &společenství - + Get help with Mixxx Dostat nápovědu k Mixxxu - + &User Manual &Uživatelská příručka - + Read the Mixxx user manual. Číst uživatelskou příručku k Mixxxu. - + &Keyboard Shortcuts &Klávesové zkratky - + Speed up your workflow with keyboard shortcuts. Zrychlit pracovní postup s klávesovými zkratkami - + &Settings directory Adresář &nastavení - + Open the Mixxx user settings directory. Otevřít adresář uživatelských nastavení Mixxx. - + &Translate This Application &Překlad - + Help translate this application into your language. Pomozte přeložit tento program do svého jazyka. - + &About &O programu - + About the application O tomto programu @@ -16096,25 +16136,13 @@ Tento krok nelze vrátit zpět! WSearchLineEdit - - Clear input - Clear the search bar input field - Vyčistit vstup - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Hledat - + Clear input Vyčistit vstup @@ -16125,93 +16153,87 @@ Tento krok nelze vrátit zpět! Hledat... - + Clear the search bar input field Vyprázdnit zadávací pole vyhledávacího řádku - - Enter a string to search for - Zadejte řetězec k vyhledání + + Return + Návrat - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Použít operátory jako je MM:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Na další informace se podívejte v Uživatelská příručka → Knihovna Mixxxu + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Klávesová zkratka + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Zaměření + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts - Klávesové zkratky + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Návrat + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Spusťte hledání před vypršením časového limitu zadávání hledání nebo přeskočte na zobrazení skladeb + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+mezerník - + Toggle search history Shows/hides the search history entries Přepnout historii vyhledávání - + Delete or Backspace Delete nebo Backspace - - Delete query from history - Odstranit dotaz z historie - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Ukončit hledání + + Delete query from history + Odstranit dotaz z historie @@ -17018,52 +17040,52 @@ Tento krok nelze vrátit zpět! mixxx::CoreServices - + fonts písma - + database databáze - + effects efekty - + audio interface rozhraní zvuku - + decks Přehrávače - + library knihovna - + Choose music library directory Vybrat adresář s hudební knihovnou - + controllers ovladače - + Cannot open database Nelze otevřít databázi - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_de.qm b/res/translations/mixxx_de.qm index c50696646d34..dc369d8dc6e8 100644 Binary files a/res/translations/mixxx_de.qm and b/res/translations/mixxx_de.qm differ diff --git a/res/translations/mixxx_de.ts b/res/translations/mixxx_de.ts index 3f4e38106ba9..b63ed9eb525f 100644 --- a/res/translations/mixxx_de.ts +++ b/res/translations/mixxx_de.ts @@ -56,7 +56,7 @@ Do you really want to remove all tracks from the Auto DJ queue? - Möchten Sie wirklich alle Titel aus der Auto-DJ-Warteschlange entfernen? + Möchten Sie wirklich alle Titel aus der Auto DJ-Warteschlange entfernen? @@ -94,8 +94,7 @@ There was an error loading your Banshee database at - Beim Laden der Banshee-Datenbank "%1" ist ein Fehler aufgetreten. - + Beim Laden der Banshee-Datenbank "%1" ist ein Fehler aufgetreten. @@ -3649,32 +3648,32 @@ trace - Wie oben + Profiling-Meldungen ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. Die von diesem Controller-Mapping bereitgestellten Funktionen werden deaktiviert, bis das Problem behoben ist. - + You can ignore this error for this session but you may experience erratic behavior. Sie können den Fehler für diese Sitzung ignorieren, es kann aber zu unvorhergesehenem Verhalten kommen. - + Try to recover by resetting your controller. Versuchen Sie, Ihren Controller durch aus-/anschalten zurückzusetzen. - + Controller Mapping Error Fehler im Controller-Mapping - + The mapping for your controller "%1" is not working properly. Das Mapping für Ihren Controller "%1" funktioniert nicht richtig. - + The script code needs to be fixed. Der Skript-Code muss korrigiert werden. @@ -4206,7 +4205,7 @@ crossfader, so that the intro starts at full volume. Skip Silence Start Full Volume - Stille überspringen, Start mit voller Lautstärke + Stille überspringen, starte mit voller Lautstärke @@ -5662,6 +5661,16 @@ Einstellungen übernehmen und fortfahren? Multi-Sampling Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6276,62 +6285,62 @@ Sie können jederzeit Tracks auf dem Bildschirm ziehen und ablegen, um ein Deck DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Die minimale Größe des ausgewählten Skins ist größer als Ihre Bildschirmauflösung. - + Allow screensaver to run Bildschirmschoner erlauben - + Prevent screensaver from running Bildschirmschoner unterdrücken - + Prevent screensaver while playing Bildschirmschoner während der Wiedergabe unterdrücken - + Disabled Deaktiviert - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Dieses Skin unterstützt keine Farbschemen - + Information Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx muss neu gestartet werden, damit die neuen Sprach-, Skalierungs- oder Multi-Sampling-Einstellungen wirksam werden. @@ -7598,7 +7607,7 @@ Die Ziel-Lautheit ist ungefähr und nimmt an, dass Track-Vorverstärkung und Mas Are you sure? - Sind Sie sich sicher? + Bist du dir sicher? @@ -7608,7 +7617,7 @@ Die Ziel-Lautheit ist ungefähr und nimmt an, dass Track-Vorverstärkung und Mas Are you sure you wish to proceed? - Sind Sie sich sicher, dass Sie fortfahren möchtest? + Bist du dir sicher, dass du fortfahren möchtest? @@ -8004,7 +8013,7 @@ Die Ziel-Lautheit ist ungefähr und nimmt an, dass Track-Vorverstärkung und Mas OpenGL Status - OpenGL-Status + OpenGL Status @@ -8709,7 +8718,7 @@ Dies kann nicht rückgängig gemacht werden! (status text) - + (status text) @@ -9623,57 +9632,57 @@ Shown when VuMeter can not be displayed. Please keep Unterstützung. - + activate aktivieren - + toggle umschalten - + right rechts - + left links - + right small wenig rechts - + left small wenig links - + up hoch - + down runter - + up small wenig hoch - + down small wenig runter - + Shortcut Tastenkombination @@ -9752,22 +9761,22 @@ Der Vorgang wird zur zur Vermeidung von Inkonsistenzen in der Bibliothek abgebro LibraryFeature - + Import Playlist Wiedergabeliste importieren - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Wiedergabeliste-Dateien (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Datei überschreiben? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10041,133 +10050,133 @@ Möchten Sie wirklich diese Datei überschreiben? Weiter - + Load track to Deck %1 Track in Deck %1 laden - + Deck %1 is currently playing a track. Deck %1 spielt derzeit einen Track. - + Are you sure you want to load a new track? Möchten Sie wirklich einen neuen Track laden? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Es ist kein Eingabegerät für diese Vinyl-Steuerung ausgewählt. Bitte wählen Sie zuerst ein Eingabegerät in den Sound-Hardware-Einstellungen. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Es ist kein Eingabegerät für diese Passthrough-Steuerung ausgewählt. Bitte wählen Sie zuerst ein Eingabegerät in den Sound-Hardware-Einstellungen. - + There is no input device selected for this microphone. Do you want to select an input device? Es ist kein Eingabegerät für dieses Mikrofon ausgewählt. Wollen Sie ein Eingabegerät auswählen? - + There is no input device selected for this auxiliary. Do you want to select an input device? Es ist kein Eingabegerät für diesen Aux ausgewählt. Wollen Sie ein Eingabegerät auswählen? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total %1 Tracks insgesamt - + %1 new tracks found %1 neue Tracks gefunden - + %1 moved tracks detected %1 verschobene Tracks erkannt - + %1 tracks are missing (%2 total) %1 Tracks fehlen (%2 insgesamt) - + %1 tracks have been rediscovered %1 Tracks wurden wiedergefunden - + Library scan finished Bibliothek-Scan abgeschlossen - + Error in skin file Fehler in Skin-Datei - + The selected skin cannot be loaded. Das gewählte Skin kann nicht geladen werden. - + OpenGL Direct Rendering Direktes Rendern mit OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Direktes Rendern ist auf Ihrem System nicht aktiviert.<br><br>Dies bedeutet, dass die Wellenform-Anzeige sehr langsam sein wird <br><b>und möglicherweise Ihre CPU stark belastet</b>. Entweder aktualisieren Sie Ihre<br>Konfiguration, um direktes Rendern zu aktivieren oder deaktivieren<br>die Wellenform-Anzeige in den Mixxx-Einstellungen durch die Auswahl von<br>"Leer" als Wellenform-Anzeige im Bereich 'Benutzeroberfläche'. - - - + + + Confirm Exit Beenden bestätigen - + A deck is currently playing. Exit Mixxx? Ein Deck spielt derzeit. Mixxx beenden? - + A sampler is currently playing. Exit Mixxx? Ein Sampler spielt derzeit. Mixxx beenden? - + The preferences window is still open. Das Einstellungen-Fenster ist noch geöffnet. - + Discard any changes and exit Mixxx? Alle Änderungen verwerfen und Mixxx schließen? @@ -10189,7 +10198,7 @@ Wollen Sie ein Eingabegerät auswählen? - + Playlists Wiedergabelisten @@ -10230,27 +10239,27 @@ Wollen Sie ein Eingabegerät auswählen? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Wiedergabelisten sind geordnete Listen von Tracks, mit denen Sie Ihre DJ-Sets planen können. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Es kann notwendig sein, einige Tracks in Ihrer vorbereiteten Wiedergabeliste zu überspringen oder einige andere Tracks hinzuzufügen, um die Energie Ihres Publikums aufrechtzuerhalten. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Einige DJs stellen Wiedergabelisten zusammen bevor sie live auftreten, während andere es bevorzugen sie währenddessen zu erstellen. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Achten Sie bei der Verwendung einer Wiedergabeliste während eines Live-DJ-Sets immer darauf, wie das Publikum auf die von Ihnen gespielte Musik reagiert. - + Create New Playlist Neue Wiedergabeliste erstellen @@ -10293,7 +10302,7 @@ Wollen Sie ein Eingabegerät auswählen? Mixxx Track Colors - Mixxx-Track-Farben + Mixxx Track-Farben @@ -11911,7 +11920,7 @@ Hinweis: Kompensiert "Chipmunk"- oder "Brumm"- StimmenDie Intensität der Verstärkung, die auf das Audiosignal angewendet wird. Bei höheren Pegeln wird der Ton stärker verzerrt. - + Passthrough Passthrough @@ -15666,323 +15675,353 @@ Dies kann nicht rückgängig gemacht werden! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Neue &Wiedergabeliste erstellen - + Create a new playlist Neue Wiedergabeliste erstellen - + Ctrl+n Strg+N - + Create New &Crate Neue &Plattenkiste erstellen - + Create a new crate Neue Plattenkiste erstellen - + Ctrl+Shift+N Strg+Umschalt+N - - + + &View &Ansicht - + Auto-hide menu bar Menüleiste automatisch verbergen - + Auto-hide the main menu bar when it's not used. Menüleiste automatisch verbergen wenn sie nicht verwendet wird.. - + May not be supported on all skins. Wird möglicherweise nicht von allen Skins unterstützt. - + Show Skin Settings Menu Skin-Einstellungsmenü anzeigen - + Show the Skin Settings Menu of the currently selected Skin Das Skin-Einstellungsmenü des aktuell ausgewählten Skin anzeigen - + Ctrl+1 Menubar|View|Show Skin Settings Strg+1 - + Show Microphone Section Mikrofon-Bereich anzeigen - + Show the microphone section of the Mixxx interface. Den Mikrofon-Bereich der Mixxx-Benutzeroberfläche anzeigen. - + Ctrl+2 Menubar|View|Show Microphone Section Strg+2 - + Show Vinyl Control Section Vinyl-Steuerung-Bereich anzeigen - + Show the vinyl control section of the Mixxx interface. Den Vinyl-Steuerung Bereich der Mixxx-Benutzeroberfläche anzeigen. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Strg+3 - + Show Preview Deck Vorhör-Deck anzeigen - + Show the preview deck in the Mixxx interface. Das Vorhör-Deck in der Mixxx-Benutzeroberfläche anzeigen. - + Ctrl+4 Menubar|View|Show Preview Deck Strg+4 - + Show Cover Art Cover-Bild anzeigen - + Show cover art in the Mixxx interface. Cover-Bild in der Mixxx-Benutzeroberfläche anzeigen. - + Ctrl+6 Menubar|View|Show Cover Art Strg+6 - + Maximize Library Bibliothek maximieren - + Maximize the track library to take up all the available screen space. Die Track-Bibliothek auf den verfügbaren Bildschirmplatz maximieren. - + Space Menubar|View|Maximize Library Leertaste - + &Full Screen &Vollbild - + Display Mixxx using the full screen Mixxx im Vollbildmodus anzeigen - + &Options &Optionen - + &Vinyl Control &Vinyl-Steuerung - + Use timecoded vinyls on external turntables to control Mixxx Timecode-Vinyls benutzen um Mixxx mit externen Plattenspielern zu steuern - + Enable Vinyl Control &%1 Vinyl-Steuerung &%1 aktivieren - + &Record Mix &Mix aufnehmen - + Record your mix to a file Aufnahme Ihres Mixes in eine Datei - + Ctrl+R Strg+R - + Enable Live &Broadcasting &Liveübertragung aktivieren - + Stream your mixes to a shoutcast or icecast server Den Mix zu einem Icecast- oder Shoutcast-Server streamen - + Ctrl+L Strg+L - + Enable &Keyboard Shortcuts &Tastenkombinationen aktivieren - + Toggles keyboard shortcuts on or off Tastenkombinationen ein-/ausschalten - + Ctrl+` Strg+` - + &Preferences &Einstellungen - + Change Mixxx settings (e.g. playback, MIDI, controls) Mixxx Einstellungen verändern (z.B. Wiedergabe, MIDI, Steuerelemente) - + &Developer &Entwickler - + &Reload Skin Skin &neu laden - + Reload the skin Das Skin neu laden - + Ctrl+Shift+R Strg+Umschalt+R - + Developer &Tools Entwickler&werkzeuge - + Opens the developer tools dialog Öffnet den Entwicklerwerkzeuge-Dialog - + Ctrl+Shift+T Strg+Umschalt+T - + Stats: &Experiment Bucket Statistiken: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Aktiviert den Experiment-Modus. Sammelt Statistiken im Experiment-Tracking-Bucket. - + Ctrl+Shift+E Strg+Umschalt+E - + Stats: &Base Bucket Statistiken: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. Aktiviert den Base-Modus. Sammelt Statistiken im Base-Tracking-Bucket. - + Ctrl+Shift+B Strg+Umschalt+B - + Deb&ugger Enabled Deb&ugger aktiviert - + Enables the debugger during skin parsing Aktiviert den Debugger während des Parsens der Skins - + Ctrl+Shift+D Strg+Umschalt+D - + &Help &Hilfe - + Show Keywheel menu title Tonartrad anzeigen @@ -15999,74 +16038,74 @@ Dies kann nicht rückgängig gemacht werden! Die Bibliothek in das Engine DJ Format exportieren - + Show keywheel tooltip text Tonartrad anzeigen - + F12 Menubar|View|Show Keywheel F12 - + &Community Support &Community Unterstützung - + Get help with Mixxx Hilfe zu Mixxx erhalten - + &User Manual &Benutzerhandbuch - + Read the Mixxx user manual. Mixxx-Benutzerhandbuch lesen. - + &Keyboard Shortcuts &Tastenkombinationen - + Speed up your workflow with keyboard shortcuts. Beschleunigen Sie Ihren Arbeitsablauf mit Tastenkombinationen. - + &Settings directory &Einstellungs-Verzeichnis - + Open the Mixxx user settings directory. Das Verzeichnis mit den Mixxx-Benutzereinstellungen öffnen. - + &Translate This Application Diese Anwendung &übersetzen - + Help translate this application into your language. Helfen Sie, diese Anwendung in Ihre Sprache zu übersetzen. - + &About &Über - + About the application Über diese Anwendung @@ -16101,25 +16140,13 @@ Dies kann nicht rückgängig gemacht werden! WSearchLineEdit - - Clear input - Clear the search bar input field - Eingabe löschen - - - - Ctrl+F - Search|Focus - Strg+F - - - + Search noun Suche - + Clear input Eingabe löschen @@ -16130,93 +16157,87 @@ Dies kann nicht rückgängig gemacht werden! Suchen … - + Clear the search bar input field Eingabefeld der Suchleiste löschen - - Enter a string to search for - Geben Sie einen Suchbegriff ein + + Return + Enter - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Verwenden Sie Operatoren wie bpm:115-128, artist:Max Muster, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Für weitere Informationen siehe Benutzerhandbuch > Mixxx Bibliothek + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Tastenkombination + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Strg+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Fokus + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Strg+Rücktaste + + Additional Shortcuts When Focused: + - Shortcuts - Tastenkombinationen + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Enter + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Suche auslösen, vor dem Timeout für Instant-Suche, oder danach zur Track-Ansicht wechseln + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Strg+Leertaste - + Toggle search history Shows/hides the search history entries Suchverlauf ein-/ausblenden - + Delete or Backspace Löschen oder Backspace - - Delete query from history - Suchbegriff aus dem Verlauf löschen - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Suche verlassen + + Delete query from history + Suchbegriff aus dem Verlauf löschen @@ -17023,52 +17044,52 @@ Dies kann nicht rückgängig gemacht werden! mixxx::CoreServices - + fonts Schriftarten - + database Datenbank - + effects Effekte - + audio interface Audio-Interface - + decks Decks - + library Bibliothek - + Choose music library directory Verzeichnis für die Musikbibliothek auswählen - + controllers Controller - + Cannot open database Kann Datenbank nicht öffnen - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_el.qm b/res/translations/mixxx_el.qm index 548f555b5aa7..8723778571bc 100644 Binary files a/res/translations/mixxx_el.qm and b/res/translations/mixxx_el.qm differ diff --git a/res/translations/mixxx_el.ts b/res/translations/mixxx_el.ts index e77bf12e7a07..d9245f2fb4a8 100644 --- a/res/translations/mixxx_el.ts +++ b/res/translations/mixxx_el.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Αφαίρεση κιβωτίου ως πηγή κομματιών - + Auto DJ Αυτόματος DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Προσθήκη κιβωτίου ως πηγή κομματιών @@ -149,28 +149,28 @@ BasePlaylistFeature - + New Playlist Νέα Λίστα Αναπαραγωγής - + Add to Auto DJ Queue (bottom) Προσθήκη στη λίστα του Αυτόματου DJ (στο τέλος) - + Create New Playlist Δημιουργία νέας λίστας αναπαραγωγής - + Add to Auto DJ Queue (top) Προσθήκη στη λίστα του Αυτόματου DJ (στην αρχή) - + Remove Αφαίρεση @@ -180,12 +180,12 @@ Μετονομασία - + Lock Κλείδωμα - + Duplicate Κλωνοποίηση @@ -206,24 +206,24 @@ Ανάλυση ολόκληρης της λίστας αναπαραγωγής - + Enter new name for playlist: Εισάγετε νέο όνομα για τη λίστα αναπαραγωγής: - + Duplicate Playlist Κλωνοποίηση λίστας αναπαραγωγής - - + + Enter name for new playlist: Εισάγετε όνομα για τη νέα λίστα αναπαραγωγής: - + Export Playlist Εξαγωγή λίστας αναπαραγωγής @@ -233,70 +233,77 @@ Προσθήκη στη λίστα του Αυτόματου DJ (Αντικατάσταση) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Μετονομασία λίστας αναπαραγωγής - - + + Renaming Playlist Failed Η μετονομασία της λίστας αναπαραγωγής απέτυχε - - - + + + A playlist by that name already exists. Μια λίστα αναπαραγωγής με αυτό το όνομα υπάρχει ήδη. - - - + + + A playlist cannot have a blank name. Η λίστα αναπαραγωγής δεν μπορεί να έχει κενό όνομα. - + _copy //: Appendix to default name when duplicating a playlist _αντίγραφο - - - - - - + + + + + + Playlist Creation Failed Η δημιουργία λίστας αναπαραγωγής απέτυχε - - + + An unknown error occurred while creating playlist: Προέκυψε άγνωστο σφάλμα κατά τη δημιουργία λίστας: - + Confirm Deletion Επιβεβαίωση Διαγραφής - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) Λίστα αναπαραγωγής M3U (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Λίστα αναπαραγωγής M3U (*.m3u);;Λίστα αναπαραγωγής M3U8 (*.m3u8);;Λίστα αναπαραγωγής PLS (*.pls);;Κείμενο CSV (*.csv);;Απλό κείμενο (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Χρονική σήμανση @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. H φόρτωση του κομματιού απέτυχε. @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Άλμπουμ - + Album Artist Καλλιτέχνης δίσκου - + Artist Καλλιτέχνης - + Bitrate Ρυθμός μετάδοσης bit - + BPM BPM - + Channels Κανάλια - + Color Χρώμα - + Comment Σχόλιο - + Composer Συνθέτης - + Cover Art Εξώφυλλο - + Date Added Ημερομηνία προσθήκης - + Last Played - + Duration Διάρκεια - + Type Τύπος - + Genre Είδος - + Grouping Ομαδοποίηση - + Key Κλειδί - + Location Θέση - + + Overview + + + + Preview Προεπισκόπηση - + Rating Αξιολόγηση - + ReplayGain ReplayGain - + Samplerate Ρυθμός δειγματοληψίας - + Played Έπαιξε - + Title Τίτλος - + Track # Αρ. κομματιού - + Year Έτος - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Προσθήκη στους Γρήγορους Συνδέσμους - + Remove from Quick Links Αφαίρεση από Γρήγορους Συνδέσμους - + Add to Library Προσθήκη στη Συλλογή - + Refresh directory tree - + Quick Links Γρήγοροι Σύνδεσμοι - - + + Devices Συσκευές - + Removable Devices Αφαιρούμενες συσκευές - - + + Computer Υπολογιστής - + Music Directory Added Προστέθηκε Μουσικός Κατάλογος - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Προσθέσατε έναν ή περισσότερους μουσικούς καταλόγους. Τα κομμάτια σε αυτούς τους καταλόγους δεν θα είναι διαθέσιμα μέχρι να επανασαρωθεί η συλλογή σας. Θέλετε να γίνει τώρα επανασάρωση; - + Scan Σάρωση - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. Ο "Υπολογιστής" σας επιτρέπει την πλοήγηση σε, προβολή και φόρτωση κομματιών από φακέλους στο σκληρό σας δίσκο και τις εξωτερικές σας συσκευές. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -749,87 +771,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -839,27 +861,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1041,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume Ρύθμιση σε πλήρη ένταση - + Set to zero volume Ρύθμιση σε μηδενική ένταση @@ -1072,13 +1099,13 @@ trace - Above + Profiling messages Κουμπί αντίστροφης κύλισης (Λογοκρισία) - + Headphone listen button Κουμπί για ακρόαση ακουστικών - + Mute button Κουμπί σίγασης @@ -1089,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Προσανατολισμός μείξης (π.χ. αρ., δεξ., κέντρο) - + Set mix orientation to left Ρύθμιση προσανατολισμού μείξης προς τα αριστερά - + Set mix orientation to center Ρύθμιση προσανατολισμού μείξης προς το κέντρο - + Set mix orientation to right Ρύθμιση προσανατολισμού μείξης προς τα δεξιά @@ -1148,23 +1175,23 @@ trace - Above + Profiling messages Πλήκτρο χτύπου BPM - + Toggle quantize mode Ενεργ./Απενεργ. λειτουργίας κβαντισμού - + One-time beat sync (tempo only) Άμεσος συγχρον. ρυθμού (μόνο βήμα) - + One-time beat sync (phase only) Άμεσος συγχρον. ρυθμού (μόνο φάση) - + Toggle keylock mode Ενεργ./Απενεργ. λειτουργίας κλειδώματος ύψους @@ -1174,193 +1201,193 @@ trace - Above + Profiling messages Ισοσταθμιστές - + Vinyl Control Έλεγχος βινυλίου - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Ενεργ./Απενεργ. λειτουργίας cueing ελέγχου-βινυλίου (ΑΝΕΝΕΡΓΟ/ΕΝΑ/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) Τρόπος ελέγχου-βινυλίου (ΑΠΟΛ/ΣΧΕΤ/ΣΤΑΘ) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping Επανάληψη - + Loop In button Κουμπί Εισόδου στην Επανάληψη - + Loop Out button Κουμπί Εξόδου από την Επανάληψη - + Loop Exit button Κουμπί για έξοδο από τον βρόχο (loop) - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1476,20 +1503,20 @@ trace - Above + Profiling messages - - + + Volume Fader Ποτενσιόμετρο Έντασης - + Full Volume Πλήρης Ένταση - + Zero Volume Μηδενική ένταση @@ -1505,7 +1532,7 @@ trace - Above + Profiling messages - + Mute Σίγαση @@ -1516,7 +1543,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1537,25 +1564,25 @@ trace - Above + Profiling messages - + Orientation Προσανατολισμός - + Orient Left - + Orient Center - + Orient Right @@ -1625,82 +1652,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync Συγχρονισμός - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch Έλεγχος τόνου (δεν επηρεάζει το ρυθμό), το κέντρο αντιστοιχεί στον αρχικό τόνο - + Pitch Adjust Ρύθμιση Τόνου - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1741,451 +1768,451 @@ trace - Above + Profiling messages Χαμηλός Ισοσταθμιστής - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Προσθήκη στη λίστα του Αυτόματου DJ (στο τέλος) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Προσθήκη στη λίστα του Αυτόματου DJ (στην αρχή) - + Prepend selected track to the Auto DJ Queue - + Load Track Άνοιγμα κομματιού - + Load selected track Φόρτωση του διαλεγμένου κομματιού - + Load selected track and play Φόρτωση του επιλεγμένου κομματιού και αναπαραγωγή - - + + Record Mix Εγγραφή μίξης - + Toggle mix recording - + Effects Εφέ - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear Εκκαθάριση - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Επόμενο - + Switch to next effect - + Previous Προηγούμενο - + Switch to the previous effect Εναλλαγή στο προηγούμενο εφέ - + Next or Previous Επόμενο ή Προηγούμενο - + Switch to either next or previous effect Εναλλαγή είτε στο επόμενο είτε στο προηγούμενο εφέ - - + + Parameter Value Τιμή Παραμέτρου - - + + Microphone Ducking Strength Ισχύς "Βύθισης" Μικροφώνου - + Microphone Ducking Mode Λειτουργία "Βύθισης" Μικροφώνου - + Gain Ενίσχυση - + Gain knob Κουμπί ρύθμισης του gain - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle Εναλλαγή Aυτόματου DJ - + Toggle Auto DJ On/Off Θέστε τον Αυτόματο DJ εντός/εκτός λειτουργίας - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore Μεγιστοποίηση/Επαναφορά Βιβλιοθήκης - + Maximize the track library to take up all the available screen space. Μεγιστοποίηση της βιλιοθήκης αρχείων ώστε να καταλαμβάνει ολόκληρο τον διαθέσιμο χώρο της οθόνης - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2200,102 +2227,102 @@ trace - Above + Profiling messages Ενίσχυση Ακουστικού - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Ταχύτητα αναπαραγωγής - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed Αύξηση ταχύτητας - + Adjust speed faster (coarse) - + Increase Speed (Fine) Αύξηση Ταχύτητας (Ακριβής) - + Adjust speed faster (fine) - + Decrease Speed Ελάττωση ταχύτητας - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed Προσωρινή αύξηση ταχύτητας - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed Προσωρινή μείωση ταχύτητας - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2447,1041 +2474,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) Προσθήκη στη λίστα του Αυτόματου DJ (Αντικατάσταση) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Μικρόφωνο ανοιχτό/κλειστό - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Αυτόματος DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track Ενεργοποίηση μετάβασης στο επόμενο κομμάτι - + User Interface Διεπαφή χρήστη - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator Μικρόφωνο && Θύρα Aux Εμφάνιση/Απόκρυψη - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section Εμφάνιση/ Απόκρυψη ενότητας για τον έλεγχο βινυλίου - + Preview Deck Show/Hide - + Show/hide the preview deck Εμφάνιση/ Απόκρυψη του deck προεπισκόπησης - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3596,32 +3645,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3665,13 +3714,13 @@ trace - Above + Profiling messages CrateFeature - + Remove Αφαίρεση - + Create New Crate @@ -3681,132 +3730,132 @@ trace - Above + Profiling messages Μετονομασία - - + + Lock Κλείδωμα - + Export Crate as Playlist - + Export Track Files Εξαγωγή αρχείων ήχου - + Duplicate Κλωνοποίηση - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Κιβώτια - - + + Import Crate Εισαγωγή Κιβωτίου - + Export Crate Εξαγωγή Κιβωτίου - + Unlock Ξεκλείδωμα - + An unknown error occurred while creating crate: Προκλήθηκε άγνωστο σφάλμα κατά την δημιουργία του κιβωτίου: - + Rename Crate Μετονομασία Κιβωτίου - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion Επιβεβαίωση Διαγραφής - - + + Renaming Crate Failed Η Μετονομασία του Κιβωτίου Απέτυχε - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Λίστα αναπαραγωγής M3U (*.m3u);;Λίστα αναπαραγωγής M3U8 (*.m3u8);;Λίστα αναπαραγωγής PLS (*.pls);;Κείμενο CSV (*.csv);;Απλό κείμενο (*.txt) - + M3U Playlist (*.m3u) Λίστα αναπαραγωγής M3U (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. Τα κιβώτια ειναι ενας φοβερός τρόπος που βοηθάει την οργάνωση της μουσικής που θέλετε να αναπαράγετε - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! Τα κιβώτια σας επιτρέπουν να οργανώσετε τη μουσική σας όπως σας αρέσει! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Το όνομα ενός Κιβωτίου δε μπορεί να είναι Κενό - + A crate by that name already exists. Υπάρχει ήδη κιβώτιο με αυτό το όνομα. @@ -3901,12 +3950,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -4025,72 +4074,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Παράκαμψη - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Δευτερόλεπτα - + Auto DJ Fade Modes Full Intro + Outro: @@ -4121,80 +4170,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat Επανάληψη - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Αυτόματος DJ - + Shuffle Ανακάτεμα - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4417,37 +4466,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. Δεν έλαβα μηνύματα MIDI. Παρακαλώ δοκιμάστε ξανά. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. Αδύνατη ανίχνευση χαρτογράφησης -- παρακαλώ δοκιμάστε ξανά. Σιγουρευτείτε ότι αγγίζετε έναν ελεγκτή τη φορά. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4486,17 +4535,17 @@ You tried to learn: %1,%2 - + Log - + Search Αναζήτηση - + Stats @@ -5149,114 +5198,114 @@ associated with each key. DlgPrefController - + Apply device settings? Να γίνει εφαρμογή των ρυθμίσεων της συσκευής; - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Πρέπει να εφαρμοσθούν οι ρυθμίσεις σας πριν εκκινήσετε τον Μάγο εκμάθησης. Να γίνει εφαρμογή ρυθμίσεων και να συνεχίσουμε; - + None Κανένα - + %1 by %2 %1 από %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5269,105 +5318,105 @@ Apply settings and continue? Όνομα Ελεγκτή - + Enabled Ενεργό - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Περιγραφή: - + Support: Υποστήριξη: - + Screens preview - + Input Mappings - - + + Search Αναζήτηση - - + + Add Προσθήκη - - + + Remove Αφαίρεση @@ -5382,22 +5431,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5407,28 +5456,28 @@ Apply settings and continue? Μάγος για τον Έλεγχο εκμάθησης (Μόνο MIDI) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Καθαρισμός Όλων - + Output Mappings @@ -5587,6 +5636,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6178,62 +6237,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Πληροφορίες - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7400,173 +7459,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) Αρχική (μακρά καθυστέρηση) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled Απενεργοποιημένο - + Enabled Ενεργό - + Stereo Στεροφωνία - + Mono Μονοφωνία - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Σφάλμα ρυθμίσεων @@ -7584,131 +7642,131 @@ The loudness target is approximate and assumes track pregain and main output lev API Ήχου - + Sample Rate Ρυθμός Δειγματοληψίας - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds ms - + 20 ms 20 ms - + Buffer Underflow Count - + 0 0 - + Keylock/Pitch-Bending Engine Μηχανή Κλειδώματος/Μεταβολής Τόνου - + Multi-Soundcard Synchronization Συγχρονισμός πολλών καρτών ήχου - + Output Έξοδος - + Input Είσοδος - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices Εντοπισμός Συσκευών @@ -7863,27 +7921,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available Η OpenGL δεν είναι διαθέσιμη - + dropped frames απορριφθέντα καρέ - + Cached waveforms occupy %1 MiB on disk. @@ -7896,250 +7955,256 @@ The loudness target is approximate and assumes track pregain and main output lev Επιλογές Κυματομορφής - + Frame rate Ρυθμός καρέ - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate Μέσος Ρυθμός καρέ - + Visual gain Οπτικό κέρδος - + Default zoom level Waveform zoom - + Displays the actual frame rate. Εμφανίζει πραγματικό ρυθμό ανανέωσης εικόνας (frame rate) - + Visual gain of the middle frequencies Οπτική ενίσχυση των μεσαίων συχνοτήτων - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low Χαμηλά - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies Οπτική ενίσχυση των υψηλών συχνοτήτων - + Visual gain of the low frequencies Οπτική ενίσχυση των χαμηλών συχνοτήτων - + High Υψηλά - + Global visual gain Καθολική οπτική ενίσχυση - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. Συγχρονισμός επιπέδου μεγέθυνσης για όλες τις μορφές εμφάνισης κυματομορφής. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8147,47 +8212,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Υλικό Ήχου - + Controllers Ελεγκτές - + Library Βιβλιοθήκη - + Interface Διεπαφή - + Waveforms - + Mixer Μείκτης - + Auto DJ Αυτόματος DJ - + Decks - + Colors @@ -8222,47 +8287,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Εφέ - + Recording Ηχογράφηση - + Beat Detection - + Key Detection - + Normalization Κανονικοποίηση - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Έλεγχος βινυλίου - + Live Broadcasting Ζωντανή Εκπομπή - + Modplug Decoder @@ -8295,22 +8360,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Έναρξη Εγγραφής - + Recording to file: - + Stop Recording Διακοπή Εγγραφής - + %1 MiB written in %2 @@ -8618,284 +8683,284 @@ This can not be undone! - + Filetype: - + BPM: BPM: - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. Θέτει το BPM στο 75% της τρέχουσας τιμής. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. Θέτει το BPM στο 50% της τρέχουσας τιμής. - + Displays the BPM of the selected track. Απεικονίζει το BPM του επιλεγμένου κομματιού. - + Track # Αρ. κομματιού - + Album Artist Καλλιτέχνης δίσκου - + Composer Συνθέτης - + Title Τίτλος - + Grouping Ομαδοποίηση - + Key Κλειδί - + Year Έτος - + Artist Καλλιτέχνης - + Album Άλμπουμ - + Genre Είδος - + ReplayGain: - + Sets the BPM to 200% of the current value. Θέτει το BPM στο 200% της τρέχουσας τιμής. - + Double BPM Διπλασιασμός BPM - + Halve BPM Υποδιπλασιασμός BPM - + Clear BPM and Beatgrid Καθαρισμός BPM και πλέγματος χτύπων - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: Διάρκεια: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color Χρώμα - + Date added: - + Open in File Browser Άνοιξε το στο πρόγραμμα περιήγησης αρχείων - + Samplerate: - + Track BPM: BPM Κομματιού: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. Θέτει το BPM στο 66% της τρέχουσας τιμής. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. Χτυπήστε για να θέσετε το BPM στον ρυθμό που επιθυμείτε. - + Tap to Beat Πατήστε για Ρυθμό - + Hint: Use the Library Analyze view to run BPM detection. Συμβουλή: Χρησιμοποιήστε την προβολή Ανάλυσης Βιβλιοθήκης για να τρέξετε τον εντοπισμό BPM. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Εφαρμογή - + &Cancel Ακύ&ρωση - + (no color) @@ -9052,7 +9117,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9254,27 +9319,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9418,38 +9483,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes iTunes - + Select your iTunes library Επιλέξτε την συλλογή του iTunes σας - + (loading) iTunes (φορτώνεται) iTunes - + Use Default Library Χρησιμοποιήστε την Προεπιλεγμένη Συλλογή - + Choose Library... Επιλέξτε Συλλογή - + Error Loading iTunes Library Σφάλμα στην Φόρτωση της Συλλογής του iTunes - + There was an error loading your iTunes library. Check the logs for details. @@ -9457,12 +9522,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9470,18 +9535,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9489,15 +9554,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9508,57 +9573,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9566,62 +9631,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9631,22 +9696,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Εισαγωγή λίστας αναπαραγωγής - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Αρχεία Λίστας (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9693,27 +9758,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9773,18 +9838,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9796,208 +9861,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Συσκευή Ήχου Απασχολημένη - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry Επανάληψη - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Επαναρύθμιση - + Help Βοήθεια - - + + Exit Έξοδος - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue Συνέχεια - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Σφάλμα στο αρχείο skin - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Επιβεβαίωση εξόδου - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. Το παράθυρο επιλογών είναι ακόμα ανοιχτό - + Discard any changes and exit Mixxx? Απαλοιφή αλλαγών και έξοδος του Mixxx; @@ -10013,13 +10119,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Κλείδωμα - - + + Playlists Λίστες Αναπαραγωγής @@ -10029,32 +10135,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Ξεκλείδωμα - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Δημιουργία νέας λίστας αναπαραγωγής @@ -11545,7 +11677,7 @@ Fully right: end of the effect period - + Deck %1 Deck %1 @@ -11678,7 +11810,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Διέλευση @@ -11709,7 +11841,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11842,12 +11974,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11882,42 +12014,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11975,54 +12107,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Λίστες Αναπαραγωγής - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12157,19 +12289,19 @@ may introduce a 'pumping' effect and/or distortion. Κλείδωμα - - + + Confirm Deletion Επιβεβαίωση Διαγραφής - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12581,7 +12713,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12763,7 +12895,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Εξώφυλλο @@ -12999,197 +13131,197 @@ may introduce a 'pumping' effect and/or distortion. Όταν χτυπηθεί, ρυθμίζει το μέσο BPM προς τα επάνω κατά μικρή δόση. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap Ρυθμός και χτύπος BPM - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play Αναπαραγωγή - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration Διάρκεια Ηχογράφησης @@ -13427,924 +13559,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix Μείξη - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear Εκκαθάριση - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next Επόμενο - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. Εναλλαγή στο επόμενο εφέ - + Previous Προηγούμενο - + Switch to the previous effect. Εναλλαγή στο προηγούμενο εφέ - + Next or Previous Επόμενο ή Προηγούμενο - + Switch to either the next or previous effect. Εναλλαγή είτε στο επόμενο είτε στο προηγούμενο εφέ - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter Παράμετρος Εφέ - + Adjusts a parameter of the effect. Ρυθμίζει την παράμετρο του εφέ - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter Παράμετρος Ισοσταθμιστή - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Αναπαραγωγή/Παύση - + Jumps to the beginning of the track. Μεταπηδάει στην αρχή του κομματιού. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. Συγχρονίζει το ρυθμό (BPM) και τη φάση σε αυτή του άλλου κομματιού, εάν αμφότερα τα BPM έχουν ανιχνευθεί. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. Συγχρονίζει το ρυθμό (BPM) σε αυτό του άλλου κομματιού, εάν αμφότερα τα BPM έχουν ανιχνευθεί. - + Sync and Reset Key Συγχρονισμός και Επαναφορά Κλειδιού. - + Increases the pitch by one semitone. Αυξάνει τον τόνο κατά ένα ημιτόνιο. - + Decreases the pitch by one semitone. Μειώνει τον τόνο κατά ένα ημιτόνιο. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14479,33 +14619,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. Αρχίζει αναπαραγωγή από την αρχή του κομματιού. - + Jumps to the beginning of the track and stops. Μεταπηδάει στην αρχή του κομματιού και σταματάει. - - + + Plays or pauses the track. Παίζει ή παύει το κομμάτι. - + (while playing) (ενώ παίζει) @@ -14525,205 +14665,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (ενώ είναι σταματημένο) - + Cue - + Headphone Ακουστικά - + Mute Σίγαση - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. Συγχρονίζει στο πρώτο κατά αριθμητική σειρά deck όπου παίζεται κομμάτι και υπάρχει BPM. - + If no deck is playing, syncs to the first deck that has a BPM. Εάν δεν παίζει κανένα deck, συγχρονίζει στο πρώτο deck που έχει BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control Έλεγχος Ταχύτητας - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust Ρύθμιση Τόνου - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix Εγγραφή μίξης - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14768,254 +14918,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind Γρήγορη Επιστροφή - + Fast rewind through the track. - + Fast Forward Γρήγορη Προώθηση - + Fast forward through the track. - + Jumps to the end of the track. Μετάβαση στο τέλος του κομματιού - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat Επανάληψη - + When active the track will repeat if you go past the end or reverse before the start. - + Eject Αποβολή - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time Χρόνος κομματιού - + Track Duration Διάρκεια κομματιού - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist Καλλιτέχνης κομματιού - + Displays the artist of the loaded track. - + Track Title Τίτλος Κομματιού - + Displays the title of the loaded track. - + Track Album Τίτλος Δίσκου - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -15023,12 +15173,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15036,47 +15186,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15248,47 +15393,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15412,407 +15557,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view - + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Εμφάνιση - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. Μεγιστοποίηση της βιλιοθήκης αρχείων ώστε να καταλαμβάνει ολόκληρο τον διαθέσιμο χώρο της οθόνης - + Space Menubar|View|Maximize Library - + &Full Screen &Πλήρης Οθόνη - + Display Mixxx using the full screen Εμφάνιση του Mixxx σε πλήρη οθόνη - + &Options &Επιλογές - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file Ηχογραφήστε την μίξη σας σε αρχείο - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences &Προτιμήσεις - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help &Βοήθεια - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About &Περί - + About the application @@ -15820,25 +15996,25 @@ This can not be undone! WOverview - + Passthrough Διέλευση - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15847,25 +16023,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Αναζήτηση - + Clear input @@ -15876,169 +16040,163 @@ This can not be undone! Αναζήτηση - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Κλειδί - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Καλλιτέχνης - + Album Artist Καλλιτέχνης δίσκου - + Composer Συνθέτης - + Title Τίτλος - + Album Άλμπουμ - + Grouping Ομαδοποίηση - + Year Έτος - + Genre Είδος - + Directory - + &Search selected @@ -16046,599 +16204,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist Προσθήκη στη Λίστα Αναπαραγωγής - + Crates Κιβώτια - + Metadata - + Update external collections - + Cover Art Εξώφυλλο - + Adjust BPM - + Select Color - - + + Analyze Ανάλυση - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Προσθήκη στη λίστα του Αυτόματου DJ (στο τέλος) - + Add to Auto DJ Queue (top) Προσθήκη στη λίστα του Αυτόματου DJ (στην αρχή) - + Add to Auto DJ Queue (replace) Προσθήκη στη λίστα του Αυτόματου DJ (Αντικατάσταση) - + Preview Deck - + Remove Αφαίρεση - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Ιδιότητες - + Open in File Browser Άνοιξε το στο πρόγραμμα περιήγησης αρχείων - + Select in Library - + Import From File Tags Εισαγωγή Από Ετικέτες Αρχείου - + Import From MusicBrainz Εισαγωγή από MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Αξιολόγηση - + Cue Point - + + Hotcues - + Intro - + Outro - + Key Κλειδί - + ReplayGain ReplayGain - + Waveform Κυματομορφή - + Comment Σχόλιο - + All Όλα - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM Kλείδωμα BPM - + Unlock BPM Ξεκλείδωμα BPM - + Double BPM Διπλασιασμός BPM - + Halve BPM Υποδιπλασιασμός BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Δημιουργία νέας λίστας αναπαραγωγής - + Enter name for new playlist: Εισάγετε όνομα για τη νέα λίστα αναπαραγωγής: - + New Playlist Νέα Λίστα Αναπαραγωγής - - - + + + Playlist Creation Failed Η δημιουργία λίστας αναπαραγωγής απέτυχε - + A playlist by that name already exists. Μια λίστα αναπαραγωγής με αυτό το όνομα υπάρχει ήδη. - + A playlist cannot have a blank name. Η λίστα αναπαραγωγής δεν μπορεί να έχει κενό όνομα. - + An unknown error occurred while creating playlist: Προέκυψε άγνωστο σφάλμα κατά τη δημιουργία λίστας: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Άκυρο - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Κλείσιμο - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16654,37 +16838,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16692,37 +16876,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16730,60 +16914,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Εμφάνιση ή κρύψιμο στηλών + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Επιλογή καταλόγου μουσικής συλλογής - + controllers - + Cannot open database Αδυναμία ανοίγματος της βάσης δεδομένων - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16797,67 +16986,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Περιηγηθείτε - + Export directory - + Database version - + Export Εξαγωγή - + Cancel Άκυρο - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16878,7 +17078,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16888,23 +17088,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_en_CA.qm b/res/translations/mixxx_en_CA.qm index 446e85d9c35b..9360e0a23ce2 100644 Binary files a/res/translations/mixxx_en_CA.qm and b/res/translations/mixxx_en_CA.qm differ diff --git a/res/translations/mixxx_en_CA.ts b/res/translations/mixxx_en_CA.ts index 6c07734ae43d..df107c1f9a3e 100644 --- a/res/translations/mixxx_en_CA.ts +++ b/res/translations/mixxx_en_CA.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Remove Crate as Track Source - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Add Crate as Track Source @@ -149,7 +149,7 @@ BasePlaylistFeature - + New Playlist New Playlist @@ -160,7 +160,7 @@ - + Create New Playlist Create New Playlist @@ -190,113 +190,120 @@ Duplicate - - + + Import Playlist Import Playlist - + Export Track Files Export Track Files - + Analyze entire Playlist Analyse entire Playlist - + Enter new name for playlist: Enter new name for playlist: - + Duplicate Playlist Duplicate Playlist - - + + Enter name for new playlist: Enter name for new playlist: - - + + Export Playlist Export Playlist - + Add to Auto DJ Queue (replace) Add to Auto DJ Queue (replace) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Rename Playlist - - + + Renaming Playlist Failed Renaming Playlist Failed - - - + + + A playlist by that name already exists. A playlist by that name already exists. - - - + + + A playlist cannot have a blank name. A playlist cannot have a blank name. - + _copy //: Appendix to default name when duplicating a playlist _copy - - - - - - + + + + + + Playlist Creation Failed Playlist Creation Failed - - + + An unknown error occurred while creating playlist: An unknown error occurred while creating playlist: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlist (*.m3u);; M3U8 Playlist (*.m3u8);; PLS Playlist (*.pls);; Text CSV (*.csv);; Readable Text (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Timestamp @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Couldn't load track. @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Album - + Album Artist Album Artist - + Artist Artist - + Bitrate Bitrate - + BPM BPM - + Channels Channels - + Color Color - + Comment Comment - + Composer Composer - + Cover Art Show Cover Art - + Date Added Date Added - + Last Played - + Duration Duration - + Type Type - + Genre Genre - + Grouping Grouping - + Key Key - + Location Location - + + Overview + + + + Preview Preview - + Rating Rating - + ReplayGain ReplayGain - + Samplerate Samplerate - + Played Played - + Title Title - + Track # Track # - + Year Year - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Add to Quick Links - + Remove from Quick Links Remove from Quick Links - + Add to Library Add to Library - + Refresh directory tree - + Quick Links Quick Links - - + + Devices Devices - + Removable Devices Removable Devices - - + + Computer Computer - + Music Directory Added Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -1046,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume Set to full volume - + Set to zero volume Set to zero volume @@ -1077,13 +1099,13 @@ trace - Above + Profiling messages Reverse roll (Censor) button - + Headphone listen button Headphone listen button - + Mute button Mute button @@ -1094,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Mix orientation (e.g. left, right, center) - + Set mix orientation to left Set mix orientation to left - + Set mix orientation to center Set mix orientation to center - + Set mix orientation to right Set mix orientation to right @@ -1153,22 +1175,22 @@ trace - Above + Profiling messages BPM tap button - + Toggle quantize mode Toggle quantize mode - + One-time beat sync (tempo only) One-time beat sync (tempo only) - + One-time beat sync (phase only) One-time beat sync (phase only) - + Toggle keylock mode Toggle keylock mode @@ -1178,193 +1200,193 @@ trace - Above + Profiling messages Equalizers - + Vinyl Control Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer Pass through external audio into the internal mixer - + Cues Cues - + Cue button Cue button - + Set cue point Set cue point - + Go to cue point Go to cue point - + Go to cue point and play Go to cue point and play - + Go to cue point and stop Go to cue point and stop - + Preview from cue point Preview from cue point - + Cue button (CDJ mode) Cue button (CDJ mode) - + Stutter cue Stutter cue - + Hotcues Hotcues - + Set, preview from or jump to hotcue %1 Set, preview from or jump to hotcue %1 - + Clear hotcue %1 Clear hotcue %1 - + Set hotcue %1 Set hotcue %1 - + Jump to hotcue %1 Jump to hotcue %1 - + Jump to hotcue %1 and stop Jump to hotcue %1 and stop - + Jump to hotcue %1 and play Jump to hotcue %1 and play - + Preview from hotcue %1 Preview from hotcue %1 - - + + Hotcue %1 Hotcue %1 - + Looping Looping - + Loop In button Loop In button - + Loop Out button Loop Out button - + Loop Exit button Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats Move loop forward by %1 beats - + Move loop backward by %1 beats Move loop backward by %1 beats - + Create %1-beat loop Create %1-beat loop - + Create temporary %1-beat loop roll Create temporary %1-beat loop roll @@ -1480,20 +1502,20 @@ trace - Above + Profiling messages - - + + Volume Fader Volume Fader - + Full Volume Full Volume - + Zero Volume Zero Volume @@ -1509,7 +1531,7 @@ trace - Above + Profiling messages - + Mute Mute @@ -1520,7 +1542,7 @@ trace - Above + Profiling messages - + Headphone Listen Headphone Listen @@ -1541,25 +1563,25 @@ trace - Above + Profiling messages - + Orientation Orientation - + Orient Left Orient Left - + Orient Center Orient Center - + Orient Right Orient Right @@ -1629,82 +1651,82 @@ trace - Above + Profiling messages Adjust the beatgrid to the right - + Adjust Beatgrid Adjust Beatgrid - + Align beatgrid to current position Align beatgrid to current position - + Adjust Beatgrid - Match Alignment Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. Adjust beatgrid to match another playing deck. - + Quantize Mode Quantize Mode - + Sync Sync - + Beat Sync One-Shot Beat Sync One-Shot - + Sync Tempo One-Shot Sync Tempo One-Shot - + Sync Phase One-Shot Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust Pitch Adjust - + Adjust pitch from speed slider pitch Adjust pitch from speed slider pitch - + Match musical key Match musical key - + Match Key Match Key - + Reset Key Reset Key - + Resets key to original Resets key to original @@ -1745,451 +1767,451 @@ trace - Above + Profiling messages Low EQ - + Toggle Vinyl Control Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode Vinyl Control Mode - + Vinyl Control Cueing Mode Vinyl Control Cueing Mode - + Vinyl Control Passthrough Vinyl Control Passthrough - + Vinyl Control Next Deck Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck Single deck mode - Switch vinyl control to next deck - + Cue Cue - + Set Cue Set Cue - + Go-To Cue Go-To Cue - + Go-To Cue And Play Go-To Cue And Play - + Go-To Cue And Stop Go-To Cue And Stop - + Preview Cue Preview Cue - + Cue (CDJ Mode) Cue (CDJ Mode) - + Stutter Cue Stutter Cue - + Go to cue point and play after release Go to cue point and play after release - + Clear Hotcue %1 Clear Hotcue %1 - + Set Hotcue %1 Set Hotcue %1 - + Jump To Hotcue %1 Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play Jump To Hotcue %1 And Play - + Preview Hotcue %1 Preview Hotcue %1 - + Loop In Loop In - + Loop Out Loop Out - + Loop Exit Loop Exit - + Reloop/Exit Loop Reloop/Exit Loop - + Loop Halve Loop Halve - + Loop Double Loop Double - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats Move Loop +%1 Beats - + Move Loop -%1 Beats Move Loop -%1 Beats - + Loop %1 Beats Loop %1 Beats - + Loop Roll %1 Beats Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue Prepend selected track to the Auto DJ Queue - + Load Track Load Track - + Load selected track Load selected track - + Load selected track and play Load selected track and play - - + + Record Mix Record Mix - + Toggle mix recording Toggle mix recording - + Effects Effects - + Quick Effects Quick Effects - + Deck %1 Quick Effect Super Knob Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect Quick Effect - + Clear Unit Clear Unit - + Clear effect unit Clear effect unit - + Toggle Unit Toggle Unit - + Dry/Wet Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob Super Knob - + Next Chain Next Chain - + Assign Assign - + Clear Clear - + Clear the current effect Clear the current effect - + Toggle Toggle - + Toggle the current effect Toggle the current effect - + Next Next - + Switch to next effect Switch to next effect - + Previous Previous - + Switch to the previous effect Switch to the previous effect - + Next or Previous Next or Previous - + Switch to either next or previous effect Switch to either next or previous effect - - + + Parameter Value Parameter Value - - + + Microphone Ducking Strength Microphone Ducking Strength - + Microphone Ducking Mode Microphone Ducking Mode - + Gain Gain - + Gain knob Gain knob - + Shuffle the content of the Auto DJ queue Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue Skip the next track in the Auto DJ queue - + Auto DJ Toggle Auto DJ Toggle - + Toggle Auto DJ On/Off Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. Show or hide the mixer. - + Cover Art Show/Hide (Library) Cover Art Show/Hide (Library) - + Show/hide cover art in the library Show/hide cover art in the library - + Library Maximize/Restore Library Maximize/Restore - + Maximize the track library to take up all the available screen space. Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide Effect Rack Show/Hide - + Show/hide the effect rack Show/hide the effect rack - + Waveform Zoom Out Waveform Zoom Out @@ -2204,102 +2226,102 @@ trace - Above + Profiling messages Headphone gain - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Playback Speed - + Playback speed control (Vinyl "Pitch" slider) Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) Pitch (Musical key) - + Increase Speed Increase Speed - + Adjust speed faster (coarse) Adjust speed faster (coarse) - + Increase Speed (Fine) Increase Speed (Fine) - + Adjust speed faster (fine) Adjust speed faster (fine) - + Decrease Speed Decrease Speed - + Adjust speed slower (coarse) Adjust speed slower (coarse) - + Adjust speed slower (fine) Adjust speed slower (fine) - + Temporarily Increase Speed Temporarily Increase Speed - + Temporarily increase speed (coarse) Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) Temporarily increase speed (fine) - + Temporarily Decrease Speed Temporarily Decrease Speed - + Temporarily decrease speed (coarse) Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) Temporarily decrease speed (fine) @@ -2451,1053 +2473,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock Keylock - + CUP (Cue + Play) CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - - + + Sort hotcues by position - - + + Sort hotcues by position (remove offsets) - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker Intro Start Marker - + Intro End Marker Intro End Marker - + Outro Start Marker Outro Start Marker - + Outro End Marker Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats Loop Selected Beats - + Create a beat loop of selected beat size Create a beat loop of selected beat size - + Loop Roll Selected Beats Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop Reloop And Stop - + Enable loop, jump to Loop In point, and stop Enable loop, jump to Loop In point, and stop - + Halve the loop length Halve the loop length - + Double the loop length Double the loop length - + Beat Jump / Loop Move Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation Navigation - + Move up Move up - + Equivalent to pressing the UP key on the keyboard Equivalent to pressing the UP key on the keyboard - + Move down Move down - + Equivalent to pressing the DOWN key on the keyboard Equivalent to pressing the DOWN key on the keyboard - + Move up/down Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left Move left - + Equivalent to pressing the LEFT key on the keyboard Equivalent to pressing the LEFT key on the keyboard - + Move right Move right - + Equivalent to pressing the RIGHT key on the keyboard Equivalent to pressing the RIGHT key on the keyboard - + Move left/right Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button Quick Effect Enable Button - + Enable or disable effect processing Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes Toggle effect unit between D/W and D+W modes - + Next chain preset Next chain preset - + Previous Chain Previous Chain - + Previous chain preset Previous chain preset - + Next/Previous Chain Next/Previous Chain - + Next or previous chain preset Next or previous chain preset - - + + Show Effect Parameters Show Effect Parameters - + Effect Unit Assignment - + Meta Knob Meta Knob - + Effect Meta Knob (control linked effect parameters) Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary Microphone / Auxiliary - + Microphone On/Off Microphone On/Off - + Microphone on/off Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off Auxiliary On/Off - + Auxiliary on/off Auxiliary on/off - + Auto DJ Auto DJ - + Auto DJ Shuffle Auto DJ Shuffle - + Auto DJ Skip Next Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next Auto DJ Fade To Next - + Trigger the transition to the next track Trigger the transition to the next track - + User Interface User Interface - + Samplers Show/Hide Samplers Show/Hide - + Show/hide the sampler section Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide Vinyl Control Show/Hide - + Show/hide the vinyl control section Show/hide the vinyl control section - + Preview Deck Show/Hide Preview Deck Show/Hide - + Show/hide the preview deck Show/hide the preview deck - + Toggle 4 Decks Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom Waveform zoom - + Waveform Zoom Waveform Zoom - + Zoom waveform in Zoom waveform in - + Waveform Zoom In Waveform Zoom In - + Zoom waveform out Zoom waveform out - + Star Rating Up Star Rating Up - + Increase the track rating by one star Increase the track rating by one star - + Star Rating Down Star Rating Down - + Decrease the track rating by one star Decrease the track rating by one star @@ -3612,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. The script code needs to be fixed. @@ -3745,7 +3777,7 @@ trace - Above + Profiling messages Import Crate - + Export Crate Export Crate @@ -3755,7 +3787,7 @@ trace - Above + Profiling messages Unlock - + An unknown error occurred while creating crate: An unknown error occurred while creating crate: @@ -3764,12 +3796,6 @@ trace - Above + Profiling messages Rename Crate Rename Crate - - - - Export to Engine Prime - - Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. @@ -3787,17 +3813,17 @@ trace - Above + Profiling messages Renaming Crate Failed - + Crate Creation Failed Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlist (*.m3u);; M3U8 Playlist (*.m3u8);; PLS Playlist (*.pls);; Text CSV (*.csv);; Readable Text (*.txt) - + M3U Playlist (*.m3u) M3U Playlist (*.m3u) @@ -3806,6 +3832,12 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. Crates are a great way to help organize the music you want to DJ with. + + + + Export to Engine DJ + + Crates let you organize your music however you'd like! @@ -3917,12 +3949,12 @@ trace - Above + Profiling messages Past Contributors - + Official Website - + Donate @@ -4445,37 +4477,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h If the mapping is not working try enabling an advanced option below and then try the control again. Or click Retry to redetect the midi control. - + Didn't get any midi messages. Please try again. Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: Successfully mapped control: - + <i>Ready to learn %1</i> <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4514,17 +4546,17 @@ You tried to learn: %1,%2 Dump to csv - + Log Log - + Search Search - + Stats Stats @@ -5177,114 +5209,114 @@ associated with each key. DlgPrefController - + Apply device settings? Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None None - + %1 by %2 %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? Do you want to save the changes? - + Troubleshooting Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings Clear Input Mappings - + Are you sure you want to clear all input mappings? Are you sure you want to clear all input mappings? - + Clear Output Mappings Clear Output Mappings - + Are you sure you want to clear all output mappings? Are you sure you want to clear all output mappings? @@ -5302,100 +5334,100 @@ Apply settings and continue? Enabled - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Description: - + Support: Support: - + Screens preview - + Input Mappings Input Mappings - - + + Search Search - - + + Add Add - - + + Remove Remove @@ -5415,17 +5447,17 @@ Apply settings and continue? - + Mapping Info - + Author: Author: - + Name: Name: @@ -5435,28 +5467,28 @@ Apply settings and continue? Learning Wizard (MIDI Only) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Clear All - + Output Mappings Output Mappings @@ -5615,6 +5647,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6229,62 +6271,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run Allow screensaver to run - + Prevent screensaver from running Prevent screensaver from running - + Prevent screensaver while playing Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes This skin does not support color schemes - + Information Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7451,173 +7493,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) Default (long delay) - + Experimental (no delay) Experimental (no delay) - + Disabled (short delay) Disabled (short delay) - + Soundcard Clock Soundcard Clock - + Network Clock Network Clock - + Direct monitor (recording and broadcasting only) Direct monitor (recording and broadcasting only) - + Disabled Disabled - + Enabled Enabled - + Stereo Stereo - + Mono Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. Refer to the Mixxx User Manual for details. - + Configured latency has changed. Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Configuration error @@ -7635,131 +7676,131 @@ The loudness target is approximate and assumes track pregain and main output lev Sound API - + Sample Rate Sample Rate - + Audio Buffer Audio Buffer - + Engine Clock Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode Microphone Monitor Mode - + Microphone Latency Compensation Microphone Latency Compensation - - - - + + + + ms milliseconds ms - + 20 ms 20 ms - + Buffer Underflow Count Buffer Underflow Count - + 0 0 - + Keylock/Pitch-Bending Engine Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization Multi-Soundcard Synchronization - + Output Output - + Input Input - + System Reported Latency System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices Query Devices @@ -8207,47 +8248,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Sound Hardware - + Controllers Controllers - + Library Library - + Interface Interface - + Waveforms Waveforms - + Mixer Mixer - + Auto DJ Auto DJ - + Decks Decks - + Colors Colors @@ -8282,47 +8323,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Effects - + Recording Recording - + Beat Detection Beat Detection - + Key Detection Key Detection - + Normalization Normalization - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Vinyl Control - + Live Broadcasting Live Broadcasting - + Modplug Decoder Modplug Decoder @@ -8678,284 +8719,284 @@ This can not be undone! Summary - + Filetype: Filetype: - + BPM: BPM: - + Location: Location: - + Bitrate: Bitrate: - + Comments Comments - + BPM BPM - + Sets the BPM to 75% of the current value. Sets the BPM to 75% of the current value. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. Displays the BPM of the selected track. - + Track # Track # - + Album Artist Album Artist - + Composer Composer - + Title Title - + Grouping Grouping - + Key Key - + Year Year - + Artist Artist - + Album Album - + Genre Genre - + ReplayGain: ReplayGain: - + Sets the BPM to 200% of the current value. Sets the BPM to 200% of the current value. - + Double BPM Double BPM - + Halve BPM Halve BPM - + Clear BPM and Beatgrid Clear BPM and Beatgrid - + Move to the previous item. "Previous" button Move to the previous item. - + &Previous &Previous - + Move to the next item. "Next" button Move to the next item. - + &Next &Next - + Duration: Duration: - + Import Metadata from MusicBrainz Import Metadata from MusicBrainz - + Re-Import Metadata from file Re-Import Metadata from file - + Color Color - + Date added: Date added: - + Open in File Browser Open in File Browser - + Samplerate: - + Track BPM: Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. Converts beats detected by the analyser into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo Assume constant tempo - + Sets the BPM to 66% of the current value. Sets the BPM to 66% of the current value. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. Sets the BPM to 150% of the current value. - + 3/2 BPM 3/2 BPM - + Sets the BPM to 133% of the current value. Sets the BPM to 133% of the current value. - + 4/3 BPM 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. Hint: Use the Library Analyse view to run BPM detection. - + Save changes and close the window. "OK" button Save changes and close the window. - + &OK &OK - + Discard changes and close the window. "Cancel" button Discard changes and close the window. - + Save changes and keep the window open. "Apply" button Save changes and keep the window open. - + &Apply &Apply - + &Cancel &Cancel - + (no color) @@ -9112,7 +9153,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9314,27 +9355,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) Soundtouch (faster) - + Rubberband (better) Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9549,15 +9590,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. Safe Mode Enabled - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9569,57 +9610,57 @@ Shown when VuMeter can not be displayed. Please keep support. - + activate activate - + toggle toggle - + right right - + left left - + right small right small - + left small left small - + up up - + down down - + up small up small - + down small down small - + Shortcut Shortcut @@ -9627,62 +9668,62 @@ support. Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9692,22 +9733,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Import Playlist - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Playlist Files (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9757,27 +9798,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9838,18 +9879,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Missing Tracks - + Hidden Tracks Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9861,212 +9902,253 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. <b>Exit</b> Mixxx. - + Retry Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Reconfigure - + Help Help - - + + Exit Exit - - + + Mixxx was unable to open all the configured sound devices. Mixxx was unable to open all the configured sound devices. - + Sound Device Error Sound Device Error - + <b>Retry</b> after fixing an issue <b>Retry</b> after fixing an issue - + No Output Devices No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. <b>Continue</b> without any outputs. - + Continue Continue - + Load track to Deck %1 Load track to Deck %1 - + Deck %1 is currently playing a track. Deck %1 is currently playing a track. - + Are you sure you want to load a new track? Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Error in skin file - + The selected skin cannot be loaded. The selected skin cannot be loaded. - + OpenGL Direct Rendering OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Confirm Exit - + A deck is currently playing. Exit Mixxx? A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. The preferences window is still open. - + Discard any changes and exit Mixxx? Discard any changes and exit Mixxx? @@ -10082,13 +10164,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Lock - - + + Playlists Playlists @@ -10098,32 +10180,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Unlock - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Create New Playlist @@ -11641,7 +11749,7 @@ Fully right: end of the effect period - + Deck %1 Deck %1 @@ -11774,7 +11882,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Passthrough @@ -11805,7 +11913,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11938,12 +12046,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11978,42 +12086,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12071,54 +12179,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Playlists - + Folders Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids Beatgrids - + Memory cues Memory cues - + (loading) Rekordbox (loading) Rekordbox @@ -12677,7 +12785,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl Spinning Vinyl @@ -12859,7 +12967,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Show Cover Art @@ -13095,197 +13203,197 @@ may introduce a 'pumping' effect and/or distortion. When tapped, adjusts the average BPM up by a small amount. - + Adjust Beats Earlier Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap Tempo and BPM Tap - + Show/hide the spinning vinyl section. Show/hide the spinning vinyl section. - + Keylock Keylock - + Toggling keylock during playback may result in a momentary audio glitch. Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. Seeks the track to the cue point and stops. - + Play Play - + Plays track from the cue point. Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input Select and configure a hardware device for this input - + Recording Duration Recording Duration @@ -13523,928 +13631,934 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - - + + Drag a Hotcue button here to continue playing after releasing the Hotcue. - + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward Beatjump Forward - + Jump forward by the set number of beats. Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. Move the loop forward by the set number of beats. - + Jump forward by 1 beat. Jump forward by 1 beat. - + Move the loop forward by 1 beat. Move the loop forward by 1 beat. - + Beatjump Backward Beatjump Backward - + Jump backward by the set number of beats. Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. Move the loop backward by the set number of beats. - + Jump backward by 1 beat. Jump backward by 1 beat. - + Move the loop backward by 1 beat. Move the loop backward by 1 beat. - + Reloop Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. Show/hide intro & outro markers and associated buttons. - + Intro Start Marker Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. If marker is set, clears the marker. - + Intro End Marker Intro End Marker - + Outro Start Marker Outro Start Marker - + Outro End Marker Outro End Marker - + Mix Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry D+W mode: Add wet to dry - + Mix Mode Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu Skin Settings Menu - + Show/hide skin settings menu Show/hide skin settings menu - + Save Sampler Bank Save Sampler Bank - + Save the collection of samples loaded in the samplers. Save the collection of samples loaded in the samplers. - + Load Sampler Bank Load Sampler Bank - + Load a previously saved collection of samples into the samplers. Load a previously saved collection of samples into the samplers. - + Show Effect Parameters Show Effect Parameters - + Enable Effect Enable Effect - + Meta Knob Link Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob Super Knob - + Next Chain Next Chain - + Previous Chain Previous Chain - + Next/Previous Chain Next/Previous Chain - + Clear Clear - + Clear the current effect. Clear the current effect. - + Toggle Toggle - + Toggle the current effect. Toggle the current effect. - + Next Next - + Clear Unit Clear Unit - + Clear effect unit. Clear effect unit. - + Show/hide parameters for effects in this unit. Show/hide parameters for effects in this unit. - + Toggle Unit Toggle Unit - + Enable or disable this whole effect unit. Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. Load next or previous effect chain preset into this effect unit. - - - - + + + + Assign Effect Unit Assign Effect Unit - + Assign this effect unit to the channel output. Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. Switch to the next effect. - + Previous Previous - + Switch to the previous effect. Switch to the previous effect. - + Next or Previous Next or Previous - + Switch to either the next or previous effect. Switch to either the next or previous effect. - + Meta Knob Meta Knob - + Controls linked parameters of this effect Controls linked parameters of this effect - + Effect Focus Button Effect Focus Button - + Focuses this effect. Focuses this effect. - + Unfocuses this effect. Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter Effect Parameter - + Adjusts a parameter of the effect. Adjusts a parameter of the effect. - + Inactive: parameter not linked Inactive: parameter not linked - + Active: parameter moves with Meta Knob Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter Equalizer Parameter - + Adjusts the gain of the EQ filter. Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. If quantize is enabled, snaps to the nearest beat. - + Quantize Quantize - + Toggles quantization. Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse Reverse - + Reverses track playback during regular playback. Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Play/Pause - + Jumps to the beginning of the track. Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key Sync and Reset Key - + Increases the pitch by one semitone. Increases the pitch by one semitone. - + Decreases the pitch by one semitone. Decreases the pitch by one semitone. - + Enable Vinyl Control Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. When enabled, the track responds to external vinyl control. - + Enable Passthrough Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. Displays options for editing cover artwork. - + Star Rating Star Rating - + Assign ratings to individual tracks by clicking the stars. Assign ratings to individual tracks by clicking the stars. @@ -14579,33 +14693,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects.Microphone Talkover Ducking Strength - + Prevents the pitch from changing when the rate changes. Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. Plays or pauses the track. - + (while playing) (while playing) @@ -14625,215 +14739,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (while stopped) - + Cue Cue - + Headphone Headphone - + Mute Mute - + Old Synchronize Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. Resets the key to the original track key. - + Speed Control Speed Control - - - + + + Changes the track pitch independent of the tempo. Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. Decreases the pitch by 10 cents. - + Pitch Adjust Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. Opens a menu to clear hotcues or edit their labels and colors. - + Drag this button onto a Play button while previewing to continue playback after release. - + Dragging with Shift key pressed will not start previewing the hotcue. - + Record Mix Record Mix - + Toggle mix recording. Toggle mix recording. - + Enable Live Broadcasting Enable Live Broadcasting - + Stream your mix over the Internet. Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit Loop Exit - + Turns the current loop off. Turns the current loop off. - + Slip Mode Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track Track Key - + Displays the musical key of the loaded track. Displays the musical key of the loaded track. - + Clock Clock - + Displays the current time. Displays the current time. - + Audio Latency Usage Meter Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator Audio Latency Overload Indicator @@ -14878,254 +14992,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects.Displays the current musical key of the loaded track after pitch shifting. - + Fast Rewind Fast Rewind - + Fast rewind through the track. Fast rewind through the track. - + Fast Forward Fast Forward - + Fast forward through the track. Fast forward through the track. - + Jumps to the end of the track. Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control Pitch Control - + Pitch Rate Pitch Rate - + Displays the current playback rate of the track. Displays the current playback rate of the track. - + Repeat Repeat - + When active the track will repeat if you go past the end or reverse before the start. When active the track will repeat if you go past the end or reverse before the start. - + Eject Eject - + Ejects track from the player. Ejects track from the player. - + Hotcue Hotcue - + If hotcue is set, jumps to the hotcue. If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status Vinyl Status - + Provides visual feedback for vinyl control status: Provides visual feedback for vinyl control status: - + Green for control enabled. Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker Loop-In Marker - + Loop-Out Marker Loop-Out Marker - + Loop Halve Loop Halve - + Halves the current loop's length by moving the end marker. Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. Deck immediately loops if past the new endpoint. - + Loop Double Loop Double - + Doubles the current loop's length by moving the end marker. Doubles the current loop's length by moving the end marker. - + Beatloop Beatloop - + Toggles the current loop on or off. Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time Track Time - + Track Duration Track Duration - + Displays the duration of the loaded track. Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. Information is loaded from the track's metadata tags. - + Track Artist Track Artist - + Displays the artist of the loaded track. Displays the artist of the loaded track. - + Track Title Track Title - + Displays the title of the loaded track. Displays the title of the loaded track. - + Track Album Track Album - + Displays the album name of the loaded track. Displays the album name of the loaded track. - + Track Artist/Title Track Artist/Title - + Displays the artist and title of the loaded track. Displays the artist and title of the loaded track. @@ -15133,12 +15247,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15353,47 +15467,47 @@ This can not be undone! WCueMenuPopup - + Cue number Cue number - + Cue position Cue position - + Edit cue label Edit cue label - + Label... Label... - + Delete this cue Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 Hotcue #%1 @@ -15518,323 +15632,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Create &New Playlist - + Create a new playlist Create a new playlist - + Ctrl+n Ctrl+n - + Create New &Crate Create New &Crate - + Create a new crate Create a new crate - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. May not be supported on all skins. - + Show Skin Settings Menu Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Show Microphone Section - + Show the microphone section of the Mixxx interface. Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Show Preview Deck - + Show the preview deck in the Mixxx interface. Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Show Cover Art - + Show cover art in the Mixxx interface. Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximize Library - + Maximize the track library to take up all the available screen space. Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library Space - + &Full Screen &Full Screen - + Display Mixxx using the full screen Display Mixxx using the full screen - + &Options &Options - + &Vinyl Control &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 Enable Vinyl Control &%1 - + &Record Mix &Record Mix - + Record your mix to a file Record your mix to a file - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off Toggles keyboard shortcuts on or off - + Ctrl+` Ctrl+` - + &Preferences &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer &Developer - + &Reload Skin &Reload Skin - + Reload the skin Reload the skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Developer &Tools - + Opens the developer tools dialog Opens the developer tools dialog - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Deb&ugger Enabled - + Enables the debugger during skin parsing Enables the debugger during skin parsing - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Help - + Show Keywheel menu title @@ -15851,74 +15995,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support &Community Support - + Get help with Mixxx Get help with Mixxx - + &User Manual &User Manual - + Read the Mixxx user manual. Read the Mixxx user manual. - + &Keyboard Shortcuts &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Translate This Application - + Help translate this application into your language. Help translate this application into your language. - + &About &About - + About the application About the application @@ -15926,25 +16070,25 @@ This can not be undone! WOverview - + Passthrough Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15953,25 +16097,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Clear input - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Search - + Clear input Clear input @@ -15982,169 +16114,163 @@ This can not be undone! Search... - + Clear the search bar input field Clear the search bar input field - - Enter a string to search for - Enter a string to search for + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Shortcut + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Focus + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Exit search + + Delete query from history + WSearchRelatedTracksMenu - + Search related Tracks - + Key Key - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Artist - + Album Artist Album Artist - + Composer Composer - + Title Title - + Album Album - + Grouping Grouping - + Year Year - + Genre Genre - + Directory - + &Search selected @@ -16152,620 +16278,625 @@ This can not be undone! WTrackMenu - + Load to Load to - + Deck Deck - + Sampler Sampler - + Add to Playlist Add to Playlist - + Crates Crates - + Metadata Metadata - + Update external collections Update external collections - + Cover Art Show Cover Art - + Adjust BPM Adjust BPM - + Select Color Select Color - - + + Analyze Analyse - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) Add to Auto DJ Queue (replace) - + Preview Deck Preview Deck - + Remove Remove - + Remove from Playlist Remove from Playlist - + Remove from Crate Remove from Crate - + Hide from Library Hide from Library - + Unhide from Library Unhide from Library - + Purge from Library Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Properties - + Open in File Browser Open in File Browser - + Select in Library - + Import From File Tags Import From File Tags - + Import From MusicBrainz Import From MusicBrainz - + Export To File Tags Export To File Tags - + BPM and Beatgrid BPM and Beatgrid - + Play Count Play Count - + Rating Rating - + Cue Point Cue Point - - + + Hotcues Hotcues - + Intro Intro - + Outro Outro - + Key Key - + ReplayGain ReplayGain - + Waveform Waveform - + Comment Comment - + All All - + Sort hotcues by position (remove offsets) - + Sort hotcues by position - + Lock BPM Lock BPM - + Unlock BPM Unlock BPM - + Double BPM Double BPM - + Halve BPM Halve BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM 4/3 BPM - + 3/2 BPM 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Create New Playlist - + Enter name for new playlist: Enter name for new playlist: - + New Playlist New Playlist - - - + + + Playlist Creation Failed Playlist Creation Failed - + A playlist by that name already exists. A playlist by that name already exists. - + A playlist cannot have a blank name. A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: An unknown error occurred while creating playlist: - + Add to New Crate Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Sorting hotcues of %n track(s) by position (remove offsets) - + Sorting hotcues of %n track(s) by position - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) Setting cover art of %n track(s)Setting cover art of %n track(s) - + Reloading cover art of %n track(s) Reloading cover art of %n track(s)Reloading cover art of %n track(s) @@ -16781,37 +16912,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16819,37 +16950,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16857,12 +16988,12 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Show or hide columns. - + Shuffle Tracks @@ -16870,52 +17001,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Choose music library directory - + controllers - + Cannot open database Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16929,68 +17060,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates - + + Playlists + + + + + Selected crates/playlists + + + + Browse Browse - + Export directory - + Database version - + Export Export - + Cancel Cancel - + Export Library to Engine DJ "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -17011,7 +17152,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -17021,23 +17162,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_en_GB.qm b/res/translations/mixxx_en_GB.qm index 939708fbf4da..9b5af989606f 100644 Binary files a/res/translations/mixxx_en_GB.qm and b/res/translations/mixxx_en_GB.qm differ diff --git a/res/translations/mixxx_en_GB.ts b/res/translations/mixxx_en_GB.ts index 736756f0c5fe..20eabae030aa 100644 --- a/res/translations/mixxx_en_GB.ts +++ b/res/translations/mixxx_en_GB.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Remove Crate as Track Source - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Add Crate as Track Source @@ -149,7 +149,7 @@ BasePlaylistFeature - + New Playlist New Playlist @@ -160,7 +160,7 @@ - + Create New Playlist Create New Playlist @@ -190,113 +190,120 @@ Duplicate - - + + Import Playlist Import Playlist - + Export Track Files Export Track Files - + Analyze entire Playlist Analyse entire Playlist - + Enter new name for playlist: Enter new name for playlist: - + Duplicate Playlist Duplicate Playlist - - + + Enter name for new playlist: Enter name for new playlist: - - + + Export Playlist Export Playlist - + Add to Auto DJ Queue (replace) Add to Auto DJ Queue (replace) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Rename Playlist - - + + Renaming Playlist Failed Renaming Playlist Failed - - - + + + A playlist by that name already exists. A playlist by that name already exists. - - - + + + A playlist cannot have a blank name. A playlist cannot have a blank name. - + _copy //: Appendix to default name when duplicating a playlist _copy - - - - - - + + + + + + Playlist Creation Failed Playlist Creation Failed - - + + An unknown error occurred while creating playlist: An unknown error occurred while creating playlist: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlist (*.m3u);; M3U8 Playlist (*.m3u8);; PLS Playlist (*.pls);; Text CSV (*.csv);; Readable Text (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Timestamp @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Couldn't load track. @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Album - + Album Artist Album Artist - + Artist Artist - + Bitrate Bitrate - + BPM BPM - + Channels Channels - + Color Color - + Comment Comment - + Composer Composer - + Cover Art Cover Art - + Date Added Date Added - + Last Played - + Duration Duration - + Type Type - + Genre Genre - + Grouping Grouping - + Key Key - + Location Location - + + Overview + + + + Preview Preview - + Rating Rating - + ReplayGain ReplayGain - + Samplerate Samplerate - + Played Played - + Title Title - + Track # Track # - + Year Year - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Add to Quick Links - + Remove from Quick Links Remove from Quick Links - + Add to Library Add to Library - + Refresh directory tree - + Quick Links Quick Links - - + + Devices Devices - + Removable Devices Removable Devices - - + + Computer Computer - + Music Directory Added Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -1046,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume Set to full volume - + Set to zero volume Set to zero volume @@ -1077,13 +1099,13 @@ trace - Above + Profiling messages Reverse roll (Censor) button - + Headphone listen button Headphone listen button - + Mute button Mute button @@ -1094,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Mix orientation (e.g. left, right, center) - + Set mix orientation to left Set mix orientation to left - + Set mix orientation to center Set mix orientation to center - + Set mix orientation to right Set mix orientation to right @@ -1153,22 +1175,22 @@ trace - Above + Profiling messages BPM tap button - + Toggle quantize mode Toggle quantize mode - + One-time beat sync (tempo only) One-time beat sync (tempo only) - + One-time beat sync (phase only) One-time beat sync (phase only) - + Toggle keylock mode Toggle keylock mode @@ -1178,193 +1200,193 @@ trace - Above + Profiling messages Equalizers - + Vinyl Control Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer Pass through external audio into the internal mixer - + Cues Cues - + Cue button Cue button - + Set cue point Set cue point - + Go to cue point Go to cue point - + Go to cue point and play Go to cue point and play - + Go to cue point and stop Go to cue point and stop - + Preview from cue point Preview from cue point - + Cue button (CDJ mode) Cue button (CDJ mode) - + Stutter cue Stutter cue - + Hotcues Hotcues - + Set, preview from or jump to hotcue %1 Set, preview from or jump to hotcue %1 - + Clear hotcue %1 Clear hotcue %1 - + Set hotcue %1 Set hotcue %1 - + Jump to hotcue %1 Jump to hotcue %1 - + Jump to hotcue %1 and stop Jump to hotcue %1 and stop - + Jump to hotcue %1 and play Jump to hotcue %1 and play - + Preview from hotcue %1 Preview from hotcue %1 - - + + Hotcue %1 Hotcue %1 - + Looping Looping - + Loop In button Loop In button - + Loop Out button Loop Out button - + Loop Exit button Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats Move loop forward by %1 beats - + Move loop backward by %1 beats Move loop backward by %1 beats - + Create %1-beat loop Create %1-beat loop - + Create temporary %1-beat loop roll Create temporary %1-beat loop roll @@ -1480,20 +1502,20 @@ trace - Above + Profiling messages - - + + Volume Fader Volume Fader - + Full Volume Full Volume - + Zero Volume Zero Volume @@ -1509,7 +1531,7 @@ trace - Above + Profiling messages - + Mute Mute @@ -1520,7 +1542,7 @@ trace - Above + Profiling messages - + Headphone Listen Headphone Listen @@ -1541,25 +1563,25 @@ trace - Above + Profiling messages - + Orientation Orientation - + Orient Left Orient Left - + Orient Center Orient Center - + Orient Right Orient Right @@ -1629,82 +1651,82 @@ trace - Above + Profiling messages Adjust the beatgrid to the right - + Adjust Beatgrid Adjust Beatgrid - + Align beatgrid to current position Align beatgrid to current position - + Adjust Beatgrid - Match Alignment Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. Adjust beatgrid to match another playing deck. - + Quantize Mode Quantize Mode - + Sync Sync - + Beat Sync One-Shot Beat Sync One-Shot - + Sync Tempo One-Shot Sync Tempo One-Shot - + Sync Phase One-Shot Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust Pitch Adjust - + Adjust pitch from speed slider pitch Adjust pitch from speed slider pitch - + Match musical key Match musical key - + Match Key Match Key - + Reset Key Reset Key - + Resets key to original Resets key to original @@ -1745,451 +1767,451 @@ trace - Above + Profiling messages Low EQ - + Toggle Vinyl Control Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode Vinyl Control Mode - + Vinyl Control Cueing Mode Vinyl Control Cueing Mode - + Vinyl Control Passthrough Vinyl Control Passthrough - + Vinyl Control Next Deck Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck Single deck mode - Switch vinyl control to next deck - + Cue Cue - + Set Cue Set Cue - + Go-To Cue Go-To Cue - + Go-To Cue And Play Go-To Cue And Play - + Go-To Cue And Stop Go-To Cue And Stop - + Preview Cue Preview Cue - + Cue (CDJ Mode) Cue (CDJ Mode) - + Stutter Cue Stutter Cue - + Go to cue point and play after release Go to cue point and play after release - + Clear Hotcue %1 Clear Hotcue %1 - + Set Hotcue %1 Set Hotcue %1 - + Jump To Hotcue %1 Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play Jump To Hotcue %1 And Play - + Preview Hotcue %1 Preview Hotcue %1 - + Loop In Loop In - + Loop Out Loop Out - + Loop Exit Loop Exit - + Reloop/Exit Loop Reloop/Exit Loop - + Loop Halve Loop Halve - + Loop Double Loop Double - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats Move Loop +%1 Beats - + Move Loop -%1 Beats Move Loop -%1 Beats - + Loop %1 Beats Loop %1 Beats - + Loop Roll %1 Beats Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue Prepend selected track to the Auto DJ Queue - + Load Track Load Track - + Load selected track Load selected track - + Load selected track and play Load selected track and play - - + + Record Mix Record Mix - + Toggle mix recording Toggle mix recording - + Effects Effects - + Quick Effects Quick Effects - + Deck %1 Quick Effect Super Knob Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect Quick Effect - + Clear Unit Clear Unit - + Clear effect unit Clear effect unit - + Toggle Unit Toggle Unit - + Dry/Wet Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob Super Knob - + Next Chain Next Chain - + Assign Assign - + Clear Clear - + Clear the current effect Clear the current effect - + Toggle Toggle - + Toggle the current effect Toggle the current effect - + Next Next - + Switch to next effect Switch to next effect - + Previous Previous - + Switch to the previous effect Switch to the previous effect - + Next or Previous Next or Previous - + Switch to either next or previous effect Switch to either next or previous effect - - + + Parameter Value Parameter Value - - + + Microphone Ducking Strength Microphone Ducking Strength - + Microphone Ducking Mode Microphone Ducking Mode - + Gain Gain - + Gain knob Gain knob - + Shuffle the content of the Auto DJ queue Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue Skip the next track in the Auto DJ queue - + Auto DJ Toggle Auto DJ Toggle - + Toggle Auto DJ On/Off Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. Show or hide the mixer. - + Cover Art Show/Hide (Library) Cover Art Show/Hide (Library) - + Show/hide cover art in the library Show/hide cover art in the library - + Library Maximize/Restore Library Maximize/Restore - + Maximize the track library to take up all the available screen space. Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide Effect Rack Show/Hide - + Show/hide the effect rack Show/hide the effect rack - + Waveform Zoom Out Waveform Zoom Out @@ -2204,102 +2226,102 @@ trace - Above + Profiling messages Headphone gain - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Playback Speed - + Playback speed control (Vinyl "Pitch" slider) Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) Pitch (Musical key) - + Increase Speed Increase Speed - + Adjust speed faster (coarse) Adjust speed faster (coarse) - + Increase Speed (Fine) Increase Speed (Fine) - + Adjust speed faster (fine) Adjust speed faster (fine) - + Decrease Speed Decrease Speed - + Adjust speed slower (coarse) Adjust speed slower (coarse) - + Adjust speed slower (fine) Adjust speed slower (fine) - + Temporarily Increase Speed Temporarily Increase Speed - + Temporarily increase speed (coarse) Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) Temporarily increase speed (fine) - + Temporarily Decrease Speed Temporarily Decrease Speed - + Temporarily decrease speed (coarse) Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) Temporarily decrease speed (fine) @@ -2451,1053 +2473,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock Keylock - + CUP (Cue + Play) CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - - + + Sort hotcues by position - - + + Sort hotcues by position (remove offsets) - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker Intro Start Marker - + Intro End Marker Intro End Marker - + Outro Start Marker Outro Start Marker - + Outro End Marker Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats Loop Selected Beats - + Create a beat loop of selected beat size Create a beat loop of selected beat size - + Loop Roll Selected Beats Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop Reloop And Stop - + Enable loop, jump to Loop In point, and stop Enable loop, jump to Loop In point, and stop - + Halve the loop length Halve the loop length - + Double the loop length Double the loop length - + Beat Jump / Loop Move Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation Navigation - + Move up Move up - + Equivalent to pressing the UP key on the keyboard Equivalent to pressing the UP key on the keyboard - + Move down Move down - + Equivalent to pressing the DOWN key on the keyboard Equivalent to pressing the DOWN key on the keyboard - + Move up/down Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left Move left - + Equivalent to pressing the LEFT key on the keyboard Equivalent to pressing the LEFT key on the keyboard - + Move right Move right - + Equivalent to pressing the RIGHT key on the keyboard Equivalent to pressing the RIGHT key on the keyboard - + Move left/right Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button Quick Effect Enable Button - + Enable or disable effect processing Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes Toggle effect unit between D/W and D+W modes - + Next chain preset Next chain preset - + Previous Chain Previous Chain - + Previous chain preset Previous chain preset - + Next/Previous Chain Next/Previous Chain - + Next or previous chain preset Next or previous chain preset - - + + Show Effect Parameters Show Effect Parameters - + Effect Unit Assignment - + Meta Knob Meta Knob - + Effect Meta Knob (control linked effect parameters) Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary Microphone / Auxiliary - + Microphone On/Off Microphone On/Off - + Microphone on/off Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off Auxiliary On/Off - + Auxiliary on/off Auxiliary on/off - + Auto DJ Auto DJ - + Auto DJ Shuffle Auto DJ Shuffle - + Auto DJ Skip Next Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next Auto DJ Fade To Next - + Trigger the transition to the next track Trigger the transition to the next track - + User Interface User Interface - + Samplers Show/Hide Samplers Show/Hide - + Show/hide the sampler section Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide Vinyl Control Show/Hide - + Show/hide the vinyl control section Show/hide the vinyl control section - + Preview Deck Show/Hide Preview Deck Show/Hide - + Show/hide the preview deck Show/hide the preview deck - + Toggle 4 Decks Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom Waveform zoom - + Waveform Zoom Waveform Zoom - + Zoom waveform in Zoom waveform in - + Waveform Zoom In Waveform Zoom In - + Zoom waveform out Zoom waveform out - + Star Rating Up Star Rating Up - + Increase the track rating by one star Increase the track rating by one star - + Star Rating Down Star Rating Down - + Decrease the track rating by one star Decrease the track rating by one star @@ -3612,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. The script code needs to be fixed. @@ -3745,7 +3777,7 @@ trace - Above + Profiling messages Import Crate - + Export Crate Export Crate @@ -3755,7 +3787,7 @@ trace - Above + Profiling messages Unlock - + An unknown error occurred while creating crate: An unknown error occurred while creating crate: @@ -3764,12 +3796,6 @@ trace - Above + Profiling messages Rename Crate Rename Crate - - - - Export to Engine Prime - - Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. @@ -3787,17 +3813,17 @@ trace - Above + Profiling messages Renaming Crate Failed - + Crate Creation Failed Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlist (*.m3u);; M3U8 Playlist (*.m3u8);; PLS Playlist (*.pls);; Text CSV (*.csv);; Readable Text (*.txt) - + M3U Playlist (*.m3u) M3U Playlist (*.m3u) @@ -3806,6 +3832,12 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. Crates are a great way to help organize the music you want to DJ with. + + + + Export to Engine DJ + + Crates let you organize your music however you'd like! @@ -3917,12 +3949,12 @@ trace - Above + Profiling messages Past Contributors - + Official Website - + Donate @@ -4445,37 +4477,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h If the mapping is not working try enabling an advanced option below and then try the control again. Or click Retry to redetect the midi control. - + Didn't get any midi messages. Please try again. Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: Successfully mapped control: - + <i>Ready to learn %1</i> <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4514,17 +4546,17 @@ You tried to learn: %1,%2 Dump to csv - + Log Log - + Search Search - + Stats Stats @@ -5177,114 +5209,114 @@ associated with each key. DlgPrefController - + Apply device settings? Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None None - + %1 by %2 %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? Do you want to save the changes? - + Troubleshooting Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings Clear Input Mappings - + Are you sure you want to clear all input mappings? Are you sure you want to clear all input mappings? - + Clear Output Mappings Clear Output Mappings - + Are you sure you want to clear all output mappings? Are you sure you want to clear all output mappings? @@ -5302,100 +5334,100 @@ Apply settings and continue? Enabled - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Description: - + Support: Support: - + Screens preview - + Input Mappings Input Mappings - - + + Search Search - - + + Add Add - - + + Remove Remove @@ -5415,17 +5447,17 @@ Apply settings and continue? - + Mapping Info - + Author: Author: - + Name: Name: @@ -5435,28 +5467,28 @@ Apply settings and continue? Learning Wizard (MIDI Only) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Clear All - + Output Mappings Output Mappings @@ -5615,6 +5647,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6229,62 +6271,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run Allow screensaver to run - + Prevent screensaver from running Prevent screensaver from running - + Prevent screensaver while playing Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes This skin does not support color schemes - + Information Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7451,173 +7493,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) Default (long delay) - + Experimental (no delay) Experimental (no delay) - + Disabled (short delay) Disabled (short delay) - + Soundcard Clock Soundcard Clock - + Network Clock Network Clock - + Direct monitor (recording and broadcasting only) Direct monitor (recording and broadcasting only) - + Disabled Disabled - + Enabled Enabled - + Stereo Stereo - + Mono Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. Refer to the Mixxx User Manual for details. - + Configured latency has changed. Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Configuration error @@ -7635,131 +7676,131 @@ The loudness target is approximate and assumes track pregain and main output lev Sound API - + Sample Rate Sample Rate - + Audio Buffer Audio Buffer - + Engine Clock Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode Microphone Monitor Mode - + Microphone Latency Compensation Microphone Latency Compensation - - - - + + + + ms milliseconds ms - + 20 ms 20 ms - + Buffer Underflow Count Buffer Underflow Count - + 0 0 - + Keylock/Pitch-Bending Engine Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization Multi-Soundcard Synchronization - + Output Output - + Input Input - + System Reported Latency System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices Query Devices @@ -8207,47 +8248,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Sound Hardware - + Controllers Controllers - + Library Library - + Interface Interface - + Waveforms Waveforms - + Mixer Mixer - + Auto DJ Auto DJ - + Decks Decks - + Colors Colors @@ -8282,47 +8323,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Effects - + Recording Recording - + Beat Detection Beat Detection - + Key Detection Key Detection - + Normalization Normalization - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Vinyl Control - + Live Broadcasting Live Broadcasting - + Modplug Decoder Modplug Decoder @@ -8678,284 +8719,284 @@ This can not be undone! Summary - + Filetype: Filetype: - + BPM: BPM: - + Location: Location: - + Bitrate: Bitrate: - + Comments Comments - + BPM BPM - + Sets the BPM to 75% of the current value. Sets the BPM to 75% of the current value. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. Displays the BPM of the selected track. - + Track # Track # - + Album Artist Album Artist - + Composer Composer - + Title Title - + Grouping Grouping - + Key Key - + Year Year - + Artist Artist - + Album Album - + Genre Genre - + ReplayGain: ReplayGain: - + Sets the BPM to 200% of the current value. Sets the BPM to 200% of the current value. - + Double BPM Double BPM - + Halve BPM Halve BPM - + Clear BPM and Beatgrid Clear BPM and Beatgrid - + Move to the previous item. "Previous" button Move to the previous item. - + &Previous &Previous - + Move to the next item. "Next" button Move to the next item. - + &Next &Next - + Duration: Duration: - + Import Metadata from MusicBrainz Import Metadata from MusicBrainz - + Re-Import Metadata from file Re-Import Metadata from file - + Color Color - + Date added: Date added: - + Open in File Browser Open in File Browser - + Samplerate: - + Track BPM: Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. Converts beats detected by the analyser into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo Assume constant tempo - + Sets the BPM to 66% of the current value. Sets the BPM to 66% of the current value. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. Sets the BPM to 150% of the current value. - + 3/2 BPM 3/2 BPM - + Sets the BPM to 133% of the current value. Sets the BPM to 133% of the current value. - + 4/3 BPM 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. Hint: Use the Library Analyse view to run BPM detection. - + Save changes and close the window. "OK" button Save changes and close the window. - + &OK &OK - + Discard changes and close the window. "Cancel" button Discard changes and close the window. - + Save changes and keep the window open. "Apply" button Save changes and keep the window open. - + &Apply &Apply - + &Cancel &Cancel - + (no color) @@ -9112,7 +9153,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9314,27 +9355,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) Soundtouch (faster) - + Rubberband (better) Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9549,15 +9590,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. Safe Mode Enabled - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9569,57 +9610,57 @@ Shown when VuMeter can not be displayed. Please keep support. - + activate activate - + toggle toggle - + right right - + left left - + right small right small - + left small left small - + up up - + down down - + up small up small - + down small down small - + Shortcut Shortcut @@ -9627,62 +9668,62 @@ support. Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9692,22 +9733,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Import Playlist - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Playlist Files (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9757,27 +9798,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9838,18 +9879,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Missing Tracks - + Hidden Tracks Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9861,212 +9902,253 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. <b>Exit</b> Mixxx. - + Retry Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Reconfigure - + Help Help - - + + Exit Exit - - + + Mixxx was unable to open all the configured sound devices. Mixxx was unable to open all the configured sound devices. - + Sound Device Error Sound Device Error - + <b>Retry</b> after fixing an issue <b>Retry</b> after fixing an issue - + No Output Devices No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. <b>Continue</b> without any outputs. - + Continue Continue - + Load track to Deck %1 Load track to Deck %1 - + Deck %1 is currently playing a track. Deck %1 is currently playing a track. - + Are you sure you want to load a new track? Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Error in skin file - + The selected skin cannot be loaded. The selected skin cannot be loaded. - + OpenGL Direct Rendering OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Confirm Exit - + A deck is currently playing. Exit Mixxx? A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. The preferences window is still open. - + Discard any changes and exit Mixxx? Discard any changes and exit Mixxx? @@ -10082,13 +10164,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Lock - - + + Playlists Playlists @@ -10098,32 +10180,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Unlock - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Create New Playlist @@ -11641,7 +11749,7 @@ Fully right: end of the effect period - + Deck %1 Deck %1 @@ -11774,7 +11882,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Passthrough @@ -11805,7 +11913,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11938,12 +12046,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11978,42 +12086,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12071,54 +12179,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Playlists - + Folders Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids Beatgrids - + Memory cues Memory cues - + (loading) Rekordbox (loading) Rekordbox @@ -12677,7 +12785,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl Spinning Vinyl @@ -12859,7 +12967,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Cover Art @@ -13095,197 +13203,197 @@ may introduce a 'pumping' effect and/or distortion. When tapped, adjusts the average BPM up by a small amount. - + Adjust Beats Earlier Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap Tempo and BPM Tap - + Show/hide the spinning vinyl section. Show/hide the spinning vinyl section. - + Keylock Keylock - + Toggling keylock during playback may result in a momentary audio glitch. Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. Seeks the track to the cue point and stops. - + Play Play - + Plays track from the cue point. Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input Select and configure a hardware device for this input - + Recording Duration Recording Duration @@ -13523,928 +13631,934 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - - + + Drag a Hotcue button here to continue playing after releasing the Hotcue. - + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward Beatjump Forward - + Jump forward by the set number of beats. Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. Move the loop forward by the set number of beats. - + Jump forward by 1 beat. Jump forward by 1 beat. - + Move the loop forward by 1 beat. Move the loop forward by 1 beat. - + Beatjump Backward Beatjump Backward - + Jump backward by the set number of beats. Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. Move the loop backward by the set number of beats. - + Jump backward by 1 beat. Jump backward by 1 beat. - + Move the loop backward by 1 beat. Move the loop backward by 1 beat. - + Reloop Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. Show/hide intro & outro markers and associated buttons. - + Intro Start Marker Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. If marker is set, clears the marker. - + Intro End Marker Intro End Marker - + Outro Start Marker Outro Start Marker - + Outro End Marker Outro End Marker - + Mix Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry D+W mode: Add wet to dry - + Mix Mode Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu Skin Settings Menu - + Show/hide skin settings menu Show/hide skin settings menu - + Save Sampler Bank Save Sampler Bank - + Save the collection of samples loaded in the samplers. Save the collection of samples loaded in the samplers. - + Load Sampler Bank Load Sampler Bank - + Load a previously saved collection of samples into the samplers. Load a previously saved collection of samples into the samplers. - + Show Effect Parameters Show Effect Parameters - + Enable Effect Enable Effect - + Meta Knob Link Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob Super Knob - + Next Chain Next Chain - + Previous Chain Previous Chain - + Next/Previous Chain Next/Previous Chain - + Clear Clear - + Clear the current effect. Clear the current effect. - + Toggle Toggle - + Toggle the current effect. Toggle the current effect. - + Next Next - + Clear Unit Clear Unit - + Clear effect unit. Clear effect unit. - + Show/hide parameters for effects in this unit. Show/hide parameters for effects in this unit. - + Toggle Unit Toggle Unit - + Enable or disable this whole effect unit. Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. Load next or previous effect chain preset into this effect unit. - - - - + + + + Assign Effect Unit Assign Effect Unit - + Assign this effect unit to the channel output. Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. Switch to the next effect. - + Previous Previous - + Switch to the previous effect. Switch to the previous effect. - + Next or Previous Next or Previous - + Switch to either the next or previous effect. Switch to either the next or previous effect. - + Meta Knob Meta Knob - + Controls linked parameters of this effect Controls linked parameters of this effect - + Effect Focus Button Effect Focus Button - + Focuses this effect. Focuses this effect. - + Unfocuses this effect. Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter Effect Parameter - + Adjusts a parameter of the effect. Adjusts a parameter of the effect. - + Inactive: parameter not linked Inactive: parameter not linked - + Active: parameter moves with Meta Knob Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter Equalizer Parameter - + Adjusts the gain of the EQ filter. Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. If quantize is enabled, snaps to the nearest beat. - + Quantize Quantize - + Toggles quantization. Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse Reverse - + Reverses track playback during regular playback. Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Play/Pause - + Jumps to the beginning of the track. Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key Sync and Reset Key - + Increases the pitch by one semitone. Increases the pitch by one semitone. - + Decreases the pitch by one semitone. Decreases the pitch by one semitone. - + Enable Vinyl Control Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. When enabled, the track responds to external vinyl control. - + Enable Passthrough Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. Displays options for editing cover artwork. - + Star Rating Star Rating - + Assign ratings to individual tracks by clicking the stars. Assign ratings to individual tracks by clicking the stars. @@ -14579,33 +14693,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects.Microphone Talkover Ducking Strength - + Prevents the pitch from changing when the rate changes. Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. Plays or pauses the track. - + (while playing) (while playing) @@ -14625,215 +14739,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (while stopped) - + Cue Cue - + Headphone Headphone - + Mute Mute - + Old Synchronize Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. Resets the key to the original track key. - + Speed Control Speed Control - - - + + + Changes the track pitch independent of the tempo. Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. Decreases the pitch by 10 cents. - + Pitch Adjust Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. Opens a menu to clear hotcues or edit their labels and colors. - + Drag this button onto a Play button while previewing to continue playback after release. - + Dragging with Shift key pressed will not start previewing the hotcue. - + Record Mix Record Mix - + Toggle mix recording. Toggle mix recording. - + Enable Live Broadcasting Enable Live Broadcasting - + Stream your mix over the Internet. Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit Loop Exit - + Turns the current loop off. Turns the current loop off. - + Slip Mode Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track Track Key - + Displays the musical key of the loaded track. Displays the musical key of the loaded track. - + Clock Clock - + Displays the current time. Displays the current time. - + Audio Latency Usage Meter Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator Audio Latency Overload Indicator @@ -14878,254 +14992,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects.Displays the current musical key of the loaded track after pitch shifting. - + Fast Rewind Fast Rewind - + Fast rewind through the track. Fast rewind through the track. - + Fast Forward Fast Forward - + Fast forward through the track. Fast forward through the track. - + Jumps to the end of the track. Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control Pitch Control - + Pitch Rate Pitch Rate - + Displays the current playback rate of the track. Displays the current playback rate of the track. - + Repeat Repeat - + When active the track will repeat if you go past the end or reverse before the start. When active the track will repeat if you go past the end or reverse before the start. - + Eject Eject - + Ejects track from the player. Ejects track from the player. - + Hotcue Hotcue - + If hotcue is set, jumps to the hotcue. If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status Vinyl Status - + Provides visual feedback for vinyl control status: Provides visual feedback for vinyl control status: - + Green for control enabled. Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker Loop-In Marker - + Loop-Out Marker Loop-Out Marker - + Loop Halve Loop Halve - + Halves the current loop's length by moving the end marker. Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. Deck immediately loops if past the new endpoint. - + Loop Double Loop Double - + Doubles the current loop's length by moving the end marker. Doubles the current loop's length by moving the end marker. - + Beatloop Beatloop - + Toggles the current loop on or off. Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time Track Time - + Track Duration Track Duration - + Displays the duration of the loaded track. Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. Information is loaded from the track's metadata tags. - + Track Artist Track Artist - + Displays the artist of the loaded track. Displays the artist of the loaded track. - + Track Title Track Title - + Displays the title of the loaded track. Displays the title of the loaded track. - + Track Album Track Album - + Displays the album name of the loaded track. Displays the album name of the loaded track. - + Track Artist/Title Track Artist/Title - + Displays the artist and title of the loaded track. Displays the artist and title of the loaded track. @@ -15133,12 +15247,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15353,47 +15467,47 @@ This can not be undone! WCueMenuPopup - + Cue number Cue number - + Cue position Cue position - + Edit cue label Edit cue label - + Label... Label... - + Delete this cue Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 Hotcue #%1 @@ -15518,323 +15632,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Create &New Playlist - + Create a new playlist Create a new playlist - + Ctrl+n Ctrl+n - + Create New &Crate Create New &Crate - + Create a new crate Create a new crate - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. May not be supported on all skins. - + Show Skin Settings Menu Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Show Microphone Section - + Show the microphone section of the Mixxx interface. Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Show Preview Deck - + Show the preview deck in the Mixxx interface. Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Show Cover Art - + Show cover art in the Mixxx interface. Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximize Library - + Maximize the track library to take up all the available screen space. Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library Space - + &Full Screen &Full Screen - + Display Mixxx using the full screen Display Mixxx using the full screen - + &Options &Options - + &Vinyl Control &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 Enable Vinyl Control &%1 - + &Record Mix &Record Mix - + Record your mix to a file Record your mix to a file - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off Toggles keyboard shortcuts on or off - + Ctrl+` Ctrl+` - + &Preferences &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer &Developer - + &Reload Skin &Reload Skin - + Reload the skin Reload the skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Developer &Tools - + Opens the developer tools dialog Opens the developer tools dialog - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Deb&ugger Enabled - + Enables the debugger during skin parsing Enables the debugger during skin parsing - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Help - + Show Keywheel menu title @@ -15851,74 +15995,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support &Community Support - + Get help with Mixxx Get help with Mixxx - + &User Manual &User Manual - + Read the Mixxx user manual. Read the Mixxx user manual. - + &Keyboard Shortcuts &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Translate This Application - + Help translate this application into your language. Help translate this application into your language. - + &About &About - + About the application About the application @@ -15926,25 +16070,25 @@ This can not be undone! WOverview - + Passthrough Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15953,25 +16097,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Clear input - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Search - + Clear input Clear input @@ -15982,169 +16114,163 @@ This can not be undone! Search... - + Clear the search bar input field Clear the search bar input field - - Enter a string to search for - Enter a string to search for + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Shortcut + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Focus + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Exit search + + Delete query from history + WSearchRelatedTracksMenu - + Search related Tracks - + Key Key - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Artist - + Album Artist Album Artist - + Composer Composer - + Title Title - + Album Album - + Grouping Grouping - + Year Year - + Genre Genre - + Directory - + &Search selected @@ -16152,620 +16278,625 @@ This can not be undone! WTrackMenu - + Load to Load to - + Deck Deck - + Sampler Sampler - + Add to Playlist Add to Playlist - + Crates Crates - + Metadata Metadata - + Update external collections Update external collections - + Cover Art Cover Art - + Adjust BPM Adjust BPM - + Select Color Select Color - - + + Analyze Analyse - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) Add to Auto DJ Queue (replace) - + Preview Deck Preview Deck - + Remove Remove - + Remove from Playlist Remove from Playlist - + Remove from Crate Remove from Crate - + Hide from Library Hide from Library - + Unhide from Library Unhide from Library - + Purge from Library Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Properties - + Open in File Browser Open in File Browser - + Select in Library - + Import From File Tags Import From File Tags - + Import From MusicBrainz Import From MusicBrainz - + Export To File Tags Export To File Tags - + BPM and Beatgrid BPM and Beatgrid - + Play Count Play Count - + Rating Rating - + Cue Point Cue Point - - + + Hotcues Hotcues - + Intro Intro - + Outro Outro - + Key Key - + ReplayGain ReplayGain - + Waveform Waveform - + Comment Comment - + All All - + Sort hotcues by position (remove offsets) - + Sort hotcues by position - + Lock BPM Lock BPM - + Unlock BPM Unlock BPM - + Double BPM Double BPM - + Halve BPM Halve BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM 4/3 BPM - + 3/2 BPM 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Create New Playlist - + Enter name for new playlist: Enter name for new playlist: - + New Playlist New Playlist - - - + + + Playlist Creation Failed Playlist Creation Failed - + A playlist by that name already exists. A playlist by that name already exists. - + A playlist cannot have a blank name. A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: An unknown error occurred while creating playlist: - + Add to New Crate Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Sorting hotcues of %n track(s) by position (remove offsets) - + Sorting hotcues of %n track(s) by position - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) Setting cover art of %n track(s)Setting cover art of %n track(s) - + Reloading cover art of %n track(s) Reloading cover art of %n track(s)Reloading cover art of %n track(s) @@ -16781,37 +16912,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16819,37 +16950,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16857,12 +16988,12 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Show or hide columns. - + Shuffle Tracks @@ -16870,52 +17001,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Choose music library directory - + controllers - + Cannot open database Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16929,68 +17060,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates - + + Playlists + + + + + Selected crates/playlists + + + + Browse Browse - + Export directory - + Database version - + Export Export - + Cancel Cancel - + Export Library to Engine DJ "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -17011,7 +17152,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -17021,23 +17162,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_es.qm b/res/translations/mixxx_es.qm index dda504444cb9..00dd9032b90d 100644 Binary files a/res/translations/mixxx_es.qm and b/res/translations/mixxx_es.qm differ diff --git a/res/translations/mixxx_es.ts b/res/translations/mixxx_es.ts index 2ce2ef3a8dee..0b204babc167 100644 --- a/res/translations/mixxx_es.ts +++ b/res/translations/mixxx_es.ts @@ -883,7 +883,7 @@ rastrear - Arriba + Perfilar mensajes Overrides the default application GUI style. Possible values: %1 - Anula el estilo por defecto de la GUI de la aplicación. Valores posibles: %1 + Anula el estilo por defecto de la interfaz de usuario de la aplicación. Valores posibles: %1 @@ -3649,32 +3649,32 @@ rastrear - Arriba + Perfilar mensajes ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La funcionalidad provista por este mapa de controlador será desactivada hasta que el problema sea resuelto. - + You can ignore this error for this session but you may experience erratic behavior. Puedes ignorar este error durante esta sesión, pero podrías experimentar problemas impredecibles. - + Try to recover by resetting your controller. Prueba de corregirlo reseteando la controladora. - + Controller Mapping Error Error del mapa de controlador - + The mapping for your controller "%1" is not working properly. El mapa de tu controlador "%1" no funciona correctamente. - + The script code needs to be fixed. El código del script necesita ser reparado. @@ -5418,12 +5418,12 @@ Apply settings and continue? USB interface number: - Número de interfaz USB: + Número de interfaz USB HID Usage-Page: - Página de uso HID: + Página de uso HID @@ -5684,6 +5684,16 @@ Apply settings and continue? Multi-Sampling Multi-Muestreo + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6298,62 +6308,62 @@ Siempre puedes arrastrar y tirar pistas en la pantalla para clonar una plataform DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. El tamaño mínimo de la apariencia seleccionada es mas grande que la resolucion de su pantalla. - + Allow screensaver to run Permite el salvapantallas - + Prevent screensaver from running Evita que se active el salvapantallas - + Prevent screensaver while playing Evita el salvapantallas mientras reproduce - + Disabled Desactivado - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Este skin no soporta esquemas de color - + Information Información - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx debe ser reiniciado para que el nuevo ajuste de locale, escalado o multi-muestreo tenga efecto. @@ -9645,57 +9655,57 @@ Shown when VuMeter can not be displayed. Please keep de OpenGL. - + activate activar - + toggle conmutar - + right derecha - + left izquierda - + right small derecha pequeño - + left small izquierda pequeño - + up arriba - + down abajo - + up small arriba pequeño - + down small abajo pequeño - + Shortcut Atajo @@ -9774,22 +9784,22 @@ Cancelando la operación para evitar inconsistencias de biblioteca LibraryFeature - + Import Playlist Importar lista de reproducción - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Archivos de lista de reproducción (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? ¿Sobrescribir archivo? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10060,133 +10070,133 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Cargar pista al plato %1 - + Deck %1 is currently playing a track. El plato %1 está reproduciendo una pista. - + Are you sure you want to load a new track? ¿Está seguro de cargar una pista nueva? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control por vinilo. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control passthrough. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this microphone. Do you want to select an input device? No se ha seleccionado un dispositivo de Entrada para este micrófono. ¿Deseas escoger uno ahora? - + There is no input device selected for this auxiliary. Do you want to select an input device? No se ha seleccionado un dispositivo de entrada para este Auxiliar. ¿Deseas escoger uno ahora? - + Scan took %1 El escaneo tomo %1 - + No changes detected. No se han detectado cambios - - + + %1 tracks in total %1 pistas en total - + %1 new tracks found Encontradas %1 pistas nuevas - + %1 moved tracks detected %1 pistas movidas detectadas - + %1 tracks are missing (%2 total) %1 pistas perdidas (%2 en total) - + %1 tracks have been rediscovered %1 pistas han sido reencontradas - + Library scan finished Escaneo de la biblioteca terminado - + Error in skin file Error en el archivo de la apariencia - + The selected skin cannot be loaded. No se ha podido cargar la apariencia seleccionada. - + OpenGL Direct Rendering Renderizado directo de OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. El renderizado directo no está habilitado en su máquina. <br><br>Esto significa que las visualizaciones de forma de onda serán muy <br><b>lentas y pueden exigir mucho a su CPU</b>. Actualice su <br>configuración para habilitar la representación directa o desactiv<br> las visualizaciones de forma de onda en las preferencias de Mixxx seleccionando <br>"Vacío" como la pantalla de forma de onda en la sección 'Interfaz'. - - - + + + Confirm Exit Confirmar salida - + A deck is currently playing. Exit Mixxx? Un plato está reproduciendo. ¿Salir de Mixxx? - + A sampler is currently playing. Exit Mixxx? Un reproductor de muestras está en reproducción. ¿Salir de Mixxx? - + The preferences window is still open. La ventana de preferencias todavía está abierta. - + Discard any changes and exit Mixxx? ¿Descartar cambios y salir de Mixxx? @@ -10208,7 +10218,7 @@ Do you want to select an input device? - + Playlists Listas de reproducción @@ -10249,27 +10259,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Las listas de reproducción son listar ordenadas de pistas que te permiten planificar tus sesiones de DJ. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Podría ser necesario saltar algunas pistas en tu lista de reproducción planificada, o añadir algunas pistas diferentes, con el fin de mantener la energía de tu audiencia. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Algunos DJ preparan listas de reproducción antes de tocar en vivo, pero otros prefieren hacerlo en el momento. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Cuando uses una lista de reproducción en una actuación en vivo, recuerda siempre prestar mucha atención a cómo reacciona la audiencia con la música que has elegido reproducir. - + Create New Playlist Crear nueva lista de reproducción @@ -10297,12 +10307,12 @@ Do you want to select an input device? Rekordbox COLD1 Hotcue Colors - Colores de hotcues COLD1 de Rekordbox + Colores de hotcues de Rekordbox COLD1 Rekordbox COLD2 Hotcue Colors - Colores de hotcues COLD2 de Rekordbox + Colores de hotcues de Rekordbox COLD2 @@ -11930,7 +11940,7 @@ Consejo: compensa las voces de "ardillitas" o "gruñonas"La cantidad de amplificación aplicada a la señal de audio. A niveles más altos, el audio estará más distorsionado. - + Passthrough Paso @@ -12722,7 +12732,7 @@ pueden introducir un efecto de "bombeo" y/o distorsión. Reading track for fingerprinting failed. - Ha fallado la lectura de la pista para fingerprinting. + Ha fallado la lectura de la pista para fingerprinting @@ -13509,7 +13519,7 @@ pueden introducir un efecto de "bombeo" y/o distorsión. Shows the current volume for the left channel of the main output. - Muestra el volumen actual para el canal izquierdo de la salida principal. + Muestra el volumen actual para el canal izquierdo en la salida principal. @@ -13689,12 +13699,12 @@ pueden introducir un efecto de "bombeo" y/o distorsión. Adjust beatgrid by exactly one half beat. Usable only on tracks with constant tempo. Ajusta la cuadrícula de tiempo en exactamente medio beat. Solo se puede usar en -pistas con tempo constante. +pistas con tempo constante Revert last BPM/Beatgrid Change - Revertir el último cambio de BPM/cuadrícula de tiempo + Revierte el último cambio de BPM/cuadrícula de tiempo @@ -14638,7 +14648,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Right click hotcues to edit their labels and colors. - Clic derecho en hotcues para editar sus etiquetas y colores. + Click derecho en los accesos directos para editar sus etiquetas y colores. @@ -14886,7 +14896,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Drag this button onto a Play button while previewing to continue playback after release. - Arrastre este botón a un botón de Play durante la preescucha para continuar la reproducción tras soltarlo. + Arrastre este botón a un boton de Play durante la preescucha para continuar la reproducción tras soltarlo. @@ -15688,323 +15698,353 @@ Carpeta: %2 + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crear &nueva Playlist - + Create a new playlist Crear una nueva lista de reproducción - + Ctrl+n Ctrl+N - + Create New &Crate Crear nueva &caja - + Create a new crate Crea una nueva caja - + Ctrl+Shift+N Ctrl+Mayús+N - - + + &View &Vista - + Auto-hide menu bar Auto-ocultar barra de menú - + Auto-hide the main menu bar when it's not used. Auto-ocultar la barra de menú principal cuando no es utilizada. - + May not be supported on all skins. Puede no estar disponible para todas las apariencias. - + Show Skin Settings Menu Mostrar la configuración de Temas - + Show the Skin Settings Menu of the currently selected Skin Mostrar la configuración actual del menu de tema - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar seccion del microfono - + Show the microphone section of the Mixxx interface. Muestra la sección de control de micrófono de la interfaz de Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostrar la Sección de Control de Vinilo - + Show the vinyl control section of the Mixxx interface. Muestra la sección de control de vinilo de la interfaz de Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostrar el reproductor de preescucha - + Show the preview deck in the Mixxx interface. Muestra el reproductor de preescucha en la interfaz de Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Muestra carátulas - + Show cover art in the Mixxx interface. Muestra las carátulas en la interfaz de Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximizar la biblioteca para tomar todo el espacio disponible en pantalla. - + Space Menubar|View|Maximize Library Espacio - + &Full Screen &Pantalla completa - + Display Mixxx using the full screen Mostrar Mixxx a pantalla completa - + &Options &Opciones - + &Vinyl Control Control de &vinilo - + Use timecoded vinyls on external turntables to control Mixxx Usar vinilos con codigo de tiempo en bandejas externas para controlar Mixxx - + Enable Vinyl Control &%1 Habilita el Control por Vinilo &%1 - + &Record Mix &Grabar Mezcla - + Record your mix to a file Grava a súa mestura a un ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar transmisión en &vivo - + Stream your mixes to a shoutcast or icecast server Transmite tus mezclas a un servidor shoutcast o icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar Atajos de &Teclado - + Toggles keyboard shortcuts on or off Activa o desactiva los atajos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferencias - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambiar la configuración de Mixxx (p.ej.: reproducción, MIDI, controles) - + &Developer &Desarrollador - + &Reload Skin &Recargar apariencia - + Reload the skin Recargar la apariencia - + Ctrl+Shift+R Ctrl+Mayús+R - + Developer &Tools U&tilidades de desarrollador - + Opens the developer tools dialog Abre el cuadro de diálogo de herramientas de desarrollo - + Ctrl+Shift+T Ctrl+Mayús+T - + Stats: &Experiment Bucket Estadísticas: Contadores &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Activa el modo experimental. Recoje estadísticas en los contadores EXPERIMENT. - + Ctrl+Shift+E Ctrl+Mayús+E - + Stats: &Base Bucket Estadísticas: contadores &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Activa el modo base. Recoje estadísticas en los contadores BASE. - + Ctrl+Shift+B Ctrl+Mayús+B - + Deb&ugger Enabled Dep&uración activada - + Enables the debugger during skin parsing Activa el depurador durante el análisis de la máscara - + Ctrl+Shift+D Ctrl+Mayús+D - + &Help Ay&uda - + Show Keywheel menu title Mostrar rueda de notas @@ -16021,74 +16061,74 @@ Carpeta: %2 Exportar biblioteca al formato Engine DJ - + Show keywheel tooltip text Mostrar rueda de notas - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Soporte &comunitario - + Get help with Mixxx Obtener ayuda con Mixxx - + &User Manual Manual de &usuario - + Read the Mixxx user manual. Lea el manual de usuario de Mixxx. - + &Keyboard Shortcuts Atajos de &Teclado - + Speed up your workflow with keyboard shortcuts. Trabaja más rápidamente usando los atajos de teclado. - + &Settings directory &Directorio de configuración - + Open the Mixxx user settings directory. Abre el directorio de configuración de usuario de Mixxx. - + &Translate This Application &Traducir esta aplicación - + Help translate this application into your language. Ayude a traducir esta aplicación a su idioma. - + &About &Acerca de - + About the application Acerca de la aplicación @@ -16123,25 +16163,13 @@ Carpeta: %2 WSearchLineEdit - - Clear input - Clear the search bar input field - Borrar el texto - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Buscar - + Clear input Borrar el texto @@ -16152,93 +16180,87 @@ Carpeta: %2 Buscar... - + Clear the search bar input field Limpia el campo de entrada de la barra de búsqueda - - Enter a string to search for - Introducir el texto a buscar + + Return + Volver - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operadores como bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Para más información vea el Manual de Usuario> Biblioteca Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Atajo + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Poner el cursor aquí + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Tecla de retroceso + + Additional Shortcuts When Focused: + - Shortcuts - Atajos + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Volver + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Activa la búsqueda antes del tiempo de espera de "búsqueda mientras escribe" o salte a la vista de pistas después + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Espacio - + Toggle search history Shows/hides the search history entries Alternar historial de búsqueda - + Delete or Backspace Borrar o Retorno - - Delete query from history - Borrar Consulta del Historial - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Salir de la busqueda + + Delete query from history + Borrar Consulta del Historial @@ -16502,12 +16524,12 @@ Carpeta: %2 Intro - Intro + Outro - Outro + @@ -16983,7 +17005,7 @@ Carpeta: %2 Release "CTRL" to load the current selection - Suelte "Ctrl" para cargar la selección actual + Soltar "Ctrl" para cargar la selección actual @@ -17045,52 +17067,52 @@ Carpeta: %2 mixxx::CoreServices - + fonts tipos de letra - + database base de datos - + effects efectos - + audio interface interface de sonido - + decks - platos + decks - + library Biblioteca - + Choose music library directory Elija el directorio de la biblioteca de la música - + controllers Controladores - + Cannot open database No se puede abrir la base de datos - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_es_419.qm b/res/translations/mixxx_es_419.qm index 33209ba360b0..6c6573084af0 100644 Binary files a/res/translations/mixxx_es_419.qm and b/res/translations/mixxx_es_419.qm differ diff --git a/res/translations/mixxx_es_419.ts b/res/translations/mixxx_es_419.ts index e6dd92ce1f77..30340cd07b0c 100644 --- a/res/translations/mixxx_es_419.ts +++ b/res/translations/mixxx_es_419.ts @@ -1202,7 +1202,7 @@ trace - Arriba + Perfilar mensajes Equalizers - + Ecualizadores @@ -3649,32 +3649,32 @@ trace - Arriba + Perfilar mensajes ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La funcionalidad provista por este mapa de controlador será desactivada hasta que el problema sea resuelto. - + You can ignore this error for this session but you may experience erratic behavior. Puedes ignorar este error durante esta sesión, pero podrías experimentar problemas impredecibles. - + Try to recover by resetting your controller. Prueba de corregirlo reseteando la controladora. - + Controller Mapping Error Error del mapa de controlador - + The mapping for your controller "%1" is not working properly. El mapa de tu controlador "%1" no funciona correctamente. - + The script code needs to be fixed. El código del script necesita ser reparado. @@ -5684,6 +5684,16 @@ Apply settings and continue? Multi-Sampling Multi-Muestreo + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6298,62 +6308,62 @@ Siempre puedes arrastrar y tirar pistas en la pantalla para clonar una plataform DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. El tamaño mínimo de la apariencia seleccionada es mas grande que la resolucion de su pantalla. - + Allow screensaver to run Permite el salvapantallas - + Prevent screensaver from running Evita que se active el salvapantallas - + Prevent screensaver while playing Evita el salvapantallas mientras reproduce - + Disabled Desactivado - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Este skin no soporta esquemas de color - + Information Información - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx debe ser reiniciado para que el nuevo ajuste de locale, escalado o multi-muestreo tenga efecto. @@ -6390,7 +6400,7 @@ y te permite ajustar su pitch para lograr mezclas armónicas. Analyzer Settings - + Configuración del Analizador @@ -9645,57 +9655,57 @@ Shown when VuMeter can not be displayed. Please keep de OpenGL. - + activate activar - + toggle conmutar - + right derecha - + left izquierda - + right small derecha pequeño - + left small izquierda pequeño - + up arriba - + down abajo - + up small arriba pequeño - + down small abajo pequeño - + Shortcut Atajo @@ -9774,22 +9784,22 @@ Cancelando la operación para evitar inconsistencias de biblioteca LibraryFeature - + Import Playlist Importar Lista de Reproducción - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Archivos de lista de reproducción (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? ¿Sobrescribir archivo? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10060,133 +10070,133 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Cargar pista al plato %1 - + Deck %1 is currently playing a track. El plato %1 está reproduciendo una pista. - + Are you sure you want to load a new track? ¿Está seguro de cargar una pista nueva? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control por vinilo. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control passthrough. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this microphone. Do you want to select an input device? No se ha seleccionado un dispositivo de Entrada para este micrófono. ¿Deseas escoger uno ahora? - + There is no input device selected for this auxiliary. Do you want to select an input device? No se ha seleccionado un dispositivo de entrada para este Auxiliar. ¿Deseas escoger uno ahora? - + Scan took %1 El escaneo tomo %1 - + No changes detected. No se han detectado cambios - - + + %1 tracks in total %1 pistas en total - + %1 new tracks found Encontradas %1 pistas nuevas - + %1 moved tracks detected %1 pistas movidas detectadas - + %1 tracks are missing (%2 total) %1 pistas perdidas (%2 en total) - + %1 tracks have been rediscovered %1 pistas han sido reencontradas - + Library scan finished Escaneo de la biblioteca terminado - + Error in skin file Error en el archivo de la apariencia - + The selected skin cannot be loaded. No se ha podido cargar la apariencia seleccionada. - + OpenGL Direct Rendering Renderizado directo de OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. El renderizado directo no está habilitado en su máquina. <br><br>Esto significa que las visualizaciones de forma de onda serán muy <br><b>lentas y pueden exigir mucho a su CPU</b>. Actualice su <br>configuración para habilitar la representación directa o desactiv<br> las visualizaciones de forma de onda en las preferencias de Mixxx seleccionando <br>"Vacío" como la pantalla de forma de onda en la sección 'Interfaz'. - - - + + + Confirm Exit Confirmar salida - + A deck is currently playing. Exit Mixxx? Un plato está reproduciendo. ¿Salir de Mixxx? - + A sampler is currently playing. Exit Mixxx? Un reproductor de muestras está en reproducción. ¿Salir de Mixxx? - + The preferences window is still open. La ventana de preferencias todavía está abierta. - + Discard any changes and exit Mixxx? ¿Descartar cambios y salir de Mixxx? @@ -10208,7 +10218,7 @@ Do you want to select an input device? - + Playlists Listas de reproducción @@ -10249,27 +10259,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Las listas de reproducción son listar ordenadas de pistas que te permiten planificar tus sesiones de DJ. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Podría ser necesario saltar algunas pistas en tu lista de reproducción planificada, o añadir algunas pistas diferentes, con el fin de mantener la energía de tu audiencia. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Algunos DJ preparan listas de reproducción antes de tocar en vivo, pero otros prefieren hacerlo en el momento. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Cuando uses una lista de reproducción en una actuación en vivo, recuerda siempre prestar mucha atención a cómo reacciona la audiencia con la música que has elegido reproducir. - + Create New Playlist Crear nueva lista de reproducción @@ -11930,7 +11940,7 @@ Consejo: compensa las voces de "ardillitas" o "gruñonas"La cantidad de amplificación aplicada a la señal de audio. A niveles más altos, el audio estará más distorsionado. - + Passthrough Paso @@ -14089,7 +14099,8 @@ Use this to change the sound of the track with EQ and filter effects. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - Modo seco + húmedo (línea seca plana): la perilla de mezcla agrega húmedo a seco. Use esto para cambiar solo la señal efectuada (húmeda) con EQ y efectos de filtro. + Modo Seco+Húmedo (línea seca plana): La perilla de mezcla agrega mojado a seco +Utiliza esto para cambiar únicamente la señal afectada (mojada) con EQ y efectos de filtrado. @@ -14638,7 +14649,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Right click hotcues to edit their labels and colors. - Clic derecho en hotcues para editar sus etiquetas y colores. + Click derecho en los accesos directos para editar sus etiquetas y colores. @@ -14753,7 +14764,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Changes the number of hotcue buttons displayed in the deck - Cambia el número de botones de acceso directo que se muestran en la cubierta + Cambia el número de botones de acceso directo mostrados en el deck @@ -15688,323 +15699,353 @@ Carpeta: %2 + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crear &nueva Playlist - + Create a new playlist Crear una nueva lista de reproducción - + Ctrl+n Ctrl+N - + Create New &Crate Crear un nuevo&cajón - + Create a new crate Crear un nuevo cajón - + Ctrl+Shift+N Ctrl+Mayús+N - - + + &View &Vista - + Auto-hide menu bar Auto-ocultar barra de menú - + Auto-hide the main menu bar when it's not used. Auto-ocultar la barra de menú principal cuando no es utilizada. - + May not be supported on all skins. Puede no estar disponible para todas las apariencias. - + Show Skin Settings Menu Mostrar menú de ajustes de aspecto - + Show the Skin Settings Menu of the currently selected Skin Mostrar la configuración actual del menu de tema - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar seccion del microfono - + Show the microphone section of the Mixxx interface. Muestra la sección de control de micrófono de la interfaz de Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostrar la Sección de Control de Vinilo - + Show the vinyl control section of the Mixxx interface. Muestra la sección de control de vinilo de la interfaz de Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostrar el reproductor de preescucha - + Show the preview deck in the Mixxx interface. Muestra el reproductor de preescucha en la interfaz de Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Muestra carátulas - + Show cover art in the Mixxx interface. Muestra las carátulas en la interfaz de Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximizar la biblioteca para tomar todo el espacio disponible en pantalla. - + Space Menubar|View|Maximize Library Espacio - + &Full Screen &Pantalla completa - + Display Mixxx using the full screen Mostrar Mixxx a pantalla completa - + &Options &Opciones - + &Vinyl Control Control de &vinilo - + Use timecoded vinyls on external turntables to control Mixxx Usar vinilos con codigo de tiempo en bandejas externas para controlar Mixxx - + Enable Vinyl Control &%1 Habilita el Control por Vinilo &%1 - + &Record Mix &Grabar Mezcla - + Record your mix to a file Grava a súa mestura a un ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar transmisión en &vivo - + Stream your mixes to a shoutcast or icecast server Transmite tus mezclas a un servidor shoutcast o icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar Atajos de &Teclado - + Toggles keyboard shortcuts on or off Activa o desactiva los atajos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferencias - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambiar la configuración de Mixxx (p.ej.: reproducción, MIDI, controles) - + &Developer &Desarrollador - + &Reload Skin &Recargar apariencia - + Reload the skin Recargar la apariencia - + Ctrl+Shift+R Ctrl+Mayús+R - + Developer &Tools U&tilidades de desarrollador - + Opens the developer tools dialog Abre el cuadro de diálogo de herramientas de desarrollo - + Ctrl+Shift+T Ctrl+Mayús+T - + Stats: &Experiment Bucket Estadísticas: Contadores &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Activa el modo experimental. Recoje estadísticas en los contadores EXPERIMENT. - + Ctrl+Shift+E Ctrl+Mayús+E - + Stats: &Base Bucket Estadísticas: contadores &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Activa el modo base. Recoje estadísticas en los contadores BASE. - + Ctrl+Shift+B Ctrl+Mayús+B - + Deb&ugger Enabled Dep&uración activada - + Enables the debugger during skin parsing Activa el depurador durante el análisis de la máscara - + Ctrl+Shift+D Ctrl+Mayús+D - + &Help Ay&uda - + Show Keywheel menu title Mostrar rueda de notas @@ -16021,74 +16062,74 @@ Carpeta: %2 Exportar biblioteca al formato Engine DJ - + Show keywheel tooltip text Mostrar rueda de notas - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Soporte &comunitario - + Get help with Mixxx Obtener ayuda con Mixxx - + &User Manual Manual de &usuario - + Read the Mixxx user manual. Lea el manual de usuario de Mixxx. - + &Keyboard Shortcuts Atajos de &Teclado - + Speed up your workflow with keyboard shortcuts. Trabaja más rápidamente usando los atajos de teclado. - + &Settings directory &Directorio de configuración - + Open the Mixxx user settings directory. Abre el directorio de configuración de usuario de Mixxx. - + &Translate This Application &Traducir esta aplicación - + Help translate this application into your language. Ayude a traducir esta aplicación a su idioma. - + &About &Acerca de - + About the application Acerca de la aplicación @@ -16123,25 +16164,13 @@ Carpeta: %2 WSearchLineEdit - - Clear input - Clear the search bar input field - Borrar el texto - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Buscar - + Clear input Borrar el texto @@ -16152,93 +16181,87 @@ Carpeta: %2 Buscar... - + Clear the search bar input field Limpia el campo de entrada de la barra de búsqueda - - Enter a string to search for - Introducir el texto a buscar + + Return + Volver - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operadores como bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Para más información vea el Manual de Usuario> Biblioteca Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Atajo + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Poner el cursor aquí + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Tecla de retroceso + + Additional Shortcuts When Focused: + - Shortcuts - Atajos + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Volver + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Activa la búsqueda antes del tiempo de espera de "búsqueda mientras escribe" o salte a la vista de pistas después + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Espacio - + Toggle search history Shows/hides the search history entries Alternar historial de búsqueda - + Delete or Backspace Borrar o Retorno - - Delete query from history - Borrar Consulta del Historial - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Salir de la busqueda + + Delete query from history + Borrar Consulta del Historial @@ -17045,52 +17068,52 @@ Carpeta: %2 mixxx::CoreServices - + fonts tipos de letra - + database base de datos - + effects efectos - + audio interface interface de sonido - + decks - platos + decks - + library Biblioteca - + Choose music library directory Elija el directorio de la biblioteca de la música - + controllers Controladores - + Cannot open database No se puede abrir la base de datos - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_es_AR.qm b/res/translations/mixxx_es_AR.qm index eebacb13efa2..8580654440d4 100644 Binary files a/res/translations/mixxx_es_AR.qm and b/res/translations/mixxx_es_AR.qm differ diff --git a/res/translations/mixxx_es_AR.ts b/res/translations/mixxx_es_AR.ts index 99502e6dfa58..448751f8876f 100644 --- a/res/translations/mixxx_es_AR.ts +++ b/res/translations/mixxx_es_AR.ts @@ -1202,7 +1202,7 @@ trace - Arriba + Perfilar mensajes Equalizers - + Ecualizadores @@ -3649,32 +3649,32 @@ trace - Arriba + Perfilar mensajes ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La funcionalidad provista por este mapa de controlador será desactivada hasta que el problema sea resuelto. - + You can ignore this error for this session but you may experience erratic behavior. Puedes ignorar este error durante esta sesión, pero podrías experimentar problemas impredecibles. - + Try to recover by resetting your controller. Prueba de corregirlo reseteando la controladora. - + Controller Mapping Error Error del mapa de controlador - + The mapping for your controller "%1" is not working properly. El mapa de tu controlador "%1" no funciona correctamente. - + The script code needs to be fixed. El código del script necesita ser reparado. @@ -5684,6 +5684,16 @@ Apply settings and continue? Multi-Sampling Multi-Muestreo + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6298,62 +6308,62 @@ Siempre puedes arrastrar y tirar pistas en la pantalla para clonar una plataform DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. El tamaño mínimo de la apariencia seleccionada es mas grande que la resolucion de su pantalla. - + Allow screensaver to run Permite el salvapantallas - + Prevent screensaver from running Evita que se active el salvapantallas - + Prevent screensaver while playing Evita el salvapantallas mientras reproduce - + Disabled Desactivado - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Este skin no soporta esquemas de color - + Information Información - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx debe ser reiniciado para que el nuevo ajuste de locale, escalado o multi-muestreo tenga efecto. @@ -6390,7 +6400,7 @@ y te permite ajustar su pitch para lograr mezclas armónicas. Analyzer Settings - + Configuración del Analizador @@ -9645,57 +9655,57 @@ Shown when VuMeter can not be displayed. Please keep de OpenGL. - + activate activar - + toggle conmutar - + right derecha - + left izquierda - + right small derecha pequeño - + left small izquierda pequeño - + up arriba - + down abajo - + up small arriba pequeño - + down small abajo pequeño - + Shortcut Atajo @@ -9774,22 +9784,22 @@ Cancelando la operación para evitar inconsistencias de biblioteca LibraryFeature - + Import Playlist Importar Lista de Reproducción - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Archivos de lista de reproducción (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? ¿Sobrescribir archivo? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10060,133 +10070,133 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Cargar pista al plato %1 - + Deck %1 is currently playing a track. El plato %1 está reproduciendo una pista. - + Are you sure you want to load a new track? ¿Está seguro de cargar una pista nueva? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control por vinilo. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control passthrough. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this microphone. Do you want to select an input device? No se ha seleccionado un dispositivo de Entrada para este micrófono. ¿Deseas escoger uno ahora? - + There is no input device selected for this auxiliary. Do you want to select an input device? No se ha seleccionado un dispositivo de entrada para este Auxiliar. ¿Deseas escoger uno ahora? - + Scan took %1 El escaneo tomo %1 - + No changes detected. No se han detectado cambios - - + + %1 tracks in total %1 pistas en total - + %1 new tracks found Encontradas %1 pistas nuevas - + %1 moved tracks detected %1 pistas movidas detectadas - + %1 tracks are missing (%2 total) %1 pistas perdidas (%2 en total) - + %1 tracks have been rediscovered %1 pistas han sido reencontradas - + Library scan finished Escaneo de la biblioteca terminado - + Error in skin file Error en el archivo de la apariencia - + The selected skin cannot be loaded. No se ha podido cargar la apariencia seleccionada. - + OpenGL Direct Rendering Renderizado directo de OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. El renderizado directo no está habilitado en su máquina. <br><br>Esto significa que las visualizaciones de forma de onda serán muy <br><b>lentas y pueden exigir mucho a su CPU</b>. Actualice su <br>configuración para habilitar la representación directa o desactiv<br> las visualizaciones de forma de onda en las preferencias de Mixxx seleccionando <br>"Vacío" como la pantalla de forma de onda en la sección 'Interfaz'. - - - + + + Confirm Exit Confirmar salida - + A deck is currently playing. Exit Mixxx? Un plato está reproduciendo. ¿Salir de Mixxx? - + A sampler is currently playing. Exit Mixxx? Un reproductor de muestras está en reproducción. ¿Salir de Mixxx? - + The preferences window is still open. La ventana de preferencias todavía está abierta. - + Discard any changes and exit Mixxx? ¿Descartar cambios y salir de Mixxx? @@ -10208,7 +10218,7 @@ Do you want to select an input device? - + Playlists Listas de reproducción @@ -10249,27 +10259,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Las listas de reproducción son listar ordenadas de pistas que te permiten planificar tus sesiones de DJ. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Podría ser necesario saltar algunas pistas en tu lista de reproducción planificada, o añadir algunas pistas diferentes, con el fin de mantener la energía de tu audiencia. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Algunos DJ preparan listas de reproducción antes de tocar en vivo, pero otros prefieren hacerlo en el momento. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Cuando uses una lista de reproducción en una actuación en vivo, recuerda siempre prestar mucha atención a cómo reacciona la audiencia con la música que has elegido reproducir. - + Create New Playlist Crear nueva lista de reproducción @@ -11930,7 +11940,7 @@ Consejo: compensa las voces de "ardillitas" o "gruñonas"La cantidad de amplificación aplicada a la señal de audio. A niveles más altos, el audio estará más distorsionado. - + Passthrough Paso @@ -14089,7 +14099,8 @@ Use this to change the sound of the track with EQ and filter effects. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - Modo seco + húmedo (línea seca plana): la perilla de mezcla agrega húmedo a seco. Use esto para cambiar solo la señal efectuada (húmeda) con EQ y efectos de filtro. + Modo Seco+Húmedo (línea seca plana): La perilla de mezcla agrega mojado a seco +Utiliza esto para cambiar únicamente la señal afectada (mojada) con EQ y efectos de filtrado. @@ -14638,7 +14649,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Right click hotcues to edit their labels and colors. - Clic derecho en hotcues para editar sus etiquetas y colores. + Click derecho en los accesos directos para editar sus etiquetas y colores. @@ -14753,7 +14764,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Changes the number of hotcue buttons displayed in the deck - Cambia el número de botones de acceso directo que se muestran en la cubierta + Cambia el número de botones de acceso directo mostrados en el deck @@ -15688,323 +15699,353 @@ Carpeta: %2 + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crear &nueva Playlist - + Create a new playlist Crear una nueva lista de reproducción - + Ctrl+n Ctrl+N - + Create New &Crate Crear un nuevo&cajón - + Create a new crate Crear un nuevo cajón - + Ctrl+Shift+N Ctrl+Mayús+N - - + + &View &Vista - + Auto-hide menu bar Auto-ocultar barra de menú - + Auto-hide the main menu bar when it's not used. Auto-ocultar la barra de menú principal cuando no es utilizada. - + May not be supported on all skins. Puede no estar disponible para todas las apariencias. - + Show Skin Settings Menu Mostrar menú de ajustes de aspecto - + Show the Skin Settings Menu of the currently selected Skin Mostrar la configuración actual del menu de tema - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar seccion del microfono - + Show the microphone section of the Mixxx interface. Muestra la sección de control de micrófono de la interfaz de Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostrar la Sección de Control de Vinilo - + Show the vinyl control section of the Mixxx interface. Muestra la sección de control de vinilo de la interfaz de Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostrar el reproductor de preescucha - + Show the preview deck in the Mixxx interface. Muestra el reproductor de preescucha en la interfaz de Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Muestra carátulas - + Show cover art in the Mixxx interface. Muestra las carátulas en la interfaz de Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximizar la biblioteca para tomar todo el espacio disponible en pantalla. - + Space Menubar|View|Maximize Library Espacio - + &Full Screen &Pantalla completa - + Display Mixxx using the full screen Mostrar Mixxx a pantalla completa - + &Options &Opciones - + &Vinyl Control Control de &vinilo - + Use timecoded vinyls on external turntables to control Mixxx Usar vinilos con codigo de tiempo en bandejas externas para controlar Mixxx - + Enable Vinyl Control &%1 Habilita el Control por Vinilo &%1 - + &Record Mix &Grabar Mezcla - + Record your mix to a file Grava a súa mestura a un ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar transmisión en &vivo - + Stream your mixes to a shoutcast or icecast server Transmite tus mezclas a un servidor shoutcast o icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar Atajos de &Teclado - + Toggles keyboard shortcuts on or off Activa o desactiva los atajos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferencias - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambiar la configuración de Mixxx (p.ej.: reproducción, MIDI, controles) - + &Developer &Desarrollador - + &Reload Skin &Recargar apariencia - + Reload the skin Recargar la apariencia - + Ctrl+Shift+R Ctrl+Mayús+R - + Developer &Tools U&tilidades de desarrollador - + Opens the developer tools dialog Abre el cuadro de diálogo de herramientas de desarrollo - + Ctrl+Shift+T Ctrl+Mayús+T - + Stats: &Experiment Bucket Estadísticas: Contadores &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Activa el modo experimental. Recoje estadísticas en los contadores EXPERIMENT. - + Ctrl+Shift+E Ctrl+Mayús+E - + Stats: &Base Bucket Estadísticas: contadores &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Activa el modo base. Recoje estadísticas en los contadores BASE. - + Ctrl+Shift+B Ctrl+Mayús+B - + Deb&ugger Enabled Dep&uración activada - + Enables the debugger during skin parsing Activa el depurador durante el análisis de la máscara - + Ctrl+Shift+D Ctrl+Mayús+D - + &Help Ay&uda - + Show Keywheel menu title Mostrar rueda de notas @@ -16021,74 +16062,74 @@ Carpeta: %2 Exportar biblioteca al formato Engine DJ - + Show keywheel tooltip text Mostrar rueda de notas - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Soporte &comunitario - + Get help with Mixxx Obtener ayuda con Mixxx - + &User Manual Manual de &usuario - + Read the Mixxx user manual. Lea el manual de usuario de Mixxx. - + &Keyboard Shortcuts Atajos de &Teclado - + Speed up your workflow with keyboard shortcuts. Trabaja más rápidamente usando los atajos de teclado. - + &Settings directory &Directorio de configuración - + Open the Mixxx user settings directory. Abre el directorio de configuración de usuario de Mixxx. - + &Translate This Application &Traducir esta aplicación - + Help translate this application into your language. Ayude a traducir esta aplicación a su idioma. - + &About &Acerca de - + About the application Acerca de la aplicación @@ -16123,25 +16164,13 @@ Carpeta: %2 WSearchLineEdit - - Clear input - Clear the search bar input field - Borrar el texto - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Buscar - + Clear input Borrar el texto @@ -16152,93 +16181,87 @@ Carpeta: %2 Buscar... - + Clear the search bar input field Limpia el campo de entrada de la barra de búsqueda - - Enter a string to search for - Introducir el texto a buscar + + Return + Volver - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operadores como bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Para más información vea el Manual de Usuario> Biblioteca Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Atajo + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Poner el cursor aquí + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Tecla de retroceso + + Additional Shortcuts When Focused: + - Shortcuts - Atajos + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Volver + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Activa la búsqueda antes del tiempo de espera de "búsqueda mientras escribe" o salte a la vista de pistas después + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Espacio - + Toggle search history Shows/hides the search history entries Alternar historial de búsqueda - + Delete or Backspace Borrar o Retorno - - Delete query from history - Borrar Consulta del Historial - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Salir de la busqueda + + Delete query from history + Borrar Consulta del Historial @@ -17045,52 +17068,52 @@ Carpeta: %2 mixxx::CoreServices - + fonts tipos de letra - + database base de datos - + effects efectos - + audio interface interface de sonido - + decks - platos + decks - + library Biblioteca - + Choose music library directory Elija el directorio de la biblioteca de la música - + controllers Controladores - + Cannot open database No se puede abrir la base de datos - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_es_CO.qm b/res/translations/mixxx_es_CO.qm index 22242bec2a2e..966ca9937c8a 100644 Binary files a/res/translations/mixxx_es_CO.qm and b/res/translations/mixxx_es_CO.qm differ diff --git a/res/translations/mixxx_es_CO.ts b/res/translations/mixxx_es_CO.ts index a3d1e37a0674..1aa920d5817c 100644 --- a/res/translations/mixxx_es_CO.ts +++ b/res/translations/mixxx_es_CO.ts @@ -1202,7 +1202,7 @@ trace - Arriba + Perfilar mensajes Equalizers - + Ecualizadores @@ -3649,32 +3649,32 @@ trace - Arriba + Perfilar mensajes ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La funcionalidad provista por este mapa de controlador será desactivada hasta que el problema sea resuelto. - + You can ignore this error for this session but you may experience erratic behavior. Puedes ignorar este error durante esta sesión, pero podrías experimentar problemas impredecibles. - + Try to recover by resetting your controller. Prueba de corregirlo reseteando la controladora. - + Controller Mapping Error Error del mapa de controlador - + The mapping for your controller "%1" is not working properly. El mapa de tu controlador "%1" no funciona correctamente. - + The script code needs to be fixed. El código del script necesita ser reparado. @@ -5684,6 +5684,16 @@ Apply settings and continue? Multi-Sampling Multi-Muestreo + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6298,62 +6308,62 @@ Siempre puedes arrastrar y tirar pistas en la pantalla para clonar una plataform DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. El tamaño mínimo de la apariencia seleccionada es mas grande que la resolucion de su pantalla. - + Allow screensaver to run Permite el salvapantallas - + Prevent screensaver from running Evita que se active el salvapantallas - + Prevent screensaver while playing Evita el salvapantallas mientras reproduce - + Disabled Desactivado - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Este skin no soporta esquemas de color - + Information Información - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx debe ser reiniciado para que el nuevo ajuste de locale, escalado o multi-muestreo tenga efecto. @@ -6390,7 +6400,7 @@ y te permite ajustar su pitch para lograr mezclas armónicas. Analyzer Settings - + Configuración del Analizador @@ -9645,57 +9655,57 @@ Shown when VuMeter can not be displayed. Please keep de OpenGL. - + activate activar - + toggle conmutar - + right derecha - + left izquierda - + right small derecha pequeño - + left small izquierda pequeño - + up arriba - + down abajo - + up small arriba pequeño - + down small abajo pequeño - + Shortcut Atajo @@ -9774,22 +9784,22 @@ Cancelando la operación para evitar inconsistencias de biblioteca LibraryFeature - + Import Playlist Importar Lista de Reproducción - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Archivos de lista de reproducción (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? ¿Sobrescribir archivo? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10060,133 +10070,133 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Cargar pista al plato %1 - + Deck %1 is currently playing a track. El plato %1 está reproduciendo una pista. - + Are you sure you want to load a new track? ¿Está seguro de cargar una pista nueva? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control por vinilo. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control passthrough. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this microphone. Do you want to select an input device? No se ha seleccionado un dispositivo de Entrada para este micrófono. ¿Deseas escoger uno ahora? - + There is no input device selected for this auxiliary. Do you want to select an input device? No se ha seleccionado un dispositivo de entrada para este Auxiliar. ¿Deseas escoger uno ahora? - + Scan took %1 El escaneo tomo %1 - + No changes detected. No se han detectado cambios - - + + %1 tracks in total %1 pistas en total - + %1 new tracks found Encontradas %1 pistas nuevas - + %1 moved tracks detected %1 pistas movidas detectadas - + %1 tracks are missing (%2 total) %1 pistas perdidas (%2 en total) - + %1 tracks have been rediscovered %1 pistas han sido reencontradas - + Library scan finished Escaneo de la biblioteca terminado - + Error in skin file Error en el archivo de la apariencia - + The selected skin cannot be loaded. No se ha podido cargar la apariencia seleccionada. - + OpenGL Direct Rendering Renderizado directo de OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. El renderizado directo no está habilitado en su máquina. <br><br>Esto significa que las visualizaciones de forma de onda serán muy <br><b>lentas y pueden exigir mucho a su CPU</b>. Actualice su <br>configuración para habilitar la representación directa o desactiv<br> las visualizaciones de forma de onda en las preferencias de Mixxx seleccionando <br>"Vacío" como la pantalla de forma de onda en la sección 'Interfaz'. - - - + + + Confirm Exit Confirmar salida - + A deck is currently playing. Exit Mixxx? Un plato está reproduciendo. ¿Salir de Mixxx? - + A sampler is currently playing. Exit Mixxx? Un reproductor de muestras está en reproducción. ¿Salir de Mixxx? - + The preferences window is still open. La ventana de preferencias todavía está abierta. - + Discard any changes and exit Mixxx? ¿Descartar cambios y salir de Mixxx? @@ -10208,7 +10218,7 @@ Do you want to select an input device? - + Playlists Listas de reproducción @@ -10249,27 +10259,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Las listas de reproducción son listar ordenadas de pistas que te permiten planificar tus sesiones de DJ. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Podría ser necesario saltar algunas pistas en tu lista de reproducción planificada, o añadir algunas pistas diferentes, con el fin de mantener la energía de tu audiencia. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Algunos DJ preparan listas de reproducción antes de tocar en vivo, pero otros prefieren hacerlo en el momento. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Cuando uses una lista de reproducción en una actuación en vivo, recuerda siempre prestar mucha atención a cómo reacciona la audiencia con la música que has elegido reproducir. - + Create New Playlist Crear nueva lista de reproducción @@ -11930,7 +11940,7 @@ Consejo: compensa las voces de "ardillitas" o "gruñonas"La cantidad de amplificación aplicada a la señal de audio. A niveles más altos, el audio estará más distorsionado. - + Passthrough Paso @@ -14089,7 +14099,8 @@ Use this to change the sound of the track with EQ and filter effects. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - Modo seco + húmedo (línea seca plana): la perilla de mezcla agrega húmedo a seco. Use esto para cambiar solo la señal efectuada (húmeda) con EQ y efectos de filtro. + Modo Seco+Húmedo (línea seca plana): La perilla de mezcla agrega mojado a seco +Utiliza esto para cambiar únicamente la señal afectada (mojada) con EQ y efectos de filtrado. @@ -14638,7 +14649,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Right click hotcues to edit their labels and colors. - Clic derecho en hotcues para editar sus etiquetas y colores. + Click derecho en los accesos directos para editar sus etiquetas y colores. @@ -14753,7 +14764,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Changes the number of hotcue buttons displayed in the deck - Cambia el número de botones de acceso directo que se muestran en la cubierta + Cambia el número de botones de acceso directo mostrados en el deck @@ -15688,323 +15699,353 @@ Carpeta: %2 + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crear &nueva Playlist - + Create a new playlist Crear una nueva lista de reproducción - + Ctrl+n Ctrl+N - + Create New &Crate Crear un nuevo&cajón - + Create a new crate Crear un nuevo cajón - + Ctrl+Shift+N Ctrl+Mayús+N - - + + &View &Vista - + Auto-hide menu bar Auto-ocultar barra de menú - + Auto-hide the main menu bar when it's not used. Auto-ocultar la barra de menú principal cuando no es utilizada. - + May not be supported on all skins. Puede no estar disponible para todas las apariencias. - + Show Skin Settings Menu Mostrar menú de ajustes de aspecto - + Show the Skin Settings Menu of the currently selected Skin Mostrar la configuración actual del menu de tema - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar seccion del microfono - + Show the microphone section of the Mixxx interface. Muestra la sección de control de micrófono de la interfaz de Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostrar la Sección de Control de Vinilo - + Show the vinyl control section of the Mixxx interface. Muestra la sección de control de vinilo de la interfaz de Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostrar el reproductor de preescucha - + Show the preview deck in the Mixxx interface. Muestra el reproductor de preescucha en la interfaz de Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Muestra carátulas - + Show cover art in the Mixxx interface. Muestra las carátulas en la interfaz de Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximizar la biblioteca para tomar todo el espacio disponible en pantalla. - + Space Menubar|View|Maximize Library Espacio - + &Full Screen &Pantalla completa - + Display Mixxx using the full screen Mostrar Mixxx a pantalla completa - + &Options &Opciones - + &Vinyl Control Control de &vinilo - + Use timecoded vinyls on external turntables to control Mixxx Usar vinilos con codigo de tiempo en bandejas externas para controlar Mixxx - + Enable Vinyl Control &%1 Habilita el Control por Vinilo &%1 - + &Record Mix &Grabar Mezcla - + Record your mix to a file Grava a súa mestura a un ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar transmisión en &vivo - + Stream your mixes to a shoutcast or icecast server Transmite tus mezclas a un servidor shoutcast o icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar Atajos de &Teclado - + Toggles keyboard shortcuts on or off Activa o desactiva los atajos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferencias - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambiar la configuración de Mixxx (p.ej.: reproducción, MIDI, controles) - + &Developer &Desarrollador - + &Reload Skin &Recargar apariencia - + Reload the skin Recargar la apariencia - + Ctrl+Shift+R Ctrl+Mayús+R - + Developer &Tools U&tilidades de desarrollador - + Opens the developer tools dialog Abre el cuadro de diálogo de herramientas de desarrollo - + Ctrl+Shift+T Ctrl+Mayús+T - + Stats: &Experiment Bucket Estadísticas: Contadores &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Activa el modo experimental. Recoje estadísticas en los contadores EXPERIMENT. - + Ctrl+Shift+E Ctrl+Mayús+E - + Stats: &Base Bucket Estadísticas: contadores &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Activa el modo base. Recoje estadísticas en los contadores BASE. - + Ctrl+Shift+B Ctrl+Mayús+B - + Deb&ugger Enabled Dep&uración activada - + Enables the debugger during skin parsing Activa el depurador durante el análisis de la máscara - + Ctrl+Shift+D Ctrl+Mayús+D - + &Help Ay&uda - + Show Keywheel menu title Mostrar rueda de notas @@ -16021,74 +16062,74 @@ Carpeta: %2 Exportar biblioteca al formato Engine DJ - + Show keywheel tooltip text Mostrar rueda de notas - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Soporte &comunitario - + Get help with Mixxx Obtener ayuda con Mixxx - + &User Manual Manual de &usuario - + Read the Mixxx user manual. Lea el manual de usuario de Mixxx. - + &Keyboard Shortcuts Atajos de &Teclado - + Speed up your workflow with keyboard shortcuts. Trabaja más rápidamente usando los atajos de teclado. - + &Settings directory &Directorio de configuración - + Open the Mixxx user settings directory. Abre el directorio de configuración de usuario de Mixxx. - + &Translate This Application &Traducir esta aplicación - + Help translate this application into your language. Ayude a traducir esta aplicación a su idioma. - + &About &Acerca de - + About the application Acerca de la aplicación @@ -16123,25 +16164,13 @@ Carpeta: %2 WSearchLineEdit - - Clear input - Clear the search bar input field - Borrar el texto - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Buscar - + Clear input Borrar el texto @@ -16152,93 +16181,87 @@ Carpeta: %2 Buscar... - + Clear the search bar input field Limpia el campo de entrada de la barra de búsqueda - - Enter a string to search for - Introducir el texto a buscar + + Return + Volver - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operadores como bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Para más información vea el Manual de Usuario> Biblioteca Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Atajo + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Poner el cursor aquí + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Tecla de retroceso + + Additional Shortcuts When Focused: + - Shortcuts - Atajos + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Volver + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Activa la búsqueda antes del tiempo de espera de "búsqueda mientras escribe" o salte a la vista de pistas después + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Espacio - + Toggle search history Shows/hides the search history entries Alternar historial de búsqueda - + Delete or Backspace Borrar o Retorno - - Delete query from history - Borrar Consulta del Historial - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Salir de la busqueda + + Delete query from history + Borrar Consulta del Historial @@ -17045,52 +17068,52 @@ Carpeta: %2 mixxx::CoreServices - + fonts tipos de letra - + database base de datos - + effects efectos - + audio interface interface de sonido - + decks - platos + decks - + library Biblioteca - + Choose music library directory Elija el directorio de la biblioteca de la música - + controllers Controladores - + Cannot open database No se puede abrir la base de datos - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_es_ES.qm b/res/translations/mixxx_es_ES.qm index a45a8dd70eed..8d85ae979c81 100644 Binary files a/res/translations/mixxx_es_ES.qm and b/res/translations/mixxx_es_ES.qm differ diff --git a/res/translations/mixxx_es_ES.ts b/res/translations/mixxx_es_ES.ts index e37c1bf52747..7c3c0d8cd4b3 100644 --- a/res/translations/mixxx_es_ES.ts +++ b/res/translations/mixxx_es_ES.ts @@ -36,7 +36,7 @@ Clear Auto DJ Queue - Limpiar la cola de Auto DJ + Vaciar la cola de Auto DJ @@ -56,7 +56,7 @@ Do you really want to remove all tracks from the Auto DJ queue? - Realmente quieres eliminar todas las pistas de la cola de Auto DJ? + ¿Realmente quieres eliminar todas las pistas de la cola de Auto DJ? @@ -66,7 +66,7 @@ Add Crate as Track Source - Usar cajón como fuente de pistas + Usar el cajón como fuente de pistas @@ -295,8 +295,7 @@ Do you really want to delete playlist <b>%1</b>? - Do you really want to delete playlist -%1? + ¿Deseas realmente eliminar la lista de reproducción<b>%1</b>? @@ -3650,32 +3649,32 @@ trace - Arriba + Perfilar mensajes ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La funcionalidad provista por este mapa de controlador será desactivada hasta que el problema sea resuelto. - + You can ignore this error for this session but you may experience erratic behavior. Puedes ignorar este error durante esta sesión, pero podrías experimentar problemas impredecibles. - + Try to recover by resetting your controller. Prueba de corregirlo reseteando la controladora. - + Controller Mapping Error Error del mapa de controlador - + The mapping for your controller "%1" is not working properly. El mapa de tu controlador "%1" no funciona correctamente. - + The script code needs to be fixed. El código del script necesita ser reparado. @@ -5379,7 +5378,7 @@ Apply settings and continue? Physical Interface: - Interfase física + Interfase física: @@ -5685,6 +5684,16 @@ Apply settings and continue? Multi-Sampling Multi-Muestreo + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6299,62 +6308,62 @@ Siempre puedes arrastrar y tirar pistas en la pantalla para clonar una plataform DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. El tamaño mínimo de la apariencia seleccionada es mas grande que la resolucion de su pantalla. - + Allow screensaver to run Permite el salvapantallas - + Prevent screensaver from running Evita que se active el salvapantallas - + Prevent screensaver while playing Evita el salvapantallas mientras reproduce - + Disabled Desactivado - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Este skin no soporta esquemas de color - + Information Información - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx debe ser reiniciado para que el nuevo ajuste de locale, escalado o multi-muestreo tenga efecto. @@ -9646,57 +9655,57 @@ Shown when VuMeter can not be displayed. Please keep de OpenGL. - + activate activar - + toggle conmutar - + right derecha - + left izquierda - + right small derecha pequeño - + left small izquierda pequeño - + up arriba - + down abajo - + up small arriba pequeño - + down small abajo pequeño - + Shortcut Atajo @@ -9775,22 +9784,22 @@ Cancelando la operación para evitar inconsistencias de biblioteca LibraryFeature - + Import Playlist Importar lista de reproducción - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Archivos de lista de reproducción (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? ¿Sobrescribir archivo? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10061,133 +10070,133 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Cargar pista al plato %1 - + Deck %1 is currently playing a track. El plato %1 está reproduciendo una pista. - + Are you sure you want to load a new track? ¿Está seguro de cargar una pista nueva? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control por vinilo. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control passthrough. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this microphone. Do you want to select an input device? No se ha seleccionado un dispositivo de Entrada para este micrófono. ¿Deseas escoger uno ahora? - + There is no input device selected for this auxiliary. Do you want to select an input device? No se ha seleccionado un dispositivo de entrada para este Auxiliar. ¿Deseas escoger uno ahora? - + Scan took %1 El escaneo tomo %1 - + No changes detected. No se han detectado cambios - - + + %1 tracks in total %1 pistas en total - + %1 new tracks found Encontradas %1 pistas nuevas - + %1 moved tracks detected %1 pistas movidas detectadas - + %1 tracks are missing (%2 total) %1 pistas perdidas (%2 en total) - + %1 tracks have been rediscovered %1 pistas han sido reencontradas - + Library scan finished Escaneo de la biblioteca terminado - + Error in skin file Error en el archivo de la apariencia - + The selected skin cannot be loaded. No se ha podido cargar la apariencia seleccionada. - + OpenGL Direct Rendering Renderizado directo de OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. El renderizado directo no está habilitado en su máquina. <br><br>Esto significa que las visualizaciones de forma de onda serán muy <br><b>lentas y pueden exigir mucho a su CPU</b>. Actualice su <br>configuración para habilitar la representación directa o desactiv<br> las visualizaciones de forma de onda en las preferencias de Mixxx seleccionando <br>"Vacío" como la pantalla de forma de onda en la sección 'Interfaz'. - - - + + + Confirm Exit Confirmar salida - + A deck is currently playing. Exit Mixxx? Un plato está reproduciendo. ¿Salir de Mixxx? - + A sampler is currently playing. Exit Mixxx? Un reproductor de muestras está en reproducción. ¿Salir de Mixxx? - + The preferences window is still open. La ventana de preferencias todavía está abierta. - + Discard any changes and exit Mixxx? ¿Descartar cambios y salir de Mixxx? @@ -10209,7 +10218,7 @@ Do you want to select an input device? - + Playlists Listas de reproducción @@ -10250,27 +10259,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Las listas de reproducción son listar ordenadas de pistas que te permiten planificar tus sesiones de DJ. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Podría ser necesario saltar algunas pistas en tu lista de reproducción planificada, o añadir algunas pistas diferentes, con el fin de mantener la energía de tu audiencia. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Algunos DJ preparan listas de reproducción antes de tocar en vivo, pero otros prefieren hacerlo en el momento. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Cuando uses una lista de reproducción en una actuación en vivo, recuerda siempre prestar mucha atención a cómo reacciona la audiencia con la música que has elegido reproducir. - + Create New Playlist Crear nueva lista de reproducción @@ -11931,7 +11940,7 @@ Consejo: compensa las voces de "ardillitas" o "gruñonas"La cantidad de amplificación aplicada a la señal de audio. A niveles más altos, el audio estará más distorsionado. - + Passthrough Paso @@ -14090,7 +14099,8 @@ Use this to change the sound of the track with EQ and filter effects. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - Modo seco + húmedo (línea seca plana): la perilla de mezcla agrega húmedo a seco. Use esto para cambiar solo la señal efectuada (húmeda) con EQ y efectos de filtro. + Modo Seco+Húmedo (línea seca plana): La perilla de mezcla agrega mojado a seco +Utiliza esto para cambiar únicamente la señal afectada (mojada) con EQ y efectos de filtrado. @@ -14639,7 +14649,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Right click hotcues to edit their labels and colors. - Clic derecho en hotcues para editar sus etiquetas y colores. + Click derecho en los accesos directos para editar sus etiquetas y colores. @@ -14754,7 +14764,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Changes the number of hotcue buttons displayed in the deck - Cambia el número de botones de acceso directo que se muestran en la cubierta + Cambia el número de botones de acceso directo mostrados en el deck @@ -15536,7 +15546,7 @@ Carpeta: %2 Edit cue label - + Editar etiqueta de marca @@ -15689,323 +15699,353 @@ Carpeta: %2 + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crear &nueva Playlist - + Create a new playlist Crear una nueva lista de reproducción - + Ctrl+n Ctrl+N - + Create New &Crate Crear un nuevo&cajón - + Create a new crate Crear un nuevo cajón - + Ctrl+Shift+N Ctrl+Mayús+N - - + + &View &Vista - + Auto-hide menu bar Auto-ocultar barra de menú - + Auto-hide the main menu bar when it's not used. Auto-ocultar la barra de menú principal cuando no es utilizada. - + May not be supported on all skins. Puede no estar disponible para todas las apariencias. - + Show Skin Settings Menu Mostrar menú de ajustes de aspecto - + Show the Skin Settings Menu of the currently selected Skin Mostrar el menú de ajustes de aspecto del seleccionado actualmente - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar seccion del microfono - + Show the microphone section of the Mixxx interface. Muestra la sección de control de micrófono de la interfaz de Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostrar la Sección de Control de Vinilo - + Show the vinyl control section of the Mixxx interface. Muestra la sección de control de vinilo de la interfaz de Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostrar el reproductor de preescucha - + Show the preview deck in the Mixxx interface. Muestra el reproductor de preescucha en la interfaz de Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Muestra carátulas - + Show cover art in the Mixxx interface. Muestra las carátulas en la interfaz de Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximizar la biblioteca para tomar todo el espacio disponible en pantalla. - + Space Menubar|View|Maximize Library Espacio - + &Full Screen &Pantalla completa - + Display Mixxx using the full screen Mostrar Mixxx a pantalla completa - + &Options &Opciones - + &Vinyl Control Control de &vinilo - + Use timecoded vinyls on external turntables to control Mixxx Usar vinilos con codigo de tiempo en bandejas externas para controlar Mixxx - + Enable Vinyl Control &%1 Habilita el Control por Vinilo &%1 - + &Record Mix &Grabar Mezcla - + Record your mix to a file Grava a súa mestura a un ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar transmisión en &vivo - + Stream your mixes to a shoutcast or icecast server Transmite tus mezclas a un servidor shoutcast o icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar Atajos de &Teclado - + Toggles keyboard shortcuts on or off Activa o desactiva los atajos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferencias - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambiar la configuración de Mixxx (p.ej.: reproducción, MIDI, controles) - + &Developer &Desarrollador - + &Reload Skin &Recargar apariencia - + Reload the skin Recargar la apariencia - + Ctrl+Shift+R Ctrl+Mayús+R - + Developer &Tools U&tilidades de desarrollador - + Opens the developer tools dialog Abre el cuadro de diálogo de herramientas de desarrollo - + Ctrl+Shift+T Ctrl+Mayús+T - + Stats: &Experiment Bucket Estadísticas: Contadores &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Activa el modo experimental. Recoje estadísticas en los contadores EXPERIMENT. - + Ctrl+Shift+E Ctrl+Mayús+E - + Stats: &Base Bucket Estadísticas: contadores &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Activa el modo base. Recoje estadísticas en los contadores BASE. - + Ctrl+Shift+B Ctrl+Mayús+B - + Deb&ugger Enabled Dep&uración activada - + Enables the debugger during skin parsing Activa el depurador durante el análisis de la máscara - + Ctrl+Shift+D Ctrl+Mayús+D - + &Help Ay&uda - + Show Keywheel menu title Mostrar rueda de notas @@ -16022,74 +16062,74 @@ Carpeta: %2 Exportar biblioteca al formato Engine DJ - + Show keywheel tooltip text Mostrar rueda de notas - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Soporte &comunitario - + Get help with Mixxx Obtener ayuda con Mixxx - + &User Manual Manual de &usuario - + Read the Mixxx user manual. Lea el manual de usuario de Mixxx. - + &Keyboard Shortcuts Atajos de &Teclado - + Speed up your workflow with keyboard shortcuts. Trabaja más rápidamente usando los atajos de teclado. - + &Settings directory &Directorio de configuración - + Open the Mixxx user settings directory. Abre el directorio de configuración de usuario de Mixxx. - + &Translate This Application &Traducir esta aplicación - + Help translate this application into your language. Ayude a traducir esta aplicación a su idioma. - + &About &Acerca de - + About the application Acerca de la aplicación @@ -16124,25 +16164,13 @@ Carpeta: %2 WSearchLineEdit - - Clear input - Clear the search bar input field - Borrar el texto - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Buscar - + Clear input Borrar el texto @@ -16153,93 +16181,87 @@ Carpeta: %2 Buscar... - + Clear the search bar input field Limpia el campo de entrada de la barra de búsqueda - - Enter a string to search for - Introducir el texto a buscar + + Return + Volver - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operadores como bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Para más información vea el Manual de Usuario> Biblioteca Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Atajo + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Poner el cursor aquí + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Tecla de retroceso + + Additional Shortcuts When Focused: + - Shortcuts - Atajos + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Volver + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Activa la búsqueda antes del tiempo de espera de "búsqueda mientras escribe" o salte a la vista de pistas después + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Espacio - + Toggle search history Shows/hides the search history entries Alternar historial de búsqueda - + Delete or Backspace Borrar o Retorno - - Delete query from history - Borrar Consulta del Historial - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Salir de la busqueda + + Delete query from history + Borrar Consulta del Historial @@ -17046,52 +17068,52 @@ Carpeta: %2 mixxx::CoreServices - + fonts tipos de letra - + database base de datos - + effects efectos - + audio interface interface de sonido - + decks - platos + decks - + library Biblioteca - + Choose music library directory Elija el directorio de la biblioteca de la música - + controllers Controladores - + Cannot open database No se puede abrir la base de datos - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -17241,7 +17263,7 @@ Pulse Aceptar para salir. No network access - + Sin conexión a la red diff --git a/res/translations/mixxx_es_MX.qm b/res/translations/mixxx_es_MX.qm index e3cb0052d4fa..968126c38cba 100644 Binary files a/res/translations/mixxx_es_MX.qm and b/res/translations/mixxx_es_MX.qm differ diff --git a/res/translations/mixxx_es_MX.ts b/res/translations/mixxx_es_MX.ts index 34b533950659..f0e558627127 100644 --- a/res/translations/mixxx_es_MX.ts +++ b/res/translations/mixxx_es_MX.ts @@ -1202,12 +1202,12 @@ trace - Arriba + Perfilar mensajes Equalizers - + Ecualizadores Vinyl Control - Control de vinilo + Control de Vinilos @@ -3649,32 +3649,32 @@ trace - Arriba + Perfilar mensajes ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La funcionalidad provista por este mapa de controlador será desactivada hasta que el problema sea resuelto. - + You can ignore this error for this session but you may experience erratic behavior. Puedes ignorar este error durante esta sesión, pero podrías experimentar problemas impredecibles. - + Try to recover by resetting your controller. Prueba de corregirlo reseteando la controladora. - + Controller Mapping Error Error del mapa de controlador - + The mapping for your controller "%1" is not working properly. El mapa de tu controlador "%1" no funciona correctamente. - + The script code needs to be fixed. El código del script necesita ser reparado. @@ -5684,6 +5684,16 @@ Apply settings and continue? Multi-Sampling Multi-Muestreo + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6298,62 +6308,62 @@ Siempre puedes arrastrar y tirar pistas en la pantalla para clonar una plataform DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. El tamaño mínimo de la apariencia seleccionada es mas grande que la resolucion de su pantalla. - + Allow screensaver to run Permite el salvapantallas - + Prevent screensaver from running Evita que se active el salvapantallas - + Prevent screensaver while playing Evita el salvapantallas mientras reproduce - + Disabled Desactivado - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Este skin no soporta esquemas de color - + Information Información - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx debe ser reiniciado para que el nuevo ajuste de locale, escalado o multi-muestreo tenga efecto. @@ -6390,7 +6400,7 @@ y te permite ajustar su pitch para lograr mezclas armónicas. Analyzer Settings - + Configuración del Analizador @@ -7884,7 +7894,7 @@ El objetivo de sonoridad es aproximado y asume que la preganancia de la pista y Turntable Input Signal Boost - Amplificación de señal de entrada de Vinilo + Aumento de la Señal de Entrada del Tornamesa @@ -9645,57 +9655,57 @@ Shown when VuMeter can not be displayed. Please keep de OpenGL. - + activate activar - + toggle conmutar - + right derecha - + left izquierda - + right small derecha pequeño - + left small izquierda pequeño - + up arriba - + down abajo - + up small arriba pequeño - + down small abajo pequeño - + Shortcut Atajo @@ -9774,22 +9784,22 @@ Cancelando la operación para evitar inconsistencias de biblioteca LibraryFeature - + Import Playlist Importar Lista de Reproducción - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Archivos de lista de reproducción (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? ¿Sobrescribir archivo? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10060,133 +10070,133 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Cargar pista al plato %1 - + Deck %1 is currently playing a track. El plato %1 está reproduciendo una pista. - + Are you sure you want to load a new track? ¿Está seguro de cargar una pista nueva? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control por vinilo. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. No hay ningún dispositivo de entrada seleccionado para el control passthrough. Por favor, seleccione un dispositivo de entrada en las preferencias de hardware de sonido. - + There is no input device selected for this microphone. Do you want to select an input device? No se ha seleccionado un dispositivo de Entrada para este micrófono. ¿Deseas escoger uno ahora? - + There is no input device selected for this auxiliary. Do you want to select an input device? No se ha seleccionado un dispositivo de entrada para este Auxiliar. ¿Deseas escoger uno ahora? - + Scan took %1 El escaneo tomo %1 - + No changes detected. No se han detectado cambios - - + + %1 tracks in total %1 pistas en total - + %1 new tracks found Encontradas %1 pistas nuevas - + %1 moved tracks detected %1 pistas movidas detectadas - + %1 tracks are missing (%2 total) %1 pistas perdidas (%2 en total) - + %1 tracks have been rediscovered %1 pistas han sido reencontradas - + Library scan finished Escaneo de la biblioteca terminado - + Error in skin file Error en el archivo de la apariencia - + The selected skin cannot be loaded. No se ha podido cargar la apariencia seleccionada. - + OpenGL Direct Rendering Renderizado directo de OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - El renderizado directo no está habilitado en su máquina. <br><br>Esto significa que las visualizaciones de forma de onda serán muy <br><b>lentas y pueden exigir mucho a su CPU</b>. Actualice su <br>configuración para habilitar la representación directa o desactiv<br> las visualizaciones de forma de onda en las preferencias de Mixxx seleccionando <br>"Vacío" como la pantalla de forma de onda en la sección 'Interfaz'. + El renderizado directo no está habilitado en tu máquina.<br><br>Esto significa que la pantalla de la forma de onda será muy <br><b>lenta y puede agobiar a tu CPU fuertemente</b>. Ya sea que actualices tu<br>configuración para habilitar renderizado directo, o deshabilitar<br>las pantallas de forma de onda en las preferencias de Mixxx seleccionando <br>"Vacío" como la pantalla de forma de onda en la sección 'Interface'. - - - + + + Confirm Exit Confirmar salida - + A deck is currently playing. Exit Mixxx? Un plato está reproduciendo. ¿Salir de Mixxx? - + A sampler is currently playing. Exit Mixxx? Un reproductor de muestras está en reproducción. ¿Salir de Mixxx? - + The preferences window is still open. La ventana de preferencias todavía está abierta. - + Discard any changes and exit Mixxx? ¿Descartar cambios y salir de Mixxx? @@ -10208,7 +10218,7 @@ Do you want to select an input device? - + Playlists Listas de reproducción @@ -10249,27 +10259,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Las listas de reproducción son listar ordenadas de pistas que te permiten planificar tus sesiones de DJ. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Podría ser necesario saltar algunas pistas en tu lista de reproducción planificada, o añadir algunas pistas diferentes, con el fin de mantener la energía de tu audiencia. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Algunos DJ preparan listas de reproducción antes de tocar en vivo, pero otros prefieren hacerlo en el momento. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Cuando uses una lista de reproducción en una actuación en vivo, recuerda siempre prestar mucha atención a cómo reacciona la audiencia con la música que has elegido reproducir. - + Create New Playlist Crear una nueva lista de reproducción @@ -11930,7 +11940,7 @@ Consejo: compensa las voces de "ardillas" o "gruñonas"La cantidad de amplificación aplicada a la señal de audio. A niveles más altos, el audio estará más distorsionado. - + Passthrough Paso @@ -14755,7 +14765,7 @@ Utiliza esto para cambiar únicamente la señal afectada (mojada) con EQ y efect Changes the number of hotcue buttons displayed in the deck - Cambia el número de botones de acceso directo que se muestran en la cubierta + Cambia el número de botones de acceso directo mostrados en el deck @@ -15690,323 +15700,353 @@ Carpeta: %2 + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crear &nueva Playlist - + Create a new playlist Crear una nueva lista de reproducción - + Ctrl+n Ctrl+N - + Create New &Crate Crear un nuevo&cajón - + Create a new crate Crear un nuevo cajón - + Ctrl+Shift+N Ctrl+Mayús+N - - + + &View &Vista - + Auto-hide menu bar Auto-ocultar barra de menú - + Auto-hide the main menu bar when it's not used. Auto-ocultar la barra de menú principal cuando no es utilizada. - + May not be supported on all skins. Puede no estar disponible para todas las apariencias. - + Show Skin Settings Menu Mostrar menú de ajustes de aspecto - + Show the Skin Settings Menu of the currently selected Skin Mostrar la configuración actual del menu de tema - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar seccion del microfono - + Show the microphone section of the Mixxx interface. Muestra la sección de control de micrófono de la interfaz de Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostrar la Sección de Control de Vinilo - + Show the vinyl control section of the Mixxx interface. Muestra la sección de control de vinilo de la interfaz de Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostrar el reproductor de preescucha - + Show the preview deck in the Mixxx interface. Muestra el reproductor de preescucha en la interfaz de Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Muestra carátulas - + Show cover art in the Mixxx interface. Muestra las carátulas en la interfaz de Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximizar la biblioteca para tomar todo el espacio disponible en pantalla. - + Space Menubar|View|Maximize Library Espacio - + &Full Screen &Pantalla completa - + Display Mixxx using the full screen Mostrar Mixxx a pantalla completa - + &Options &Opciones - + &Vinyl Control Control de &vinilo - + Use timecoded vinyls on external turntables to control Mixxx Usar vinilos con codigo de tiempo en bandejas externas para controlar Mixxx - + Enable Vinyl Control &%1 Habilita el Control por Vinilo &%1 - + &Record Mix &Grabar Mezcla - + Record your mix to a file Grava a súa mestura a un ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar transmisión en &vivo - + Stream your mixes to a shoutcast or icecast server Transmite tus mezclas a un servidor shoutcast o icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar Atajos de &Teclado - + Toggles keyboard shortcuts on or off Activa o desactiva los atajos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferencias - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambiar la configuración de Mixxx (p.ej.: reproducción, MIDI, controles) - + &Developer &Desarrollador - + &Reload Skin &Recargar apariencia - + Reload the skin Recargar la apariencia - + Ctrl+Shift+R Ctrl+Mayús+R - + Developer &Tools U&tilidades de desarrollador - + Opens the developer tools dialog Abre el cuadro de diálogo de herramientas de desarrollo - + Ctrl+Shift+T Ctrl+Mayús+T - + Stats: &Experiment Bucket Estadísticas: Contadores &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Activa el modo experimental. Recoje estadísticas en los contadores EXPERIMENT. - + Ctrl+Shift+E Ctrl+Mayús+E - + Stats: &Base Bucket Estadísticas: contadores &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Activa el modo base. Recoje estadísticas en los contadores BASE. - + Ctrl+Shift+B Ctrl+Mayús+B - + Deb&ugger Enabled Dep&uración activada - + Enables the debugger during skin parsing Activa el depurador durante el análisis de la máscara - + Ctrl+Shift+D Ctrl+Mayús+D - + &Help Ay&uda - + Show Keywheel menu title Mostrar rueda de notas @@ -16023,74 +16063,74 @@ Carpeta: %2 Exportar biblioteca al formato Engine DJ - + Show keywheel tooltip text Mostrar rueda de notas - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Soporte &comunitario - + Get help with Mixxx Obtener ayuda con Mixxx - + &User Manual Manual de &usuario - + Read the Mixxx user manual. Lea el manual de usuario de Mixxx. - + &Keyboard Shortcuts Atajos de &Teclado - + Speed up your workflow with keyboard shortcuts. Trabaja más rápidamente usando los atajos de teclado. - + &Settings directory &Directorio de configuración - + Open the Mixxx user settings directory. Abre el directorio de configuración de usuario de Mixxx. - + &Translate This Application &Traducir esta aplicación - + Help translate this application into your language. Ayude a traducir esta aplicación a su idioma. - + &About &Acerca de - + About the application Acerca de la aplicación @@ -16125,25 +16165,13 @@ Carpeta: %2 WSearchLineEdit - - Clear input - Clear the search bar input field - Borrar el texto - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Buscar - + Clear input Borrar el texto @@ -16154,93 +16182,87 @@ Carpeta: %2 Buscar... - + Clear the search bar input field Limpia el campo de entrada de la barra de búsqueda - - Enter a string to search for - Introducir el texto a buscar + + Return + Volver - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Use operadores como bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Para más información vea el Manual de Usuario> Biblioteca Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Atajo + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Poner el cursor aquí + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Tecla de retroceso + + Additional Shortcuts When Focused: + - Shortcuts - Atajos + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Volver + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Activa la búsqueda antes del tiempo de espera de "búsqueda mientras escribe" o salte a la vista de pistas después + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Espacio - + Toggle search history Shows/hides the search history entries Alternar historial de búsqueda - + Delete or Backspace Borrar o Retorno - - Delete query from history - Borrar Consulta del Historial - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Salir de la busqueda + + Delete query from history + Borrar Consulta del Historial @@ -17047,52 +17069,52 @@ Carpeta: %2 mixxx::CoreServices - + fonts tipos de letra - + database base de datos - + effects efectos - + audio interface interface de sonido - + decks - platos + decks - + library Biblioteca - + Choose music library directory Elija el directorio de la biblioteca de la música - + controllers Controladores - + Cannot open database No se puede abrir la base de datos - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_et.qm b/res/translations/mixxx_et.qm index 656f2f55076e..99f097fc329a 100644 Binary files a/res/translations/mixxx_et.qm and b/res/translations/mixxx_et.qm differ diff --git a/res/translations/mixxx_et.ts b/res/translations/mixxx_et.ts index 60170e09d075..97608bbe9fe6 100644 --- a/res/translations/mixxx_et.ts +++ b/res/translations/mixxx_et.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source - + Auto DJ Automaatne DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -147,28 +147,28 @@ BasePlaylistFeature - + New Playlist Uus esitusnimekiri - + Add to Auto DJ Queue (bottom) Lisa auto-DJ järjekorda (alla) - + Create New Playlist Loo uus esitusloend - + Add to Auto DJ Queue (top) Lisa auto-DJ järjekorda (üles) - + Remove Eemalda @@ -178,12 +178,12 @@ Nimeta ümber - + Lock Lukus - + Duplicate duplikaat @@ -204,24 +204,24 @@ Analüüsi terve esitusloend - + Enter new name for playlist: Sisesta uus nimi esitusloendile: - + Duplicate Playlist - - + + Enter name for new playlist: Sisesta uue esitusloendi nimi: - + Export Playlist Ekspordi esitusloend @@ -231,70 +231,77 @@ - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Muuda esitusloendi nime - - + + Renaming Playlist Failed Esitusloendi ümbernimetamine nurjus - - - + + + A playlist by that name already exists. Selle nimega esitusloend juba eksisteerib. - - - + + + A playlist cannot have a blank name. Esitusloend ei saa olla nimeta. - + _copy //: Appendix to default name when duplicating a playlist _kopeeri - - - - - - + + + + + + Playlist Creation Failed Esitusloendi loomine nurjus - - + + An unknown error occurred while creating playlist: Teadmatu viga tekkis esitusloendi tegemisel: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U Esitusloend (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Esitusloend (*.m3u);;M3U8 Esitusloend (*.m3u8);;PLSEsitusloend (*.pls);;Tekst CSV (*.csv);;Loetav tekst (*.txt) @@ -302,12 +309,12 @@ BaseSqlTableModel - + # Nr - + Timestamp Ajatempel @@ -315,7 +322,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Ei suuda lugu laadida. @@ -323,137 +330,142 @@ BaseTrackTableModel - + Album Album - + Album Artist Albumi esitaja - + Artist Esitaja - + Bitrate Bitikiirus - + BPM Lööki minutis - + Channels Kanalid - + Color - + Comment Märkus - + Composer Helilooja - + Cover Art Katte kunst - + Date Added Lisamise kuupäev - + Last Played - + Duration Kestus - + Type Tüüp - + Genre Žanr - + Grouping Rühmitamine - + Key Helistik - + Location Asukoht - + + Overview + + + + Preview Eelvaade - + Rating Hinnang - + ReplayGain - + Samplerate - + Played Mängitud - + Title Pealkiri - + Track # Lugu nr - + Year Aasta - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -541,67 +553,77 @@ BrowseFeature - + Add to Quick Links Lisa otselinkidesse - + Remove from Quick Links Eemalda otselinkidest - + Add to Library Lisa kogumikku - + Refresh directory tree - + Quick Links Kiirlingid - - + + Devices Seadmed - + Removable Devices Eemaldatavad seadmed - - + + Computer Arvuti - + Music Directory Added Muusikakataloog edukalt lisatud - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan Skänni - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -747,87 +769,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -837,27 +859,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1039,13 +1066,13 @@ trace - Above + Profiling messages - + Set to full volume Sea volüüm maksimumile - + Set to zero volume Sea volüüm nulli @@ -1070,13 +1097,13 @@ trace - Above + Profiling messages - + Headphone listen button Kõrvaklappidega kuulamise nupp - + Mute button Vaigistusnupp @@ -1087,25 +1114,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1146,22 +1173,22 @@ trace - Above + Profiling messages - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1171,193 +1198,193 @@ trace - Above + Profiling messages Ekvalaiserid - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1473,20 +1500,20 @@ trace - Above + Profiling messages - - + + Volume Fader - + Full Volume Täisvolüüm - + Zero Volume Nullvolüüm @@ -1502,7 +1529,7 @@ trace - Above + Profiling messages - + Mute Vaigista @@ -1513,7 +1540,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1534,25 +1561,25 @@ trace - Above + Profiling messages - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1622,82 +1649,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1738,451 +1765,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Lisa auto-DJ järjekorda (alla) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Lisa auto-DJ järjekorda (üles) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects Efektid - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle Lülita - + Toggle the current effect Lülita praegust efekti - + Next Järgmine - + Switch to next effect - + Previous Eelmine - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain Tugevus - + Gain knob Helitugevuse nupp - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle Auto DJ lüliti - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2197,102 +2224,102 @@ trace - Above + Profiling messages Kõrvaklappide tundlikkus - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2444,1041 +2471,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Mikrofon sees/väljas - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Automaatne DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface Kasutajaliides - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide Eelvaate Rada kuva/peida - + Show/hide the preview deck Kuva/peida eelvaate rada - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3593,32 +3642,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3662,13 +3711,13 @@ trace - Above + Profiling messages CrateFeature - + Remove Eemalda - + Create New Crate @@ -3678,132 +3727,132 @@ trace - Above + Profiling messages Nimeta ümber - - + + Lock Lukus - + Export Crate as Playlist - + Export Track Files - + Duplicate duplikaat - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Plaadikastid - - + + Import Crate Impordi kast - + Export Crate Ekspordi kast - + Unlock Võta lukust lahti - + An unknown error occurred while creating crate: Plaadikasti loomisel esines tundmatu viga: - + Rename Crate Nimeta plaadikast ümber - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Plaadikasti ümbernimetamine ebaõnnestus - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Esitusloend (*.m3u);;M3U8 Esitusloend (*.m3u8);;PLSEsitusloend (*.pls);;Tekst CSV (*.csv);;Loetav tekst (*.txt) - + M3U Playlist (*.m3u) M3U Esitusloend (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Plaadikasti nimi ei saa olla tühi. - + A crate by that name already exists. Sellise nimega kast on juba olemas. @@ -3898,12 +3947,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -4022,72 +4071,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Hüpe - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Sekundid - + Auto DJ Fade Modes Full Intro + Outro: @@ -4118,80 +4167,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat Kordus - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Automaatne DJ - + Shuffle Juhuesitus - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4414,37 +4463,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> <i>Valmis õppima %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4483,17 +4532,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -5146,113 +5195,113 @@ associated with each key. DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Pole - + %1 by %2 %1 - %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting Tõrkeotsing - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5265,105 +5314,105 @@ Apply settings and continue? Kontrolleri nimi - + Enabled Lubatud - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Kirjeldus: - + Support: Toetus: - + Screens preview - + Input Mappings - - + + Search - - + + Add Lisa - - + + Remove Eemalda @@ -5378,22 +5427,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: Autor: - + Name: Nimi: @@ -5403,28 +5452,28 @@ Apply settings and continue? - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Tühjenda kõik - + Output Mappings @@ -5583,6 +5632,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6174,62 +6233,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Info - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7396,173 +7455,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Lubatud - + Stereo Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Seadistamise viga @@ -7580,131 +7638,131 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate Diskreetimissagedus - + Audio Buffer Audiopuhver - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms 20 ms - + Buffer Underflow Count - + 0 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Väljund - + Input Sisend - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7859,27 +7917,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7892,250 +7951,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate Kaadrisagedus - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low Madal - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies - + Visual gain of the low frequencies - + High Kõrge - + Global visual gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8143,47 +8208,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware - + Controllers Kontrollerid - + Library Fonoteek - + Interface Liides - + Waveforms - + Mixer Miksija - + Auto DJ Automaatne DJ - + Decks - + Colors @@ -8218,47 +8283,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Efektid - + Recording Salvestamine - + Beat Detection - + Key Detection Helistiku tuvastamine - + Normalization Normaliseerimine - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control - + Live Broadcasting - + Modplug Decoder @@ -8291,22 +8356,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Alusta salvestamist - + Recording to file: - + Stop Recording Peata salvestamine - + %1 MiB written in %2 @@ -8614,284 +8679,284 @@ This can not be undone! Summaarne - + Filetype: Failitüüp: - + BPM: Tempo: - + Location: Asukoht: - + Bitrate: Bitikiirus: - + Comments - + BPM Lööki minutis - + Sets the BPM to 75% of the current value. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Lugu nr - + Album Artist Albumi esitaja - + Composer Helilooja - + Title Pealkiri - + Grouping Rühmitamine - + Key Helistik - + Year Aasta - + Artist Esitaja - + Album Album - + Genre Žanr - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM Topelt BPM - + Halve BPM Pool BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous &Eelmine - + Move to the next item. "Next" button - + &Next &Järgmine - + Duration: Kestvus: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser Ava failisirvias - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Rakenda - + &Cancel &Katkesta - + (no color) @@ -9048,7 +9113,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9250,27 +9315,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9414,38 +9479,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes iTunes - + Select your iTunes library - + (loading) iTunes - + Use Default Library - + Choose Library... - + Error Loading iTunes Library - + There was an error loading your iTunes library. Check the logs for details. @@ -9453,12 +9518,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9466,18 +9531,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9485,15 +9550,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9504,57 +9569,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate aktiveeri - + toggle lüliti - + right paremale - + left vasakule - + right small - + left small - + up üles - + down alla - + up small - + down small - + Shortcut Otsetee @@ -9562,62 +9627,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9627,22 +9692,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Impordi esitusloend - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Esitusloendi failid (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9689,27 +9754,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9769,18 +9834,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Kadunud lood - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9792,208 +9857,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry Proovi uuesti - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Seadista uuesti - + Help Abi - - + + Exit Välju - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue Jätka - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? Oled sa kindel, et tahad laadida uue loo? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Kinnita väljumine - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10009,13 +10115,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Lukus - - + + Playlists Esitusloendid @@ -10025,32 +10131,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Võta lukust lahti - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Loo uus esitusloend @@ -11541,7 +11673,7 @@ Fully right: end of the effect period - + Deck %1 Rada %1 @@ -11674,7 +11806,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11705,7 +11837,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11838,12 +11970,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11878,42 +12010,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11971,54 +12103,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Esitusloendid - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12153,19 +12285,19 @@ may introduce a 'pumping' effect and/or distortion. Lukus - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12577,7 +12709,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12759,7 +12891,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Katte kunst @@ -12995,197 +13127,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13423,924 +13555,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle Lülita - + Toggle the current effect. - + Next Järgmine - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Eelmine - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse Vastupidi - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Mängi/peata - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14475,33 +14615,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) (mängides) @@ -14521,205 +14661,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (peatamise ajal) - + Cue - + Headphone Kõrvaklapid - + Mute Vaigista - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. Kui ükski rada ei mängi, sünkroniseerub esimese rajaga millel on BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock Kell - + Displays the current time. Jooksva aja kuvamine. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14764,254 +14914,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward Kiiresti edasi - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat Kordus - + When active the track will repeat if you go past the end or reverse before the start. - + Eject Väljasta - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration Loo kestvus - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist Loo esitaja - + Displays the artist of the loaded track. - + Track Title Loo pealkiri - + Displays the title of the loaded track. - + Track Album Album - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -15019,12 +15169,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15032,47 +15182,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15244,47 +15389,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15408,407 +15553,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view + + + + + Ctrl+f - + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist Uue esitusnimekirja loomine - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Vaade - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library Tühik - + &Full Screen &Täisekraan - + Display Mixxx using the full screen - + &Options &Seaded - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Luba &klaviatuuri otseteed - + Toggles keyboard shortcuts on or off Lülitab klaviatuuri otseteed sisse või välja - + Ctrl+` Ctrl+` - + &Preferences &Valikud - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Arendaja &Tööriistad - + Opens the developer tools dialog - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Abi - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual &Kasutusjuhend - + Read the Mixxx user manual. - + &Keyboard Shortcuts &Klaviatuuri Otseteed - + Speed up your workflow with keyboard shortcuts. Kiirenda oma tööd kasutades klaviatuuri otseteid. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Tõlgi see rakendus - + Help translate this application into your language. - + &About &Teave - + About the application Teave rakendusest @@ -15816,25 +15992,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15843,25 +16019,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun - + Clear input @@ -15872,169 +16036,163 @@ This can not be undone! Otsi... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Otsetee + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Nupp - + harmonic with %1 - + BPM Lööki minutis - + between %1 and %2 - + Artist Esitaja - + Album Artist Albumi esitaja - + Composer Helilooja - + Title Pealkiri - + Album Album - + Grouping Rühmitamine - + Year Aasta - + Genre Žanr - + Directory - + &Search selected @@ -16042,599 +16200,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck Rada - + Sampler - + Add to Playlist Lisa esitusnimekirja - + Crates Plaadikastid - + Metadata - + Update external collections - + Cover Art Katte kunst - + Adjust BPM - + Select Color - - + + Analyze Analüüsi - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Lisa auto-DJ järjekorda (alla) - + Add to Auto DJ Queue (top) Lisa auto-DJ järjekorda (üles) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Eemalda - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Seaded - + Open in File Browser Ava failisirvias - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Hinnang - + Cue Point - + + Hotcues - + Intro - + Outro - + Key Nupp - + ReplayGain - + Waveform - + Comment Märkus - + All Kõik - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM Lukusta BPM - + Unlock BPM Eemalda BMP lukk - + Double BPM Topelt BPM - + Halve BPM Pool BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Rada %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Loo uus esitusloend - + Enter name for new playlist: Sisesta uue esitusloendi nimi: - + New Playlist Uus esitusnimekiri - - - + + + Playlist Creation Failed Esitusloendi loomine nurjus - + A playlist by that name already exists. Selle nimega esitusloend juba eksisteerib. - + A playlist cannot have a blank name. Esitusloend ei saa olla nimeta. - + An unknown error occurred while creating playlist: Teadmatu viga tekkis esitusloendi tegemisel: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Katkesta - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Sulge - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16650,37 +16834,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16688,37 +16872,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16726,60 +16910,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Näita või peida tulpasi. + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database Ei suuda avada andmebaasi - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16790,67 +16979,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Sirvi - + Export directory - + Database version - + Export Ekspordi - + Cancel Katkesta - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16871,7 +17071,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16881,23 +17081,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_eu.qm b/res/translations/mixxx_eu.qm index e0f1210c84d2..58e6770a719a 100644 Binary files a/res/translations/mixxx_eu.qm and b/res/translations/mixxx_eu.qm differ diff --git a/res/translations/mixxx_eu.ts b/res/translations/mixxx_eu.ts index 2b80212ca903..518820c3c7f6 100644 --- a/res/translations/mixxx_eu.ts +++ b/res/translations/mixxx_eu.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Kendu kaxa pistaren iturri bezala - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Gehitu kaxa pistaren iturri bezala @@ -149,28 +149,28 @@ BasePlaylistFeature - + New Playlist Erreprodukzio-zerrenda berria - + Add to Auto DJ Queue (bottom) Gehitu Auto DJ ilarara (bukaeran) - + Create New Playlist Erreprodukzio-zerrenda berria sortu - + Add to Auto DJ Queue (top) Gehitu Auto DJ ilarara (hasieran) - + Remove Kendu @@ -180,12 +180,12 @@ Berrizendatu - + Lock Blokeatu - + Duplicate Bikoiztu @@ -206,24 +206,24 @@ Erreprodukzio-zerrenda osoa aztertu - + Enter new name for playlist: Erreprodukzio-zerrendaren izen berria sartu: - + Duplicate Playlist Bikoiztu erreprodukzio-zerrenda - - + + Enter name for new playlist: Erreprodukzio-zerrenda berriaren izena sartu: - + Export Playlist Esportatu erreprodukzio-zerrenda @@ -233,70 +233,77 @@ - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Berrizendatu erreprodukzio-zerrenda - - + + Renaming Playlist Failed Ezin izan da erreprodukzio-zerrenda berrizendatu - - - + + + A playlist by that name already exists. Badago izen bereko beste erreproduzkio-zerrenda bat - - - + + + A playlist cannot have a blank name. Erreprodukzio-Zerrenda batek ezin du izen hutsik izan - + _copy //: Appendix to default name when duplicating a playlist - - - - - - + + + + + + Playlist Creation Failed Ezin izan da erreprodukzio-zerrenda sortu - - + + An unknown error occurred while creating playlist: Errore ezezagun bat gertatu da erreprodukzio zerrenda sortzean: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U erreproduzio-zerrenda (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U erreprodukzio-zerrenda (*.m3u);;M3U8 erreprodukzio-zerrenda (*.m3u8);;PLS erreprodukzio-zerrenda (*.pls);;CSV testua (*.csv);;Testu hutsa (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Denbora-marka @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Ezin izan da pista kargatu @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Albuma - + Album Artist Albumaren artista - + Artist Artista - + Bitrate Bit tasa - + BPM BPM - + Channels Kanalak - + Color Kolorea - + Comment Iruzkina - + Composer Konpositorea - + Cover Art Azalaren irudia - + Date Added Gehitze-data: - + Last Played - + Duration Iraupena - + Type Mota - + Genre Generoa - + Grouping Taldeka - + Key Tonalitatea - + Location Kokalekua - + + Overview + + + + Preview Aurreikusi - + Rating Balorazioa - + ReplayGain ReplayGain - + Samplerate - + Played Jotakoak - + Title Titulua - + Track # Pista-zenbakia - + Year Urtea - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Gehitu esteka azkarretara - + Remove from Quick Links Kendu esteka azkarretatik - + Add to Library Liburutegira gehitu - + Refresh directory tree - + Quick Links Esteka azkarrak - - + + Devices Gailuak - + Removable Devices Gailu aldagarriak - - + + Computer Ordenagailua - + Music Directory Added Musika-direktorioa gehitu da - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -749,87 +771,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -839,27 +861,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1041,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume - + Set to zero volume @@ -1072,13 +1099,13 @@ trace - Above + Profiling messages - + Headphone listen button - + Mute button @@ -1089,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1148,22 +1175,22 @@ trace - Above + Profiling messages - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1173,193 +1200,193 @@ trace - Above + Profiling messages Ekualizadoreak - + Vinyl Control Binilo kontrola - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop Sortu %1-taupada begizta - + Create temporary %1-beat loop roll Sortu behin behineko %1-taupada begizta erroilua @@ -1475,20 +1502,20 @@ trace - Above + Profiling messages - - + + Volume Fader - + Full Volume - + Zero Volume @@ -1504,7 +1531,7 @@ trace - Above + Profiling messages - + Mute @@ -1515,7 +1542,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1536,25 +1563,25 @@ trace - Above + Profiling messages - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1624,82 +1651,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid Doitu taupada sarea - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1740,451 +1767,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve Begizta erdibitu - + Loop Double Begizta bikoiztu - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Gehitu Auto DJ ilarara (bukaeran) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Gehitu Auto DJ ilarara (hasieran) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track Kargatu aukeratutako pista - + Load selected track and play Kargatu aukeratutako pista eta erreproduzitu - - + + Record Mix - + Toggle mix recording - + Effects Efektuak - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Hurrengoa - + Switch to next effect - + Previous Aurrekoa - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain Irabazia - + Gain knob Irabazi kisketa - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2199,102 +2226,102 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2446,1041 +2473,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Mikrofonoa on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface Erabiltzaile interfazea - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3595,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3664,13 +3713,13 @@ trace - Above + Profiling messages CrateFeature - + Remove Kendu - + Create New Crate @@ -3680,132 +3729,132 @@ trace - Above + Profiling messages Berrizendatu - - + + Lock Blokeatu - + Export Crate as Playlist - + Export Track Files Pisten fitxategiak esportatu - + Duplicate Bikoiztu - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Kaxak - - + + Import Crate Inportatu kaxa - + Export Crate Esportatu kaxa - + Unlock Desblokeatu - + An unknown error occurred while creating crate: Errore ezezagun bat gertatu da kaxa sortzean: - + Rename Crate Berrizendatu kaxa - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Ezin inan da kaxa berrizendatu - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U erreprodukzio-zerrenda (*.m3u);;M3U8 erreprodukzio-zerrenda (*.m3u8);;PLS erreprodukzio-zerrenda (*.pls);;CSV testua (*.csv);;Testu hutsa (*.txt) - + M3U Playlist (*.m3u) M3U erreproduzio-zerrenda (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. Kaxak DJ bezala erabili nahi duzun musika antolatzeko bikainak dira - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! Kaxak zure musika nahieran antolatzea baimentzen dizute! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Kaxa batek ezin du izena hutsik izan - + A crate by that name already exists. Izen hori duen beste kaxa bat bada @@ -3900,12 +3949,12 @@ trace - Above + Profiling messages Lehengo - + Official Website - + Donate @@ -4024,72 +4073,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Jauzi - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Segundoak - + Auto DJ Fade Modes Full Intro + Outro: @@ -4120,80 +4169,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat Errepikatu - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Auto DJ - + Shuffle Nahastu - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4416,37 +4465,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4485,17 +4534,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -5148,113 +5197,113 @@ associated with each key. DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Bat ere ez - + %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5267,105 +5316,105 @@ Apply settings and continue? - + Enabled Gaitua - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: - + Support: - + Screens preview - + Input Mappings - - + + Search - - + + Add Gehitu - - + + Remove Kendu @@ -5380,22 +5429,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5405,28 +5454,28 @@ Apply settings and continue? - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Garbitu dena - + Output Mappings @@ -5585,6 +5634,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6176,62 +6235,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Informazioa - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7398,173 +7457,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Gaitua - + Stereo Estereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Konfigurazio-errorea @@ -7582,131 +7640,131 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate Lagintze-maiztasuna - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Irteera - + Input Sarrera - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7861,27 +7919,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7894,250 +7953,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low Grabea - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies - + Visual gain of the low frequencies - + High Agudoa - + Global visual gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8145,47 +8210,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Soinu Hardware-a - + Controllers - + Library Liburutegia - + Interface Interfazea - + Waveforms - + Mixer Nahastailea - + Auto DJ Auto DJ - + Decks - + Colors @@ -8220,47 +8285,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Efektuak - + Recording Grabaketa - + Beat Detection Taupada Detekzioa - + Key Detection - + Normalization Normalizatu - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Binilo kontrola - + Live Broadcasting - + Modplug Decoder @@ -8293,22 +8358,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Grabatzen hasi - + Recording to file: - + Stop Recording Grabaketa gelditu - + %1 MiB written in %2 @@ -8616,284 +8681,284 @@ This can not be undone! Laburpena - + Filetype: - + BPM: BPM: - + Location: Kokapena: - + Bitrate: Bit-tasa: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Pista-zenbakia - + Album Artist Albumaren artista - + Composer Konpositorea - + Title Titulua - + Grouping Taldeka - + Key Tonalitatea - + Year Urtea - + Artist Artista - + Album Albuma - + Genre Generoa - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM Bikoiztu BPMa - + Halve BPM Erdibitu BPMa - + Clear BPM and Beatgrid Garbitu BPM eta taupada sarea - + Move to the previous item. "Previous" button - + &Previous &Aurrekoa - + Move to the next item. "Next" button - + &Next &Hurrengoa - + Duration: Iraupena: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser Ireki fitxategi kudeatzailean - + Samplerate: - + Track BPM: Pistaren BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat Erritmora klikatu - + Hint: Use the Library Analyze view to run BPM detection. Aholkua: Liburutegiko Analizatu ikuspegia erabili BPM detekzioa abiarazteko. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Aplikatu - + &Cancel &Ezeztatu - + (no color) @@ -9050,7 +9115,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9252,27 +9317,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9416,38 +9481,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes iTunes - + Select your iTunes library Aukeratu zure iTunes liburutegia - + (loading) iTunes (kargatzen) iTunes - + Use Default Library Lehenetsitako liburutegia erabili - + Choose Library... Liburutegia aukeratu - + Error Loading iTunes Library Errorea iTunes Liburutegia kargatzerakoan - + There was an error loading your iTunes library. Check the logs for details. @@ -9455,12 +9520,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9468,18 +9533,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9487,15 +9552,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9506,57 +9571,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate aktibatu - + toggle - + right eskuina - + left ezkerra - + right small - + left small - + up gora - + down behera - + up small - + down small - + Shortcut Lasterbidea @@ -9564,62 +9629,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9629,22 +9694,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Inportatu erreprodukzio-zerrenda - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Erreprodukzio-zerrenda fitxategiak (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9691,27 +9756,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9771,18 +9836,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9794,208 +9859,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. Laguntza<b>Eskuratu</b> Mixxx wikitik. - - - + + + <b>Exit</b> Mixxx. <b>atera</b> Mixxx-etik. - + Retry Berriz saiatu - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Birkonfiguratu - + Help Laguntza - - + + Exit Irten - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue Jarraitu - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Irtetzea konfirmatu - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10011,13 +10117,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Blokeatu - - + + Playlists Erreprodukzio-zerrendak @@ -10027,32 +10133,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Desblokeatu - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Erreprodukzio-zerrenda berria sortu @@ -11543,7 +11675,7 @@ Fully right: end of the effect period - + Deck %1 @@ -11676,7 +11808,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11707,7 +11839,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11840,12 +11972,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11880,42 +12012,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11973,54 +12105,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Erreprodukzio-zerrendak - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12155,19 +12287,19 @@ may introduce a 'pumping' effect and/or distortion. Blokeatu - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12579,7 +12711,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12761,7 +12893,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Azalaren irudia @@ -12997,197 +13129,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13425,924 +13557,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank Sampler Bankua Gorde - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank Kargatu Sampler Bankua - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next Hurrengoa - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Aurrekoa - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Doitu taupada sarea - + Adjust beatgrid so the closest beat is aligned with the current play position. Doitu taupada sarea taupada hurbilena oraingo erreprodukzio posizioarekin lerrokatu dadin. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14477,33 +14617,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14523,205 +14663,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue - + Headphone - + Mute - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock Erlojua - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14766,254 +14916,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward Aurreratze azkarra - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat Errepikatu - + When active the track will repeat if you go past the end or reverse before the start. - + Eject Egotzi - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve Begizta erdibitu - + Halves the current loop's length by moving the end marker. Uneko begiztaren luzera erdibitzen du bukaera marka mugituz. - + Deck immediately loops if past the new endpoint. Erreproduzigailua berehala begiztatzen du bukaera puntua igarotakoan. - + Loop Double Begizta bikoiztu - + Doubles the current loop's length by moving the end marker. Uneko begiztaren luzera bikoizten du bukaera marka mugituz. - + Beatloop Taupada begizta - + Toggles the current loop on or off. Uneko begizta gaitu ala desgaitzen du - + Works only if Loop-In and Loop-Out marker are set. Begizta sarrera eta begizta irteera markak ezarrita badaude dabil soilik. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist Pistaren artista - + Displays the artist of the loaded track. - + Track Title Pistaren izenburua - + Displays the title of the loaded track. - + Track Album Albuma - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -15021,12 +15171,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15034,47 +15184,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15246,47 +15391,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15410,407 +15555,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view + + + + + Ctrl+f - + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist Sortu erreprodukzio-zerrenda berria - + Ctrl+n - + Create New &Crate - + Create a new crate Sortu kaxa berria - + Ctrl+Shift+N - - + + &View &Ikusi - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen &Pantaila osoa - + Display Mixxx using the full screen Erakutsi Mixxx pantaila osoa erabiliz - + &Options &Aukerak - + &Vinyl Control &Binilo Kontrola - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix &Nahasketa Grabatu - + Record your mix to a file Zure Nahasketa Fitxategi Batean Gorde - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences &Hobespenak - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help &Laguntza - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support &Komunitatearen Laguntza - + Get help with Mixxx - + &User Manual &Erabiltzaile Liburua - + Read the Mixxx user manual. Mixxx-en erabiltzaile liburua irakurri - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application Aplikazio Hau &Itzuli - + Help translate this application into your language. Lagundu aplikazio hau zure hizkuntzara itzultzen - + &About &Honi buruz - + About the application Aplikazioari buruz @@ -15818,25 +15994,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15845,25 +16021,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun - + Clear input @@ -15874,169 +16038,163 @@ This can not be undone! Bilatu... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Lasterbidea + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Tonalitatea - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Artista - + Album Artist Albumaren artista - + Composer Konpositorea - + Title Titulua - + Album Albuma - + Grouping Taldeka - + Year Urtea - + Genre Generoa - + Directory - + &Search selected @@ -16044,599 +16202,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist Gehitu erreprodukzio-zerrendara - + Crates Kaxak - + Metadata - + Update external collections - + Cover Art Azalaren irudia - + Adjust BPM - + Select Color - - + + Analyze Aztertu - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Gehitu Auto DJ ilarara (bukaeran) - + Add to Auto DJ Queue (top) Gehitu Auto DJ ilarara (hasieran) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Kendu - + Remove from Playlist - + Remove from Crate - + Hide from Library Liburutegitik ezkutatu - + Unhide from Library Liburutegitik ezkutatzeari utzi - + Purge from Library Kendu liburutegitik - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Propietateak - + Open in File Browser Ireki fitxategi kudeatzailean - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Balorazioa - + Cue Point - + + Hotcues - + Intro - + Outro - + Key Tonalitatea - + ReplayGain ReplayGain - + Waveform - + Comment Iruzkina - + All Guztiak - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM - + Unlock BPM - + Double BPM Bikoiztu BPMa - + Halve BPM Erdibitu BPMa - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Erreprodukzio-zerrenda berria sortu - + Enter name for new playlist: Idatzi erreprodukzio-zerrendaren izena - + New Playlist Erreprodukzio-zerrenda berria - - - + + + Playlist Creation Failed Ezin izan da erreprodukzio-zerrenda sortu - + A playlist by that name already exists. Badago izen bereko beste erreproduzkio-zerrenda bat - + A playlist cannot have a blank name. Erreprodukzio-Zerrenda batek ezin du izen hutsik izan - + An unknown error occurred while creating playlist: Errore ezezagun bat gertatu da erreprodukzio zerrenda sortzean: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Ezeztatu - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Itxi - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16652,37 +16836,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16690,37 +16874,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16728,60 +16912,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Erakutsi ala ezkutatu Zutabeak + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Aukeratu musika liburutegiaren direktorioa - + controllers - + Cannot open database Ezin da datu-basea ireki - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16792,67 +16981,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Arakatu - + Export directory - + Database version - + Export Esportatu - + Cancel Ezeztatu - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16873,7 +17073,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16883,23 +17083,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_fa.qm b/res/translations/mixxx_fa.qm index e852c288a9b2..e00a10ce159b 100644 Binary files a/res/translations/mixxx_fa.qm and b/res/translations/mixxx_fa.qm differ diff --git a/res/translations/mixxx_fa.ts b/res/translations/mixxx_fa.ts index 181bc75412fe..84a9247c2057 100644 --- a/res/translations/mixxx_fa.ts +++ b/res/translations/mixxx_fa.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source پاک کردن کلکسیون - + Auto DJ دی‌جی خودکار - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source افزودن کلکسیون @@ -147,28 +147,28 @@ BasePlaylistFeature - + New Playlist فهرست‌پخش جدید - + Add to Auto DJ Queue (bottom) افزودن به صف دی‌جی خودکار (پایین) - + Create New Playlist ساخت فهرست پخش جدید - + Add to Auto DJ Queue (top) افزودن به صف دی‌جی خودکار (بالا) - + Remove حذف @@ -178,12 +178,12 @@ نام‌گذاری دوباره - + Lock قفل - + Duplicate کپی همسان @@ -204,24 +204,24 @@ تحلیل فهرست‌پخش جاری - + Enter new name for playlist: نام جدید برای فهرست‌پخش - + Duplicate Playlist کپی همسان از فهرست‌پخش - - + + Enter name for new playlist: نام جدید برای فهرست‌پخش - + Export Playlist برون ریزی فهرست پخش @@ -231,70 +231,77 @@ - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist نام‌گذاری دوباره فهرست‌پخش - - + + Renaming Playlist Failed خطا در نام‌گذاری فهرست‌پخش - - - + + + A playlist by that name already exists. فهرست‌پخشی با این نام از پیش موجود است. - - - + + + A playlist cannot have a blank name. فهرست‌پخش نمیتواند بدون نام باشد - + _copy //: Appendix to default name when duplicating a playlist کپی - - - - - - + + + + + + Playlist Creation Failed خطا در ایجاد فهرست‌پخش - - + + An unknown error occurred while creating playlist: خطایی ناشناخته در هنگام تولید فهرست‌پخش رخ داده است : - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) فهرست پخش M3U (فایل .m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U فهرست‌پخش (*.m3u);;M3U8 فهرست‌پخش (*.m3u8);;PLS فهرست‌پخش (*.pls);;Text CSV (*.csv);; متن قابل خواندن (*.txt) @@ -302,12 +309,12 @@ BaseSqlTableModel - + # # - + Timestamp زمان ثبت شده در سیستم @@ -315,7 +322,7 @@ BaseTrackPlayerImpl - + Couldn't load track. بارگزاری قطعه امکان‌پذیر نیست. @@ -323,137 +330,142 @@ BaseTrackTableModel - + Album کل %n آلبوم - + Album Artist هنرمند آلبوم - + Artist کل %n هنرمند - + Bitrate میزان ارسال بیت - + BPM BPM - + Channels کانال‌ها - + Color رنگ - + Comment دیدگاه - + Composer آهنگساز - + Cover Art جلد - + Date Added تاریخ افزودن - + Last Played - + Duration مدت پخش - + Type نوع - + Genre ژانر - + Grouping دسته بندی - + Key کلید - + Location موقعیت - + + Overview + + + + Preview پیش‌نمایش - + Rating رتبه‌دهی - + ReplayGain - + Samplerate - + Played پخش شده - + Title سمت - + Track # قطعه # - + Year سال - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links افزودن به پیوندهای سریع - + Remove from Quick Links حذف از پیوندهای سریع - + Add to Library - + Refresh directory tree - + Quick Links پیوندهای سریع - - + + Devices دستگاه‌ها - + Removable Devices دستگاههای جداشدنی - - + + Computer کامپیوتر - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -749,87 +771,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -839,27 +861,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1041,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume روی کامل گذاشتن - + Set to zero volume روی 0 گذاشتن @@ -1072,13 +1099,13 @@ trace - Above + Profiling messages - + Headphone listen button - + Mute button دکمه قطع صدا @@ -1089,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1148,22 +1175,22 @@ trace - Above + Profiling messages - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1173,193 +1200,193 @@ trace - Above + Profiling messages اکولایزرها - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 ۱۶ - + 32 32 - + 64 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1475,20 +1502,20 @@ trace - Above + Profiling messages - - + + Volume Fader - + Full Volume صدای کامل - + Zero Volume صدای 0 @@ -1504,7 +1531,7 @@ trace - Above + Profiling messages - + Mute بی صدا @@ -1515,7 +1542,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1536,25 +1563,25 @@ trace - Above + Profiling messages - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1624,82 +1651,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1740,451 +1767,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) افزودن به صف دی‌جی خودکار (پایین) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) افزودن به صف دی‌جی خودکار (بالا) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects جلوه‌ها - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain سود - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2199,102 +2226,102 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2446,1041 +2473,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ دی‌جی خودکار - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface واسط کاربر - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3595,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3664,13 +3713,13 @@ trace - Above + Profiling messages CrateFeature - + Remove حذف - + Create New Crate @@ -3680,132 +3729,132 @@ trace - Above + Profiling messages نام‌گذاری دوباره - - + + Lock قفل - + Export Crate as Playlist - + Export Track Files برون ریزی فهرست پخش - + Duplicate کپی همسان - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates کلکسیون - - + + Import Crate - + Export Crate - + Unlock بازکردن قفل - + An unknown error occurred while creating crate: - + Rename Crate - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U فهرست‌پخش (*.m3u);;M3U8 فهرست‌پخش (*.m3u8);;PLS فهرست‌پخش (*.pls);;Text CSV (*.csv);; متن قابل خواندن (*.txt) - + M3U Playlist (*.m3u) فهرست پخش M3U (فایل .m3u) - + Crates are a great way to help organize the music you want to DJ with. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. - + A crate by that name already exists. @@ -3900,12 +3949,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -4026,72 +4075,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds ثانیه - + Auto DJ Fade Modes Full Intro + Outro: @@ -4122,80 +4171,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat تکرار - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ دی‌جی خودکار - + Shuffle درهم ریختن - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4418,37 +4467,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4487,17 +4536,17 @@ You tried to learn: %1,%2 - + Log - + Search جستوجو - + Stats @@ -5150,113 +5199,113 @@ associated with each key. DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None هیچکدام - + %1 by %2 %1 بر اساس %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5269,105 +5318,105 @@ Apply settings and continue? - + Enabled فعال‌شده - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: توضیح: - + Support: پشتیبانی: - + Screens preview - + Input Mappings - - + + Search جستوجو - - + + Add افزودن - - + + Remove حذف @@ -5382,22 +5431,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5407,28 +5456,28 @@ Apply settings and continue? - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All پاک کردن همه - + Output Mappings @@ -5587,6 +5636,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6178,62 +6237,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information اطلاعات - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7400,173 +7459,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled فعال‌شده - + Stereo استریو - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error خطای پیکربندی @@ -7584,131 +7642,131 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate سرعت نمونه - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms 20 ms - + Buffer Underflow Count - + 0 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output خروجی - + Input ورودی - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7863,27 +7921,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7896,250 +7955,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate سرعت فریم‌ها - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low پایین - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies - + Visual gain of the low frequencies - + High بالا - + Global visual gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8147,47 +8212,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware - + Controllers - + Library کتابخانه - + Interface واسط - + Waveforms - + Mixer مخلوط‌کن - + Auto DJ دی‌جی خودکار - + Decks - + Colors @@ -8222,47 +8287,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects جلوه‌ها - + Recording ضبط - + Beat Detection - + Key Detection - + Normalization - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control - + Live Broadcasting - + Modplug Decoder @@ -8295,22 +8360,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8618,284 +8683,284 @@ This can not be undone! چکیده - + Filetype: - + BPM: BPM: - + Location: مکان: - + Bitrate: نرخ بیت: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # قطعه # - + Album Artist هنرمند آلبوم - + Composer آهنگساز - + Title سمت - + Grouping دسته بندی - + Key کلید - + Year سال - + Artist کل %n هنرمند - + Album کل %n آلبوم - + Genre ژانر - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous &قبلی‌ - + Move to the next item. "Next" button - + &Next &بعدی‌ - + Duration: مدت‌زمان: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color رنگ - + Date added: - + Open in File Browser بازکردن در ... - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &اعمال‌ - + &Cancel &لغو - + (no color) @@ -9052,7 +9117,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9256,27 +9321,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9420,38 +9485,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes - + Select your iTunes library - + (loading) iTunes - + Use Default Library - + Choose Library... - + Error Loading iTunes Library - + There was an error loading your iTunes library. Check the logs for details. @@ -9459,12 +9524,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9472,18 +9537,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9491,15 +9556,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9510,57 +9575,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate فعالسازی - + toggle ضامن - + right راست - + left چپ - + right small - + left small - + up بالا - + down پایین - + up small - + down small - + Shortcut میان‌بر @@ -9568,62 +9633,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9633,22 +9698,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist درون ریزی فهرست‌پخش - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) نوع فایل فهرست‌پخش (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9695,27 +9760,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9775,18 +9840,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9798,208 +9863,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry تلاش دوباره - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure پیکربندی مجدد - + Help راهنما - - + + Exit خروج - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue ادامه - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10015,13 +10121,13 @@ Do you want to select an input device? PlaylistFeature - + Lock قفل - - + + Playlists فهرست‌های پخش @@ -10031,32 +10137,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock بازکردن قفل - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist ساخت فهرست پخش جدید @@ -11547,7 +11679,7 @@ Fully right: end of the effect period - + Deck %1 دک %1 @@ -11680,7 +11812,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11711,7 +11843,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11844,12 +11976,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11884,42 +12016,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11977,54 +12109,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists فهرست‌های پخش - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12159,19 +12291,19 @@ may introduce a 'pumping' effect and/or distortion. قفل - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12583,7 +12715,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12765,7 +12897,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art جلد @@ -13001,197 +13133,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play نواختن - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13429,924 +13561,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse معکوس - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause پخش/مکث - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14481,33 +14621,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14527,205 +14667,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue - + Headphone هد‌فون - + Mute بی صدا - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock ساعت - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14770,254 +14920,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat تکرار - + When active the track will repeat if you go past the end or reverse before the start. - + Eject پس زدن - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist - + Displays the artist of the loaded track. - + Track Title - + Displays the title of the loaded track. - + Track Album آلبوم - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -15025,12 +15175,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15038,47 +15188,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - Overwrite Existing File? + + Replace Existing File? - - "%1" already exists, overwrite? + + "%1" already exists, replace? - &Overwrite + &Replace - - Over&write All - - - - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15250,47 +15395,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15414,407 +15559,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view - + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist ایجاد یک فهرست‌پخش جدید - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &نما‌ - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+5 - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen &تمام صفحه - + Display Mixxx using the full screen - + &Options &گزینه‌ها‌ - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` Ctrl+` - + &Preferences &تنظیمات‌ - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help &راهنما - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx &دریافت کمک از Mixxx - + &User Manual &راهنمای کاربری - + Read the Mixxx user manual. خواندن راهنمای کاربری Mixxx - + &Keyboard Shortcuts &میانبر های کیبورد - + Speed up your workflow with keyboard shortcuts. سرعت کار خود را با میانبر های کیبورد افزایش دهید! - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &این نرم افزار را ترجمه کنید - + Help translate this application into your language. در ترجمه این نرم افزار به زبان خودتان کمک کنید - + &About &درباره - + About the application درباره این نرم افزار @@ -15822,25 +15998,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15849,25 +16025,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - پاکسازی داده ها - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun جستوجو - + Clear input پاکسازی داده ها @@ -15878,169 +16042,163 @@ This can not be undone! جستجو... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - میان‌بر + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - تمرکز + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - خروج از جستوجو + + Delete query from history + WSearchRelatedTracksMenu - + Search related Tracks - + Key کلید - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist کل %n هنرمند - + Album Artist هنرمند آلبوم - + Composer آهنگساز - + Title سمت - + Album کل %n آلبوم - + Grouping دسته بندی - + Year سال - + Genre ژانر - + Directory - + &Search selected @@ -16048,599 +16206,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck دسته - + Sampler - + Add to Playlist افزودن به فهرست پخش - + Crates کلکسیون - + Metadata - + Update external collections - + Cover Art جلد - + Adjust BPM - + Select Color - - + + Analyze تحلیل - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) افزودن به صف دی‌جی خودکار (پایین) - + Add to Auto DJ Queue (top) افزودن به صف دی‌جی خودکار (بالا) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove حذف - + Remove from Playlist - + Remove from Crate - + Hide from Library از کتابخانه پنهان کن - + Unhide from Library ظاهر سازی در کتابخانه - + Purge from Library پاکسازی کتابخانه - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties مشخصات - + Open in File Browser بازکردن در ... - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating رتبه‌دهی - + Cue Point - + + Hotcues - + Intro - + Outro - + Key کلید - + ReplayGain - + Waveform - + Comment دیدگاه - + All همه - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 دک %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist ساخت فهرست پخش جدید - + Enter name for new playlist: نام جدید برای فهرست‌پخش - + New Playlist فهرست‌پخش جدید - - - + + + Playlist Creation Failed خطا در ایجاد فهرست‌پخش - + A playlist by that name already exists. فهرست‌پخشی با این نام از پیش موجود است. - + A playlist cannot have a blank name. فهرست‌پخش نمیتواند بدون نام باشد - + An unknown error occurred while creating playlist: خطایی ناشناخته در هنگام تولید فهرست‌پخش رخ داده است : - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel انصراف - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16656,37 +16840,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16694,37 +16878,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16732,60 +16916,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. نمایش یا پنهان سازی ستون ها + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16796,67 +16985,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse انتخاب فایل - + Export directory - + Database version - + Export - + Cancel انصراف - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16877,7 +17077,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16887,23 +17087,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_fi.qm b/res/translations/mixxx_fi.qm index ed01cc216038..91d9d1db279f 100644 Binary files a/res/translations/mixxx_fi.qm and b/res/translations/mixxx_fi.qm differ diff --git a/res/translations/mixxx_fi.ts b/res/translations/mixxx_fi.ts index 97596884b9e6..31b70cde33ae 100644 --- a/res/translations/mixxx_fi.ts +++ b/res/translations/mixxx_fi.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Poista levylaukku olemasta raitalähde - + Auto DJ Auto-DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Lisää levylaukku raitalähteeksi @@ -149,28 +149,28 @@ BasePlaylistFeature - + New Playlist Uusi soittolista - + Add to Auto DJ Queue (bottom) Lisää Auto DJ -jonon loppuun - + Create New Playlist Luo uusi soittolista - + Add to Auto DJ Queue (top) Lisää Auto DJ -jonon alkuun - + Remove Poista @@ -180,12 +180,12 @@ Muuta nimeä - + Lock Lukitse - + Duplicate Monista @@ -206,24 +206,24 @@ Analysoi koko soittolista - + Enter new name for playlist: Anna uusi nimi soittolistalle - + Duplicate Playlist Duplikoi soittolista - - + + Enter name for new playlist: Anna nimi uudelle soittolistalle - + Export Playlist Vie soittolista @@ -233,70 +233,77 @@ Lisää Auto DJ -jonoon (korvaa) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Nimeä soittolista uudelleen - - + + Renaming Playlist Failed Soittolistan uudelleennimeäminen epäonnistui - - - + + + A playlist by that name already exists. Samanniminen soittolista on jo olemassa. - - - + + + A playlist cannot have a blank name. Soittolistan nimi ei voi olla tyhjä. - + _copy //: Appendix to default name when duplicating a playlist _kopioi - - - - - - + + + + + + Playlist Creation Failed Soittolistan luominen epäonnistui - - + + An unknown error occurred while creating playlist: Soittolistan luonnissa tapahtui tuntematon virhe: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U Soittolista (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) m3u-soittolista (*.m3u);;m3u8-soittolista (*.m3u8);;pls-soittolista (*.pls);;CSV-tekstitiedosto (*.csv);;Luettava tekstitiedosto (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Aikaleima @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Kappaletta ei voitu ladata. @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Levy - + Album Artist Albumin esittäjä - + Artist Esittäjä - + Bitrate Bittinopeus - + BPM BPM - + Channels Kanavat - + Color Väri - + Comment Kommentti - + Composer Säveltäjä - + Cover Art Kansikuva - + Date Added Lisäyspäivä - + Last Played Viimeksi soitettu - + Duration Kesto - + Type Tyyppi - + Genre Tyylilaji - + Grouping Ryhmittely - + Key Sävellaji - + Location Sijainti - + + Overview + + + + Preview Esikatselu - + Rating Arvostelu - + ReplayGain ReplayGain (toiston voimakkuuden tasoitus) - + Samplerate Näytteenottotaajuus - + Played Soitettu - + Title Kappale - + Track # Raidan # - + Year Vuosi - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Lisää pikalinkkejä - + Remove from Quick Links Poista pikalinkeistä - + Add to Library Lisää kirjastoon - + Refresh directory tree - + Quick Links Pikalinkit - - + + Devices Laitteet - + Removable Devices Irrotettavat laitteet - - + + Computer Tietokone - + Music Directory Added Musiikkikansio lisätty - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Lisäsit yhden tahi useamman musiikkihakemiston. Raidat näiden hakemistojen sisällä eivät tule tarjolle ennen kuin kirjastosi uudelleenskannataan. Haluatko skannata sen lävitse nyt? - + Scan Skannaa - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. "Tietokone" mahdollistaa navigoinnin, tarkastelun ja raitojen lataamisen kiintolevysi kansioista sekä ulkoisista laitteista. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -749,87 +771,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: Mixx on avoimen lähdekoodin DJ-ohjelma. Lisätietoja näet täältä: - + Starts Mixxx in full-screen mode Käynnistää Mixxx:in kokoruututilassa - + Use a custom locale for loading translations. (e.g 'fr') Ota käyttöön oma kotoistus ja kieli ladataksesi käännöksiä. (esim. 'fi') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. Päällimmäinen hakemisto josta Mixx etsii hyödykkeitä kuten MIDI-kartoitukset, vakiollisen asennussijainnin ohittaminen. - + Path the debug statistics time line is written to Polku johon virhekorjaustilaston aikajana kirjoitetaan - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads Laittaa Mixxx:in näyttämään/kirjoittamaan talteen kaiken sen vastaanottaman ohjain-datan sekä kirjaamaan nuo ladatut toiminnot - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. Kytkee päälle kehittäjätilan. Sisältää tietojen lisäkirjauksia, suorituskykyyn liittyviä tilastoja, sekä kehittäjätyökalujen valikon. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. Kytkee päälle turvatun tilan. Päältä otetaan pois OpenGL-ääniaaltomuodot sekä pyörivät vinyylivimpaimet. Kokeile tätä vaihtoehtotilaa mikäli Mixxx kaatuu käynnistyksen yhteydessä. - + [auto|always|never] Use colors on the console output. [auto|always|never] Käytä päätteen tulosteissa värejä. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -844,27 +866,32 @@ virheenkorjaukseen liittyvät - kuten yllä + bugeihin liittyvät/kehittäjälii jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. Asettaa kirjaustason asteelle jossa kirjauspuskuri huuhtaistaan mixxx.log -tiedostoon. <level> on yksi arvoista jotka määritetään yllä --log-level tasolla. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1046,13 +1073,13 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Set to full volume Aseta äänenvoimakkuus täysille - + Set to zero volume Aseta äänenvoimakkuus nollalle @@ -1077,13 +1104,13 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Headphone listen button Kuulokekuuntelun nappi - + Mute button Hiljennä-nappi @@ -1094,25 +1121,25 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Mix orientation (e.g. left, right, center) Miksauksen suunta (vasen, oikea, keskellä) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1153,22 +1180,22 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit BPM-syötön nappi - + Toggle quantize mode Kvantisoinnin valintanappi - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode Valitse sävellajin lukitustila @@ -1178,193 +1205,193 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit Taajuuskorjaimet - + Vinyl Control Ohjainlevy - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Ohjainlevyn käynnistystila (päällä/pois/kuuma) - + Toggle vinyl-control mode (ABS/REL/CONST) Ohjainlevyn ohjaustila (abs./suht./vakio) - + Pass through external audio into the internal mixer - + Cues Cue-nappi - + Cue button Cue-nappi - + Set cue point Aseta cue-piste - + Go to cue point - + Go to cue point and play - + Go to cue point and stop Siirry cue-pisteeseen ja pysäytä - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues Nopea merkki - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 Poista hotcue-piste %1 - + Set hotcue %1 Aseta hotcue-piste %1 - + Jump to hotcue %1 Siirry hotcue-pisteeseen %1 - + Jump to hotcue %1 and stop Siirry hotcue-pisteeseen %1 ja pysäytä - + Jump to hotcue %1 and play Siirry hotcue-pisteeseen %1 ja toista. - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping Loopit - + Loop In button Loopin aloitusnappi - + Loop Out button Loopin lopetusnappi - + Loop Exit button - + 1/2 - + 1 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop Luo %1-tahdin looppi - + Create temporary %1-beat loop roll @@ -1482,20 +1509,20 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - - + + Volume Fader - + Full Volume - + Zero Volume @@ -1511,7 +1538,7 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Mute Hiljennä @@ -1522,7 +1549,7 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Headphone Listen @@ -1543,25 +1570,25 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1631,82 +1658,82 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Adjust Beatgrid Säädä Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1747,451 +1774,451 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit Matalien taajuuksien korjain - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue Cue-nappi - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Lisää Auto DJ -jonon loppuun - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Lisää Auto DJ -jonon alkuun - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track Lataa valittu kappale - + Load selected track and play Lataa valittu kappale ja soita - - + + Record Mix - + Toggle mix recording - + Effects Efektit - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Seuraava - + Switch to next effect - + Previous Edellinen - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain Herkkyys - + Gain knob Sisääntulon herkkyys - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2206,102 +2233,102 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2453,1041 +2480,1063 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) Lisää Auto DJ -jonoon (korvaa) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Mikrofoni päällä/pois - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Auto-DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface Käyttöliittymä - + Samplers Show/Hide - + Show/hide the sampler section Näytä tai piilota näytesoittimet - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section Näytä tai piilota ohjainlevyjen valinnat - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget Näytä tai piilota pyörivä ohjainlevy - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3602,32 +3651,32 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3671,13 +3720,13 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit CrateFeature - + Remove Poista - + Create New Crate @@ -3687,132 +3736,132 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit Muuta nimeä - - + + Lock Lukitse - + Export Crate as Playlist - + Export Track Files Vie raitatiedostoja - + Duplicate Monista - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Levylaukut - - + + Import Crate Tuo levylaukku - + Export Crate Vie levylaukku - + Unlock Poista lukitus - + An unknown error occurred while creating crate: Levylaukkua tuotaessa tapahtui tuntematon virhe: - + Rename Crate Muuta levylaukun nimeä - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Levylaukun uudelleennimeäminen epäonnistui - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) m3u-soittolista (*.m3u);;m3u8-soittolista (*.m3u8);;pls-soittolista (*.pls);;CSV-tekstitiedosto (*.csv);;Luettava tekstitiedosto (*.txt) - + M3U Playlist (*.m3u) M3U Soittolista (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. Levylaukkujen avulla voit helpommin järjestellä musiikkisi DJ-käyttöön. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! Levylaukkujen avulla voit järjestellä musiikkisi kuten haluat! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Levylaukun nimi ei voi olla tyhjä - + A crate by that name already exists. Samanniminen levylaukku on jo olemassa. @@ -3907,12 +3956,12 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit Aikaisemmat avustajat - + Official Website - + Donate @@ -4031,72 +4080,72 @@ jäljitys - kuten yllä + henkilökuvaliitteiset viestit DlgAutoDJ - + Skip Ohita - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds sekuntia - + Auto DJ Fade Modes Full Intro + Outro: @@ -4127,80 +4176,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat Kertaa - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Auto-DJ - + Shuffle Sekoita - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4423,37 +4472,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4492,17 +4541,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -5155,114 +5204,114 @@ associated with each key. DlgPrefController - + Apply device settings? Otetaanko laitteen asetukset käyttöön? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Laitteen asetukset tulee ottaa käyttöön ennen ohjatun määrittelyn käynnistämistä. Haluatko ottaa asetukset käyttöön ja jatkaa? - + None Määrittelemätön - + %1 by %2 %1 (tehnyt %2) - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5275,105 +5324,105 @@ Haluatko ottaa asetukset käyttöön ja jatkaa? Ohjaimen nimi - + Enabled Käytössä - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Kuvaus: - + Support: Tuki: - + Screens preview - + Input Mappings - - + + Search - - + + Add Lisää - - + + Remove Poista @@ -5388,22 +5437,22 @@ Haluatko ottaa asetukset käyttöön ja jatkaa? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5413,28 +5462,28 @@ Haluatko ottaa asetukset käyttöön ja jatkaa? Ohjattu määrittely (vain MIDI) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Tyhjennä kaikki - + Output Mappings @@ -5593,6 +5642,16 @@ Haluatko ottaa asetukset käyttöön ja jatkaa? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6184,62 +6243,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Tietoja - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7406,173 +7465,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Käytössä - + Stereo Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Virhe asetuksissa @@ -7590,131 +7648,131 @@ The loudness target is approximate and assumes track pregain and main output lev Äänirajapinta - + Sample Rate Näytteenottotaajuus - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Ulostulo - + Input Sisääntulo - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices Etsi laitteita @@ -7869,27 +7927,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available OpenGL ei ole käytettävissä - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7902,250 +7961,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate Kehysnopeus - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain Näytettävä herkkyys - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies Visuaalinen säädin keskialueen taajuuksille - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low Matala - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies Visuaalinen säädin korkeille taajuuksille - + Visual gain of the low frequencies Visuaalinen säädin matalille taajuksille - + High Korkea - + Global visual gain Yleinen visuaalinen säädin - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8153,47 +8218,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Ääniliitynnät - + Controllers Ohjaimet - + Library Kirjasto - + Interface Käyttöliittymä - + Waveforms - + Mixer Mikseri - + Auto DJ Auto-DJ - + Decks - + Colors @@ -8228,47 +8293,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Efektit - + Recording Nauhoitus - + Beat Detection Iskuntunnistus - + Key Detection - + Normalization Normalisointi - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Ohjainlevy - + Live Broadcasting Verkkojulkaisu - + Modplug Decoder @@ -8301,22 +8366,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Aloita tallennus - + Recording to file: - + Stop Recording Lopeta tallennus - + %1 MiB written in %2 @@ -8624,284 +8689,284 @@ This can not be undone! Yhteenveto - + Filetype: Tiedostotyyppi: - + BPM: BPM: - + Location: Sijainti: - + Bitrate: Bittinopeus: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Raidan # - + Album Artist Albumin esittäjä - + Composer Säveltäjä - + Title Kappale - + Grouping Ryhmittely - + Key Sävellaji - + Year Vuosi - + Artist Esittäjä - + Album Levy - + Genre Tyylilaji - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM Tuplaa BPM - + Halve BPM Puolita BPM - + Clear BPM and Beatgrid Tyhjennä BPM ja iskuverkko - + Move to the previous item. "Previous" button - + &Previous &Edellinen - + Move to the next item. "Next" button - + &Next &Seuraava - + Duration: Kesto: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color Väri - + Date added: - + Open in File Browser Avaa tiedostoselain - + Samplerate: - + Track BPM: Tempo (BPM): - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat Naputa tahdissa - + Hint: Use the Library Analyze view to run BPM detection. Vinkki: voit käynnistää tempotunnistuksen kirjaston analysointinäkymstä. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Käytä - + &Cancel &Peru - + (no color) @@ -9058,7 +9123,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9260,27 +9325,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9424,38 +9489,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes iTunes - + Select your iTunes library Valitse iTunes kirjastosi - + (loading) iTunes (ladataan) iTunes - + Use Default Library Käytä oletuskirjastoa - + Choose Library... Valitse kirjasto... - + Error Loading iTunes Library Virhe ladattaessa iTunes-kirjastoa - + There was an error loading your iTunes library. Check the logs for details. @@ -9463,12 +9528,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9476,18 +9541,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9495,15 +9560,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9514,57 +9579,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate aktivoi - + toggle näkyvyys - + right oikea - + left vasen - + right small - + left small - + up ylös - + down alas - + up small - + down small - + Shortcut Pikakuvake @@ -9572,62 +9637,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9637,22 +9702,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Tuo soittolista - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Soittolistan tiedostot (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9699,27 +9764,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9779,18 +9844,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Puuttuvat kappaleet - + Hidden Tracks Piilotetut kappaleet - Export to Engine Prime + Export to Engine DJ @@ -9802,208 +9867,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Äänilaite on varattu - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Yritä uudelleen</b> suljettuasi toisen ohjelman tai yhdistettyäsi äänilaitteen - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Määrittelle uudestaan</b> Mixxx- äänilaitteidn asetukset. - - + + Get <b>Help</b> from the Mixxx Wiki. Etsi <b>apua</b> Mixxx-wikistä. - - - + + + <b>Exit</b> Mixxx. <b>Sulje</b> Mixxx. - + Retry Yritä uudelleen - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Määrittele uudelleen - + Help Ohje - - + + Exit Sulje - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices Äänilaitteita ei löytynyt - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Äänilaitteita ei ole määritelty mixxx-asetuksissa. Äänen käsittely ei ole käytössä, kunnes kelvollinen toistolaite on määritelty. - + <b>Continue</b> without any outputs. <b>Jatka</b> määrittelemättä äänilaitteita. - + Continue Jatka - + Load track to Deck %1 Lataa kappale dekkiin %1 - + Deck %1 is currently playing a track. Dekki %1 soittaa kappaletta. - + Are you sure you want to load a new track? Haluatko varmasti ladata uuden kappaleen? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Virhe teematiedostossa - + The selected skin cannot be loaded. Valittua teemaa ei voi ladata. - + OpenGL Direct Rendering OpenGL -suorapiirto - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Varmista lopetus - + A deck is currently playing. Exit Mixxx? Dekki soittaa kappaletta. Suljetaanko Mixxx? - + A sampler is currently playing. Exit Mixxx? Näytesoitin on käynnissä. Suljetaanko mixxx? - + The preferences window is still open. Määritys-ikkuna on vielä auki. - + Discard any changes and exit Mixxx? Hylkää kaikki muutokset ja sulje Mixxx @@ -10019,13 +10125,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Lukitse - - + + Playlists Soittolistat @@ -10035,32 +10141,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Poista lukitus - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Jotkut DJ:t luovat soittolistoja ennen esiintymistä, toiset rakentavat soittolistan esityksen aikana. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Käyttäessäsi soittolistaa DJ-esityksen aikana, muista tarkkailla yleisön reaktioita valitsemaasi musiikkiin. - + Create New Playlist Luo uusi soittolista @@ -11551,7 +11683,7 @@ Fully right: end of the effect period - + Deck %1 Dekki %1 @@ -11684,7 +11816,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Läpisyöttö @@ -11715,7 +11847,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11848,12 +11980,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11888,42 +12020,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11981,54 +12113,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Soittolistat - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12163,19 +12295,19 @@ may introduce a 'pumping' effect and/or distortion. Lukitse - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12587,7 +12719,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl Pyörivä Vinyyli @@ -12769,7 +12901,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Kansikuva @@ -13005,197 +13137,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap Tempon ja BPM:n naputus - + Show/hide the spinning vinyl section. Näytä/Piilota pyörivä vinyylialue - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13433,924 +13565,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank Tallenna samplepankki - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank Lataa samplepankki - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next Seuraava - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Edellinen - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Säädä Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize Kvantisoi - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse Soita takaperin - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Soita/pysäytä - + Jumps to the beginning of the track. Hyppää kappaleen alkuun. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14485,33 +14625,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. Soita tai pysäytä kappale. - + (while playing) @@ -14531,205 +14671,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue Cue-nappi - + Headphone Kuulokkeet - + Mute Hiljennä - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock Kello - + Displays the current time. Näyttää nykyisen ajan. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14774,254 +14924,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind Pikakelaus eteenpäin - + Fast rewind through the track. Nopea kappaleen takaperin kelaus. - + Fast Forward Pikakelaus taaksepäin - + Fast forward through the track. Nopea kappaleen etuperin kelaus. - + Jumps to the end of the track. Hyppää kappaleen loppuun. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control Sävelkorkeuden säätö - + Pitch Rate Sävelkorkeuden suhde - + Displays the current playback rate of the track. - + Repeat Kertaa - + When active the track will repeat if you go past the end or reverse before the start. - + Eject Poistaa dekistä - + Ejects track from the player. - + Hotcue Nopea merkki - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. Absoluuttinen tila - Kappaleen asento vastaa neulan sijaintia ja nopeutta. - + Relative mode - track speed equals needle speed regardless of needle position. Suhteellinen tila - Neula seuraa kappaleen noupeutta riippumatta neulan sijainnista. - + Constant mode - track speed equals last known-steady speed regardless of needle input. Vakio tila - Kappaleen nopeus vastaa vakionopeutta riippumatta neulan sisääntulosta. - + Vinyl Status Vinyylin tila - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. Puolittaa nykyisen loopin pituuden siirtämällä loppumerkkiä. - + Deck immediately loops if past the new endpoint. Dekki toistaa loopin heti, jos ollaan uuden ohituskohdan ohi - + Loop Double - + Doubles the current loop's length by moving the end marker. Tuplaa nykyisen loopin pituuden siirtämällä loppumerkkiä. - + Beatloop Iskulooppi - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time Kappaleen kesto - + Track Duration Kappaleen kesto - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist Kappaleen esittäjä - + Displays the artist of the loaded track. Näyttää ladatun kappaleen esittäjän. - + Track Title Kappaleen nimi - + Displays the title of the loaded track. Näytää ladatun kappaleen nimi. - + Track Album Kappaleen albumi - + Displays the album name of the loaded track. Näyttää ladatun kappaleen albumin. - + Track Artist/Title - + Displays the artist and title of the loaded track. Näyttää ladatun kappaleen esittäjän ja nimen. @@ -15029,12 +15179,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15042,47 +15192,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15254,47 +15399,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15418,407 +15563,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view + + + + + Ctrl+f - + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist Luo uusi soittolista - + Ctrl+n - + Create New &Crate - + Create a new crate Luo uusi levylaukku - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Näytä - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Ei välttämättä tue kaikkia kalvoja. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen K&okoruututila - + Display Mixxx using the full screen Näytä Mixxx kokoruututilassa - + &Options &Valinnat - + &Vinyl Control &Levyohjain - + Use timecoded vinyls on external turntables to control Mixxx Ohjaa mixxx:iä levysoittimilla ja aikakoodatuilla levyillä - + Enable Vinyl Control &%1 - + &Record Mix N&auhoita miksaus - + Record your mix to a file Nauhoita miksauksesi tiedostoon - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Ota suora nettijulkaisu käyttöön - + Stream your mixes to a shoutcast or icecast server Lähetä miksauksesi shoutcast- tai icecast-palvelimelle - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Ota &Näppäimistö pikakuvakkeet käyttöön - + Toggles keyboard shortcuts on or off Määrittää ovatko pikanäppäimet käytössä - + Ctrl+` Ctrl+` - + &Preferences &Asetukset - + Change Mixxx settings (e.g. playback, MIDI, controls) Muokkaa ohjelman asetuksia (toistoa, MIDI-ohjaimia jne.) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help &Ohje - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support &Mixxx-yhteisö (englanniksi) - + Get help with Mixxx Pyydä apua Mixxx:in kanssa - + &User Manual &Käyttöohje - + Read the Mixxx user manual. Lue Mixxx-käyttöohjetta. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Käännä tätä ohjelmaa - + Help translate this application into your language. Auta tämän ohjelman kääntämisessä kielellesi. - + &About &Tietoja - + About the application Tietoja ohjelmasta @@ -15826,25 +16002,25 @@ This can not be undone! WOverview - + Passthrough Läpisyöttö - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15853,25 +16029,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun - + Clear input @@ -15882,169 +16046,163 @@ This can not be undone! Etsi... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Pikakuvake + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Sävellaji - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Esittäjä - + Album Artist Albumin esittäjä - + Composer Säveltäjä - + Title Kappale - + Album Levy - + Grouping Ryhmittely - + Year Vuosi - + Genre Tyylilaji - + Directory - + &Search selected @@ -16052,599 +16210,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck Dekki - + Sampler Näytesoitin - + Add to Playlist Lisää soittolistaan - + Crates Levylaukut - + Metadata - + Update external collections - + Cover Art Kansikuva - + Adjust BPM - + Select Color - - + + Analyze Analysoi - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Lisää Auto DJ -jonon loppuun - + Add to Auto DJ Queue (top) Lisää Auto DJ -jonon alkuun - + Add to Auto DJ Queue (replace) Lisää Auto DJ -jonoon (korvaa) - + Preview Deck - + Remove Poista - + Remove from Playlist - + Remove from Crate - + Hide from Library Piilota kirjastosta. - + Unhide from Library Näytä kirjastossa. - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Ominaisuudet - + Open in File Browser Avaa tiedostoselain - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Arvostelu - + Cue Point - + + Hotcues Nopea merkki - + Intro - + Outro - + Key Sävellaji - + ReplayGain ReplayGain (toiston voimakkuuden tasoitus) - + Waveform - + Comment Kommentti - + All Kaikki - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM Lukitse BPM - + Unlock BPM Poista BPM-lukitus - + Double BPM Tuplaa BPM - + Halve BPM Puolita BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Dekki %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Luo uusi soittolista - + Enter name for new playlist: Anna nimi uudelle soittolistalle - + New Playlist Uusi soittolista - - - + + + Playlist Creation Failed Soittolistan luominen epäonnistui - + A playlist by that name already exists. Samanniminen soittolista on jo olemassa. - + A playlist cannot have a blank name. Soittolistan nimi ei voi olla tyhjä. - + An unknown error occurred while creating playlist: Soittolistan luonnissa tapahtui tuntematon virhe: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Keskeytä - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Sulje - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16660,37 +16844,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16698,37 +16882,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16736,60 +16920,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Näytä tai piilota sarakkeita. + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Valitse musiikkikokoelman sijainti - + controllers - + Cannot open database Tietokantaa ei voida avata - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16803,67 +16992,78 @@ Valitse OK poistuaksesi. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Selaa - + Export directory - + Database version - + Export Vie - + Cancel Keskeytä - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16884,7 +17084,7 @@ Valitse OK poistuaksesi. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16894,23 +17094,23 @@ Valitse OK poistuaksesi. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_fr.qm b/res/translations/mixxx_fr.qm index 10b4aa6833ca..99d8fc0a5386 100644 Binary files a/res/translations/mixxx_fr.qm and b/res/translations/mixxx_fr.qm differ diff --git a/res/translations/mixxx_fr.ts b/res/translations/mixxx_fr.ts index 700bda02529b..eaf1017b2f99 100644 --- a/res/translations/mixxx_fr.ts +++ b/res/translations/mixxx_fr.ts @@ -619,7 +619,7 @@ It shows the data from the file tags, not track data from your Mixxx library like other track views. - Il affiche les données de métadonnée de fichier, et non les données de piste en provenance de votre bibliothèque Mixxx comme les autres vues de piste. + Il affiche les données des métadonnées de fichiers, et non les données de piste en provenance de votre bibliothèque Mixxx comme les autres vues de piste. @@ -3650,32 +3650,32 @@ trace : ci-dessus + messages de profilage ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La fonctionnalité fournie par ce mappage de contrôleur sera désactivée jusqu'à ce que le problème soit résolu. - + You can ignore this error for this session but you may experience erratic behavior. Vous pouvez ignorer cette erreur pour la durée de la session mais il se peut que vous observiez un comportement erratique. - + Try to recover by resetting your controller. Tenter de récupérer en redémarrant votre contrôleur. - + Controller Mapping Error Erreur du mappage contrôleur - + The mapping for your controller "%1" is not working properly. Le mappage pour votre contrôleur "%1" ne fonctionne pas correctement. - + The script code needs to be fixed. Le code du script doit être corrigé. @@ -3763,7 +3763,7 @@ trace : ci-dessus + messages de profilage Auto DJ Track Source - Auto DJ Source de piste + Auto DJ source de piste @@ -5694,6 +5694,16 @@ Appliquer les paramètres et continuer ? Multi-Sampling Multi-échantillonnage + + + Force 3D acceleration + Forcer l'accélération 3D + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + Si cochée, Mixxx supposera que l'accélération 3D est toujours disponible. Cela peut entraîner une baisse des performances si le rendu disponible est basé uniquement sur le CPU. + Start in full-screen mode @@ -6308,62 +6318,62 @@ Vous pouvez toujours glisser-déposer des pistes sur l'écran pour cloner u DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. La taille minimale du thème sélectionné est plus grande que la résolution de votre écran. - + Allow screensaver to run Autoriser l'économiseur d'écran - + Prevent screensaver from running Interdire l'économiseur d'écran - + Prevent screensaver while playing Interdire l'économiseur d'écran pendant la lecture - + Disabled Désactivé - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Ce thème n'accepte pas les modèles de couleurs - + Information Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx doit être redémarré avant que les nouveaux paramètres régionaux, de mise à l'échelle ou de multi-échantillonnage ne prennent effet. @@ -6752,7 +6762,7 @@ vous permettant ainsi d'ajuster la tonalité afin de produire une mixage ha Show scan summary dialog - Afficher la boîte de dialogue de résumé du scan + @@ -7305,33 +7315,33 @@ vous permettant ainsi d'ajuster la tonalité afin de produire une mixage ha DlgPrefRecord - + Choose recordings directory Sélectionnez le répertoire des enregistrements - - + + Recordings directory invalid Répertoire des enregistrements non valide - + Recordings directory must be set to an existing directory. Le répertoire des enregistrements doit être défini sur un répertoire existant. - + Recordings directory must be set to a directory. Le répertoire des enregistrements doit être défini sur un répertoire. - + Recordings directory not writable Répertoire des enregistrements non accessible en écriture - + You do not have write access to %1. Choose a recordings directory you have write access to. Vous n'avez pas d'accès en écriture à %1. Choisissez un répertoire d'enregistrements auquel vous avez accès en écriture. @@ -7349,43 +7359,55 @@ vous permettant ainsi d'ajuster la tonalité afin de produire une mixage ha Parcourir... - - + + This will include the filepath for each track in the CUE file. +This option makes the CUE file less portable and can reveal personal +information from filepaths (i.e. username) + + + + + Enable File Annotation in CUE file + + + + + Quality Qualité - + Tags Métadonnées - + Title Titre - + Author Auteur - + Album Album - + Output File Format Format de fichier de sortie - + Compression Compression - + Lossy Avec perte @@ -7400,12 +7422,12 @@ vous permettant ainsi d'ajuster la tonalité afin de produire une mixage ha Répertoire : - + Compression Level Niveau de compression - + Lossless Sans perte @@ -8282,32 +8304,32 @@ Sélectionner depuis les différents types d'affichage de la forme d'o Stem - Stem + Channel opacity - Opacité du canal + Channel opacity (outline) - Opacité du canal (contour) + Main stem opacity - Opacité du stem principal + Outline stem opacity - Opacité contour du stem + Move channel to foreground when volume is adjusted - Déplacer le canal vers l’avant-plan lorsque le volume est ajusté + @@ -9690,57 +9712,57 @@ Shown when VuMeter can not be displayed. Please keep d'OpenGL. - + activate activer - + toggle activer/désactiver - + right droite - + left gauche - + right small droit, petit - + left small gauche, petit - + up haut - + down bas - + up small haut, petit - + down small bas, petit - + Shortcut Raccourci @@ -9819,22 +9841,22 @@ Abandonner l'opération pour éviter les incohérences de la bibliothèque< LibraryFeature - + Import Playlist Importer une liste de lecture - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Fichiers de liste de lecture (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Remplacer le fichier ? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10108,133 +10130,133 @@ Voulez-vous vraiment l'écraser ? Continuer - + Load track to Deck %1 Charger la piste sur la platine %1 - + Deck %1 is currently playing a track. La platine %1 est en cours de lecture d'une piste. - + Are you sure you want to load a new track? Êtes-vous certain de vouloir charger une nouvelle piste ? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Aucun périphérique d'entrée n'est sélectionné pour ce contrôle vinyle. Veuillez d'abord en sélectionner un dans les Préférences du matériel sonore. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Il n'y a aucun périphérique d'entrée sélectionné pour ce contrôle intermédiaire. Veuillez d'abord en sélectionner un dans les Préférences du matériel sonore. - + There is no input device selected for this microphone. Do you want to select an input device? Aucun périphérique d'entrée n'est sélectionné pour ce microphone. Voulez-vous sélectionner un périphérique d'entrée ? - + There is no input device selected for this auxiliary. Do you want to select an input device? Aucun périphérique d'entrée n'est sélectionné pour cet auxiliaire. Voulez-vous sélectionner un périphérique d'entrée ? - + Scan took %1 Le scan a pris %1 - + No changes detected. Aucun changement détecté. - - + + %1 tracks in total %1 pistes au total - + %1 new tracks found %1 nouvelles pistes trouvées - + %1 moved tracks detected %1 pistes déplacées détectées - + %1 tracks are missing (%2 total) %1 titres sont manquants (%2 au total) - + %1 tracks have been rediscovered %1 pistes ont été redécouvertes - + Library scan finished Analyse de la bibliothèque terminée - + Error in skin file Erreur dans le fichier du thème - + The selected skin cannot be loaded. Le thème sélectionné ne peut pas être chargé. - + OpenGL Direct Rendering Rendu Direct OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Le rendu direct n'est pas activé sur votre machine.<br><br> Cela signifie que l'affichage de la forme d'onde sera très<br><b>lent et risque de surcharger votre processeur</b>. Mettez à jour votre<br>configuration pour activer le rendu direct ou désactivez<br>les affichages de forme d'onde dans les préférences de Mixxx en sélectionnant<br>"Vide" comme affichage de forme d'onde dans la section "Interface". - - - + + + Confirm Exit Confirmer la fermeture - + A deck is currently playing. Exit Mixxx? Une platine est en cours de lecture. Quitter Mixxx ? - + A sampler is currently playing. Exit Mixxx? Un échantillonneur est en cours de lecture. Quitter Mixxx ? - + The preferences window is still open. La fenêtre de Préférences est déjà ouverte. - + Discard any changes and exit Mixxx? Abandonner toutes les modifications et quitter Mixxx ? @@ -10256,7 +10278,7 @@ Voulez-vous sélectionner un périphérique d'entrée ? - + Playlists Listes de lecture @@ -10297,27 +10319,27 @@ Voulez-vous sélectionner un périphérique d'entrée ? Suppression de %1 listes de lecture déverrouillées.<br>Cette opération est irréversible ! - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Les listes de lectures sont des listes ordonnées de pistes qui vous permettent de planifier vos sessions de mixage. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Il peut être nécessaire de sauter quelques pistes de la liste de lecture que vous avez préparée ou d'ajouter des pistes différentes afin d'entretenir la ferveur de votre public. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Certains DJ préparent des listes de lecture avant leurs performances publiques quand d'autres préfèrent les constituer à la volée. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Lorsque vous utilisez des listes de lecture pendant des sessions de mixage, souvenez-vous de porter une attention toute particulière à la façon dont votre public réagit à la musique que vous avez choisie de jouer. - + Create New Playlist Créer une nouvelle liste de lecture @@ -11830,13 +11852,13 @@ Complètement à droite : fin de la période d'effet L'enregistrement OGG n'est pas pris en charge. La bibliothèque OGG/Vorbis n'a pas pu être initialisée. - + encoder failure défaillance de l'encodeur - + Failed to apply the selected settings. Échec de l'application des paramètres sélectionnés. @@ -11977,7 +11999,7 @@ Astuce : compense les voix de "canard" ou "grondante"La quantité d'amplification appliquée au signal audio. À des niveaux plus élevés, l'audio sera plus déformé. - + Passthrough Passerelle @@ -12188,42 +12210,42 @@ du signal d'entrée, des temps de relâchement courts peuvent introduire un Stem #%1 - + Empty Vide - + Simple Simple - + Filtered Filtré - + HSV HSV - + VSyncTest VSyncTest - + RGB RVB - + Stacked Empilé - + Unknown Inconnu @@ -12678,7 +12700,7 @@ du signal d'entrée, des temps de relâchement courts peuvent introduire un SoftwareWaveformWidget - + Filtered Filtré @@ -15738,323 +15760,353 @@ Cette opération est irréversible ! + Search in Current View... + Rechercher dans la vue actuelle... + + + + Search for tracks in the current library view + Rechercher des pistes dans la vue actuelle de la bibliothèque + + + + Ctrl+f + Ctrl+f + + + + Search in Tracks Library... + Recherche dans la bibliothèque des pistes... + + + + Search in the internal track collection under "Tracks" in the library + Rechercher dans la collection de pistes interne comme "Pistes" dans la bibliothèque + + + + Ctrl+Shift+F + Ctrl+Shift+F + + + Create &New Playlist Créer une &nouvelle liste de lecture - + Create a new playlist Créer une nouvelle liste de lecture - + Ctrl+n Ctrl+n - + Create New &Crate &Créer un nouveau bac - + Create a new crate Créer un nouveau bac - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Affichage - + Auto-hide menu bar Masquer automatiquement la barre de menu - + Auto-hide the main menu bar when it's not used. Masquer automatiquement la barre de menu principale lorsqu'elle n'est pas utilisée. - + May not be supported on all skins. Peut-être pas supporté sur tous les thèmes - + Show Skin Settings Menu Afficher le menu de réglage du thème - + Show the Skin Settings Menu of the currently selected Skin Afficher le menu paramètres de Thème du thème actuellement sélectionnée - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Afficher la section microphone - + Show the microphone section of the Mixxx interface. Afficher la section microphone de l'interface Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Afficher la section de contrôle des vinyles - + Show the vinyl control section of the Mixxx interface. Afficher la section de contrôle des vinyles de l'interface Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Afficher la platine de pré-écoute - + Show the preview deck in the Mixxx interface. Afficher la platine de pré-écoute dans l'interface de Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Afficher la pochette d'album - + Show cover art in the Mixxx interface. Afficher la pochette d'album dans l'interface Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximiser la bibliothèque - + Maximize the track library to take up all the available screen space. Maximise la bibliothèque de pistes pour occuper tout l'espace d'écran disponible - + Space Menubar|View|Maximize Library Espace - + &Full Screen Plein &écran - + Display Mixxx using the full screen Afficher Mixxx en plein écran - + &Options &Options - + &Vinyl Control Contrôle &Vinyle - + Use timecoded vinyls on external turntables to control Mixxx Utiliser des disques vinyles avec timecode sur un tourne-disque externe pour contrôler Mixxx - + Enable Vinyl Control &%1 Activer le Contrôle Vinyle &%1 - + &Record Mix &Enregistrer le Mix - + Record your mix to a file Enregistrer votre mix dans un fichier - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activer la Diffusion en Direct (&Broadcast) - + Stream your mixes to a shoutcast or icecast server Diffuser vos mixages via un serveur shoutcast ou icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activer les Raccourcis Clavier (&K) - + Toggles keyboard shortcuts on or off Active/désactive les raccourcis claviers - + Ctrl+` Ctrl+` - + &Preferences &Préférences - + Change Mixxx settings (e.g. playback, MIDI, controls) Modifier les paramètres de Mixxx (par ex. lecture, MIDI, contrôleurs) - + &Developer &Développeur - + &Reload Skin &Recharger le thème - + Reload the skin Recharger le thème - + Ctrl+Shift+R Ctrl+Maj+R - + Developer &Tools Ou&Tils de développement - + Opens the developer tools dialog Ouvre le panneau d'outils de dévelopement - + Ctrl+Shift+T Ctrl+Maj+T - + Stats: &Experiment Bucket Statistiques : Paquet &Expérimental - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Active le mode expérimental. Collecte des statistiques dans le paquet de suivi EXPERIMENTAL. - + Ctrl+Shift+E Ctrl+Maj+E - + Stats: &Base Bucket Statistiques : Paquet de &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Active le mode basique. Collecte des statistiques dans le paquet de suivi BASIQUE. - + Ctrl+Shift+B Ctrl+Maj+B - + Deb&ugger Enabled Débogueur activé (&U) - + Enables the debugger during skin parsing Active le debogueur pendant l'analyse syntaxique des apparences - + Ctrl+Shift+D Ctrl+Maj+D - + &Help &Aide - + Show Keywheel menu title Afficher la roue de tonalités @@ -16071,74 +16123,74 @@ Cette opération est irréversible ! Exporter la bibliothèque au format Engine DJ - + Show keywheel tooltip text Afficher la roue de tonalités - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Support &communautaire - + Get help with Mixxx Obtenir de l'aide sur Mixxx - + &User Manual &Manuel utilisateur - + Read the Mixxx user manual. Lire le manuel utilisateur de Mixxx - + &Keyboard Shortcuts &Raccourcis clavier - + Speed up your workflow with keyboard shortcuts. Gagnez en rapidité avec les raccourcis clavier. - + &Settings directory Répertoire des paramètres - + Open the Mixxx user settings directory. Ouvrez le répertoire des paramètres utilisateur Mixxx. - + &Translate This Application &Traduire cette application - + Help translate this application into your language. Aidez à traduire cette application dans votre langage. - + &About À &propos - + About the application A propos de l'application @@ -16173,25 +16225,13 @@ Cette opération est irréversible ! WSearchLineEdit - - Clear input - Clear the search bar input field - Efface la saisie - - - - Ctrl+F - Search|Focus - CTRL+F - - - + Search noun Rechercher - + Clear input Efface la saisie @@ -16202,93 +16242,87 @@ Cette opération est irréversible ! Rechercher... - + Clear the search bar input field Effacer le champ de saisie de la barre de recherche - - Enter a string to search for - Entrer un élément à rechercher + + Return + Retour arrière - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Utilisez des opérateurs tels que bpm: 115-128, artiste: BooFar, -year: 1990 + + Enter a string to search for. + Entrer une chaîne à rechercher. - - For more information see User Manual > Mixxx Library - Pour plus d'informations, voir Manuel de l'utilisateur> Bibliothèque Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + Utiliser des opérateurs comme bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Raccourci + See User Manual > Mixxx Library for more information. + Voir le manuel d’utilisation > Bibliothèque Mixxx pour plus d’informations. - - Ctrl+F - CTRL+F + + Focus/Select All (Search in current view) + Give search bar input focus + Focus/Sélectionner tout (Rechercher dans la vue actuelle) - - Focus - Give search bar input focus - Focus + + Focus/Select All (Search in 'Tracks' library view) + Focus/Sélectionner tout (Rechercher dans la vue bibliothèques des 'Pistes') - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + Raccourcis supplémentaires lorsque focalisé : - Shortcuts - Raccourcis + Trigger search before search-as-you-type timeout or focus tracks view afterwards + Déclenche la recherche avant l'expiration du délai de recherche au-fur-et-à-mesure-de-la-frappe ou passe ensuite à l'affichage des pistes - Return - Retour arrière + Esc or Ctrl+Return + Echap ou Ctrl+Retour arrière - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Déclenche la recherche avant l'expiration du délai de recherche au-fur-et-à-mesure-de-la-frappe ou passe ensuite à l'affichage des pistes + Immediately trigger search and focus tracks view + Exit search bar and leave focus + Activer immédiatement la recherche et le focus sur les pistes - + Ctrl+Space Ctrl + Espace - + Toggle search history Shows/hides the search history entries Activer/désactiver l'historique de recherche - + Delete or Backspace Supprimer ou Retour arrière - - Delete query from history - Supprimer la requête de l'historique - - - - Esc - Echap + + in search history + dans l'historique de recherche - - Exit search - Exit search bar and leave focus - Quitte la recherche + + Delete query from history + Supprimer la requête de l'historique @@ -17095,52 +17129,52 @@ Cette opération est irréversible ! mixxx::CoreServices - + fonts polices - + database base de données - + effects effets - + audio interface interface audio - + decks platines - + library bibliothèque - + Choose music library directory Choisissez le répertoire de la bibliothèque musicale - + controllers contrôleurs - + Cannot open database Ne peux ouvrir la base de données - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -17263,7 +17297,7 @@ Cliquez sur OK pour sortir. Exported %1 track(s), %2 crate(s), and %3 playlist(s). - %1 piste(s), %2 bac(s) et %3 liste(s) de lecture ont été exportés + %1 piste(s), %2 bac(s) et %3 listes de lecture ont été exportés diff --git a/res/translations/mixxx_gl.qm b/res/translations/mixxx_gl.qm index 7c3d681a02f7..140e8c292439 100644 Binary files a/res/translations/mixxx_gl.qm and b/res/translations/mixxx_gl.qm differ diff --git a/res/translations/mixxx_gl.ts b/res/translations/mixxx_gl.ts index 26c7c60391a9..c7969a61a090 100644 --- a/res/translations/mixxx_gl.ts +++ b/res/translations/mixxx_gl.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Retirar caixa como orixe da pista - + Auto DJ DJ automático - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Engadir caixa como orixe da pista @@ -149,7 +149,7 @@ BasePlaylistFeature - + New Playlist Nova lista de reprodución @@ -160,7 +160,7 @@ - + Create New Playlist Crear unha nova lista de reprodución @@ -190,113 +190,120 @@ Duplicar - - + + Import Playlist Importar unha lista de reprodución - + Export Track Files Exportar pistas a ficheiros - + Analyze entire Playlist Analizar toda a lista d reprodución - + Enter new name for playlist: Escriba o novo nome para a lista de reprodución - + Duplicate Playlist Duplicar a lista de reprodución - - + + Enter name for new playlist: Escriba o nome para a nova lista de reprodución - - + + Export Playlist Exportar a lista de reprodución - + Add to Auto DJ Queue (replace) Engadir á cola do DJ automático (trocar) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Cambiar o nome da lista de reprodución - - + + Renaming Playlist Failed Produciuse un erro ao cambiarlle o nome a lista de reprodución - - - + + + A playlist by that name already exists. Xa existe unha lista de reprodución con ese nome. - - - + + + A playlist cannot have a blank name. Unha lista de reprodución non pode ter un nome baleiro. - + _copy //: Appendix to default name when duplicating a playlist _copia - - - - - - + + + + + + Playlist Creation Failed Non foi posíbel crear a lista de reprodución - - + + An unknown error occurred while creating playlist: Produciuse un erro descoñecido mentres se creaba a lista de reprodución: - + Confirm Deletion Confimar o borrado - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) Lista de reprodución M3U (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Lista de reprodución M3U (*.m3u);;Lista de reprodución M3U8 (*.m3u8);;Lista de reprodución PLS (*.pls);;Texto CSV (*.csv);;Texto lexíbel (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # Num. - + Timestamp Marca de tempo @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Non foi posíbel cargar a pista. @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Álbum - + Album Artist Interprete do álbum - + Artist Interprete - + Bitrate Taxa de bits - + BPM BPM - + Channels Canles - + Color Cor - + Comment Comentario - + Composer Compositor - + Cover Art Deseño da portada - + Date Added Data de engadido - + Last Played Último reproducido - + Duration Duración - + Type Tipo - + Genre Xénero - + Grouping Agrupación - + Key Clave - + Location Localización - + + Overview + + + + Preview Escoita previa - + Rating Cualificación - + ReplayGain ReplayGain - + Samplerate - + Played Reproducidas - + Title Título - + Track # Pista num. - + Year Ano - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Engadir a ligazóns rápidas - + Remove from Quick Links Retirar de ligazóns rápidas - + Add to Library Engadir a fonoteca - + Refresh directory tree - + Quick Links Ligazóns rápidas - - + + Devices Dispositivos - + Removable Devices Dispositivos extraíbeis - - + + Computer Computador - + Music Directory Added Engadido o directorio de música - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Engadiu un ou máis directorios de música. As pistas destes directorios non estarán dispoñíbeis ata que volva a examinar a fonoteca. Quere examinala agora? - + Scan Examinar - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. «Computador» permítelle navegar, ver, e cargar pistas desde cartafoles no disco ríxido e nos dispositivos externos. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -1046,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume Estabelecer o volume no máximo - + Set to zero volume Estabelecer o volume a cero @@ -1077,13 +1099,13 @@ trace - Above + Profiling messages Botón de desprazamento inverso (Censor) - + Headphone listen button Botón de escoita por auriculares - + Mute button Botón de silencio @@ -1094,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Orientación da mestura (p-ex. esquerda, dereita, centro) - + Set mix orientation to left Estabelecer a orientación da mestura cara a esquerda - + Set mix orientation to center Estabelecer a orientación da mestura no centro - + Set mix orientation to right Estabelecer a orientación da mestura cara a dereita @@ -1153,22 +1175,22 @@ trace - Above + Profiling messages Botón de toque de BPM - + Toggle quantize mode Conmutador do modo de cuantización - + One-time beat sync (tempo only) Sincronizar só unha vez o golpe (só o tempo) - + One-time beat sync (phase only) Sincronizar só unha vez o golpe (só a fase) - + Toggle keylock mode Conmutador do modo de bloqueo tonal @@ -1178,193 +1200,193 @@ trace - Above + Profiling messages Ecualizadores - + Vinyl Control Control do vinilo - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Conmutador do modo de punto de referencia do control de vinilo (APAGADO/UNHA/ACTIVO) - + Toggle vinyl-control mode (ABS/REL/CONST) Conmutador do Control do vinilo (ABS/REL/CONST) - + Pass through external audio into the internal mixer Enviar o son externo ao mesturador interno - + Cues Referencias - + Cue button Botón de punto de referencia - + Set cue point Estabelecer o punto de referencia - + Go to cue point Ir o punto de referencia - + Go to cue point and play Ir o punto de referencia e reproducir - + Go to cue point and stop Ir o punto de referencia e deter - + Preview from cue point Escoita previa do punto de referencia - + Cue button (CDJ mode) Botón de punto de referencia (modo CDJ) - + Stutter cue Referencia repetida (tatexo) - + Hotcues Referencias activas - + Set, preview from or jump to hotcue %1 Estabelecer, preescoitar ou ir á referencia activa %1 - + Clear hotcue %1 Limpar a referencia activa %1 - + Set hotcue %1 Estabelecer a referencia activa %1 - + Jump to hotcue %1 Saltar á referencia activa %1 - + Jump to hotcue %1 and stop Saltar á referencia activa %1 e deter - + Jump to hotcue %1 and play Saltar á referencia activa %1 e reproducir - + Preview from hotcue %1 Escoita previa desde a referencia activa %1 - - + + Hotcue %1 Referencia activa %1 - + Looping Repetición en bucle - + Loop In button Botón para o comezo do bucle - + Loop Out button Botón para a fin do bucle - + Loop Exit button Botón de saída do bucle - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats Mover o bucle cara diante en %1 golpes - + Move loop backward by %1 beats Mover o bucle cara atrás en %1 golpes - + Create %1-beat loop Crear un bucle de %1 golpes - + Create temporary %1-beat loop roll Crear un bucle temporal constante de %1 golpes @@ -1480,20 +1502,20 @@ trace - Above + Profiling messages - - + + Volume Fader Control de volume - + Full Volume Volume máximo - + Zero Volume Volume cero @@ -1509,7 +1531,7 @@ trace - Above + Profiling messages - + Mute Silenciar @@ -1520,7 +1542,7 @@ trace - Above + Profiling messages - + Headphone Listen Escoita por auriculares @@ -1541,25 +1563,25 @@ trace - Above + Profiling messages - + Orientation Orientación - + Orient Left Orientar cara a esquerda - + Orient Center Orientar ao centro - + Orient Right Orientar cara a dereita @@ -1629,82 +1651,82 @@ trace - Above + Profiling messages Axustar a grella do ritmo cara a dereita - + Adjust Beatgrid Axustar a grella do ritmo - + Align beatgrid to current position Aliñar a grella do ritmo á posición actual - + Adjust Beatgrid - Match Alignment Axustar a grella do ritmo, deixala aliñada - + Adjust beatgrid to match another playing deck. Axustar a grella do ritmo para que coincida co outro prato en reprodución - + Quantize Mode Modo de cuantización - + Sync Sincronizar - + Beat Sync One-Shot Sincroniza o ritmo ao premer - + Sync Tempo One-Shot Sincroniza o tempo ao premer - + Sync Phase One-Shot Sincroniza a fase ao premer - + Pitch control (does not affect tempo), center is original pitch Control de ton (non afecta ao tempo), no centro está o ton orixinal - + Pitch Adjust Axuste de ton - + Adjust pitch from speed slider pitch Axuste o ton dende o esvarador de ton - + Match musical key Coincidir coa clave musical - + Match Key Coincidir coa clave - + Reset Key Restabelecer a clave - + Resets key to original Restabelecer a clave á orixinal @@ -1745,451 +1767,451 @@ trace - Above + Profiling messages EQ graves - + Toggle Vinyl Control Conmutador do Control do vinilo - + Toggle Vinyl Control (ON/OFF) Conmutador do Control do vinilo (acendido/apagado) - + Vinyl Control Mode Modo do Control do vinilo - + Vinyl Control Cueing Mode Modo de Control dos puntos de referencia con vinilo - + Vinyl Control Passthrough Paso do son de entrada do Control do vinilo - + Vinyl Control Next Deck Control do vinilo ao seguinte prato - + Single deck mode - Switch vinyl control to next deck Modo de prato único - Pasar o control do vinilo para o seguinte prato - + Cue Referencia - + Set Cue Estabelecer a referencia - + Go-To Cue Ir á referencia - + Go-To Cue And Play Ir á e reproducir - + Go-To Cue And Stop Ir á referencia e deter - + Preview Cue Escoita previa do punto de referencia - + Cue (CDJ Mode) Punto de referencia (modo CDJ) - + Stutter Cue Referencia repetida (tatexo) - + Go to cue point and play after release Ir á referencia e reproducir após soltar - + Clear Hotcue %1 Limpar a referencia activa %1 - + Set Hotcue %1 Estabelecer a referencia activa %1 - + Jump To Hotcue %1 Saltar á referencia activa %1 - + Jump To Hotcue %1 And Stop Saltar á referencia activa %1 e deter - + Jump To Hotcue %1 And Play Saltar á referencia activa %1 e reproducir - + Preview Hotcue %1 Escoita previa da referencia activa %1 - + Loop In Inicio do bucle - + Loop Out Fin do bucle - + Loop Exit Saír do bucle - + Reloop/Exit Loop Repetir/saír do bucle - + Loop Halve Divide o bucle á metade - + Loop Double Duplica a lonxitude do bucle - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats Mover o bucle +%1 golpes - + Move Loop -%1 Beats Mover o bucle -%1 golpes - + Loop %1 Beats Bucle de %1 golpes - + Loop Roll %1 Beats Bucle corredizo de %1 golpes - + Add to Auto DJ Queue (bottom) Engadir á cola de DJ automático (abaixo) - + Append the selected track to the Auto DJ Queue Engade as pistas seleccionadas na fin da cola de Auto DJ - + Add to Auto DJ Queue (top) Engadir á cola de DJ automático (arriba) - + Prepend selected track to the Auto DJ Queue Engade as pistas seleccionadas no principio da cola de Auto DJ - + Load Track Cargara pista - + Load selected track Cargar a pista seleccionada - + Load selected track and play Cargar a pista seleccionada e reproducila - - + + Record Mix Gravar a mestura - + Toggle mix recording Conmutador da gravación da mestura - + Effects Efectos - + Quick Effects Efectos rápidos - + Deck %1 Quick Effect Super Knob Súper mando de efecto rápido do prato %1 - + Quick Effect Super Knob (control linked effect parameters) Súper mando de efecto rápido (parámetros de efecto asociado ao control) - - + + Quick Effect Efecto rápido - + Clear Unit Limpar a unidade - + Clear effect unit Limpar a unidade de efectos - + Toggle Unit Conmutador da unidade - + Dry/Wet Directo/Procesado - + Adjust the balance between the original (dry) and processed (wet) signal. Axusta o equilibrio entre o sinal orixinal (dry) e o procesado (wet). - + Super Knob Súper mando - + Next Chain Seguinte cadea - + Assign Asignar - + Clear Limpar - + Clear the current effect Limpar o efecto actual - + Toggle Conmutar - + Toggle the current effect Conmutador do efecto actual - + Next Seguinte - + Switch to next effect Pasa ao efecto seguinte - + Previous Anterior - + Switch to the previous effect Pasa ao efecto anterior - + Next or Previous Seguinte ou anterior - + Switch to either next or previous effect Pasa ao anterior ou seguinte efecto - - + + Parameter Value Valor do parámetro - - + + Microphone Ducking Strength Intensidade da atenuación do micrófono - + Microphone Ducking Mode Modo de atenuación do micrófono - + Gain Ganancia - + Gain knob Mando da ganancia - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle Conmutador do DJ automático - + Toggle Auto DJ On/Off Conmutador do DJ automático acender/apagar - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore Maximiza/Restaura a vista da fonoteca - + Maximize the track library to take up all the available screen space. Maximiza ou restaura a vista da fonoteca per abarcar toda a pantalla - + Effect Rack Show/Hide Amosar/agachar a caixa de efectos - + Show/hide the effect rack Amosar/agachar a caixa de efectos - + Waveform Zoom Out Afastar o zoom da forma da onda @@ -2204,102 +2226,102 @@ trace - Above + Profiling messages Ganancia dos auriculares - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Velocidade de reprodución - + Playback speed control (Vinyl "Pitch" slider) Control de velocidade de reprodución (O ton do vinilo) - + Pitch (Musical key) Ton (clave musical) - + Increase Speed Incrementar a velocidade - + Adjust speed faster (coarse) Axuste da velocidade rápida (basto) - + Increase Speed (Fine) Incrementar a velocidade (fino) - + Adjust speed faster (fine) Axuste da velocidade rápida (fino) - + Decrease Speed Diminuir a velocidade - + Adjust speed slower (coarse) Axuste da velocidade lenta (basto) - + Adjust speed slower (fine) Axuste da velocidade lenta (fino) - + Temporarily Increase Speed Incremento temporal da velocidade - + Temporarily increase speed (coarse) Incremento temporal da velocidade (basto) - + Temporarily Increase Speed (Fine) Incremento temporal da velocidade (fino) - + Temporarily increase speed (fine) Incremento temporal da velocidade (fino) - + Temporarily Decrease Speed Diminución temporal da velocidade - + Temporarily decrease speed (coarse) Diminución temporal da velocidade (basto) - + Temporarily Decrease Speed (Fine) Diminución temporal da velocidade (fino) - + Temporarily decrease speed (fine) Diminución temporal da velocidade (fino) @@ -2451,1053 +2473,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock Bloqueo tonal - + CUP (Cue + Play) CUP (Punto de referencia + Reproducir) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - - + + Sort hotcues by position - - + + Sort hotcues by position (remove offsets) - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up Mover cara arriba - + Equivalent to pressing the UP key on the keyboard Equivalente a premer la tecla frecha ARRIBA no teclado - + Move down Mover cara abaixo - + Equivalent to pressing the DOWN key on the keyboard Equivalente a premer la tecla frecha ABAIXO no teclado - + Move up/down Mover cara arriba/abaixo - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys Mover verticalmente en calquera dirección usando un mando, como se se premeran as teclas frecha ARRIBA/ABAIXO - + Scroll Up Páxina arriba - + Equivalent to pressing the PAGE UP key on the keyboard Equivalente a premer a tecla de páxina arriba (RePáx) no teclado - + Scroll Down Páxina abaixo - + Equivalent to pressing the PAGE DOWN key on the keyboard Equivalente a premer a tecla de páxina abaixo (AvPáx) no teclado - + Scroll up/down Páxina arriba/abaixo - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys Mover verticalmente en calquera dirección usando un mando, como se se premeran as teclas de avance/retroceso de páxina (RePáx/AvPáx) - + Move left Mover cara a esquerda - + Equivalent to pressing the LEFT key on the keyboard Equivalente a premer la tecla frecha ESQUERDA no teclado - + Move right Mover cara a dereita - + Equivalent to pressing the RIGHT key on the keyboard Equivalente a premer la tecla frecha DEREITA no teclado - + Move left/right Mover cara a esquerda/dereita - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys Mover verticalmente en calquera dirección usando un mando, como se se premeran as teclas frecha ESQUERDA/DEREITA - + Move focus to right pane Mover o foco para o panel dereito - + Equivalent to pressing the TAB key on the keyboard Equivalente a premer la tecla TABULADOR no teclado - + Move focus to left pane Mover o foco para o panel esquerdo - + Equivalent to pressing the SHIFT+TAB key on the keyboard Equivalente a premer as teclas MAIÚS+ TABULADOR no teclado - + Move focus to right/left pane Mover o foco para o panel esquerdo/dereito - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys Mover o foco para o panel esquerdo ou dereito usando un mando, como se se premera TABULADOR/MAIÚS+TABULADOR - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) Engadir á cola do DJ automático (trocar) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing Activar ou desactivar o procesado de efectos - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset Seguinte axuste previo de cadea - + Previous Chain Cadea anterior - + Previous chain preset Anterior axuste previo de cadea - + Next/Previous Chain Cadea seguinte/anterior - + Next or previous chain preset Seguinte ou anterior axuste previo de cadea - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary Micrófono / Auxiliar - + Microphone On/Off Micrófono acender/apagar - + Microphone on/off Micrófono acender/apagar - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) Conmutador do modo de atenuación de micrófono (APAGADO, AUTO, MANUAL) - + Auxiliary On/Off Auxiliar acender/apagar - + Auxiliary on/off Auxiliar acender/apagar - + Auto DJ DJ automático - + Auto DJ Shuffle DJ automático ao chou - + Auto DJ Skip Next Omitir a seguinte no DJ automático - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next Esvaecer para a seguinte no DJ automático - + Trigger the transition to the next track Disparar a transición á pista seguinte - + User Interface Interface de usuario - + Samplers Show/Hide Amosar/agachar o reprodutor de mostras - + Show/hide the sampler section Amosar/agachar a sección do reprodutor de mostras - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide Amosar/agochar o Control do vinilo - + Show/hide the vinyl control section Amosar/agachar a sección do Control do vinilo - + Preview Deck Show/Hide Amosar/agochar a escoita previa do prato - + Show/hide the preview deck Amosar/agachar a escoita previa do prato - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide Amosar/agachar o trebello do vinilo xiratorio - + Show/hide spinning vinyl widget Amosar/agachar o trebello do vinilo xiratorio - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom Zoom da forma da onda - + Waveform Zoom Zoom da forma da onda - + Zoom waveform in Achegar o zoom da forma da onda - + Waveform Zoom In Achegar o zoom da forma da onda - + Zoom waveform out Afastar o zoom da forma da onda - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3612,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Tente recuperar reiniciando a controladora. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. É necesario arranxar o código do script @@ -3745,7 +3777,7 @@ trace - Above + Profiling messages Importar un caixón - + Export Crate Exportar un caixón @@ -3755,7 +3787,7 @@ trace - Above + Profiling messages Desbloquear - + An unknown error occurred while creating crate: Produciuse un erro descoñecido ao crear o caixón: @@ -3764,12 +3796,6 @@ trace - Above + Profiling messages Rename Crate Cambiar o nome do caixón - - - - Export to Engine Prime - - Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. @@ -3787,17 +3813,17 @@ trace - Above + Profiling messages Non foi posíbel cambiarlle o nome ao caixón - + Crate Creation Failed Non foi posíbel crear o caixón - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Lista de reprodución M3U (*.m3u);;Lista de reprodución M3U8 (*.m3u8);;Lista de reprodución PLS (*.pls);;Texto CSV (*.csv);;Texto lexíbel (*.txt) - + M3U Playlist (*.m3u) Lista de reprodución M3U (*.m3u) @@ -3806,6 +3832,12 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. Os caixóns son un xeito excelente de axudarlle a organizar a música que quere mesturar. + + + + Export to Engine DJ + + Crates let you organize your music however you'd like! @@ -3917,12 +3949,12 @@ trace - Above + Profiling messages Colaboradores anteriores - + Official Website - + Donate @@ -4434,37 +4466,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Se non funciona a asignación, probe a activar un dos controles avanzados seguintes e probe de novo. Tamén pode volver detectar o control. - + Didn't get any midi messages. Please try again. Non se detectou ningunha mensaxe MIDI. Tenteo de novo. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. Non é posíbel detectar unha asignación -- Tenteo de novo. Asegúrese de tocar só un control de vez. - + Successfully mapped control: Control asignado correctamente: - + <i>Ready to learn %1</i> <i>Preparado para aprender sobre %1</i> - + Learning: %1. Now move a control on your controller. Aprendendor: %1. Agora mova un control do seu controlador. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4503,17 +4535,17 @@ You tried to learn: %1,%2 Envorcar a csv - + Log Rexistro - + Search Buscar - + Stats Estatísticas @@ -5166,114 +5198,114 @@ associated with each key. DlgPrefController - + Apply device settings? Aplicar os axustes do dispositivo? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Deben aplicarse os axustes antes de iniciar o asistente de aprendizaxe. Aplicar os axustes e continuar? - + None Ningún - + %1 by %2 %1 de %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting Solución de problemas - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings Limpar as asignacións de entrada - + Are you sure you want to clear all input mappings? Confirma que quere limpar todas as asignacións de entrada? - + Clear Output Mappings Limpar as asignacións de saída - + Are you sure you want to clear all output mappings? Confirma que quere limpar todas as asignacións de saída? @@ -5291,100 +5323,100 @@ Aplicar os axustes e continuar? Activado - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Descrición: - + Support: Asistencia: - + Screens preview - + Input Mappings Asignacións de entrada - - + + Search Buscar - - + + Add Engadir - - + + Remove Retirar @@ -5404,17 +5436,17 @@ Aplicar os axustes e continuar? - + Mapping Info - + Author: Autor: - + Name: Nome: @@ -5424,28 +5456,28 @@ Aplicar os axustes e continuar? Asistente de aprendizaxe (só MIDI) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Limpar todo - + Output Mappings Asignacións de saída @@ -5604,6 +5636,16 @@ Aplicar os axustes e continuar? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6195,62 +6237,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. O tamaño mínimo do tema seleccionado é maior que a resolución da súa pantalla. - + Allow screensaver to run Permitir que se execute o protector de pantallas - + Prevent screensaver from running Impide que se execute o protector de pantallas - + Prevent screensaver while playing Impide que se execute o protector de pantallas durante a reprodución - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Este tema non admite esquemas de cor - + Information Información - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7417,173 +7459,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) Predeterminado (máis retardado) - + Experimental (no delay) Experimental (sen retardo) - + Disabled (short delay) Desactivado (pouco retardo) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled Desactivado - + Enabled Activado - + Stereo Estéreo - + Mono Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. A planificación en tempo real está activada. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Produciuse un erro de configuración @@ -7601,131 +7642,131 @@ The loudness target is approximate and assumes track pregain and main output lev API de son - + Sample Rate Taxa de mostraxe - + Audio Buffer Búfer de son - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds ms - + 20 ms 20 ms - + Buffer Underflow Count Contador de desbordamento do búfer - + 0 0 - + Keylock/Pitch-Bending Engine Motor de bloqueo tonal/pregado do ton - + Multi-Soundcard Synchronization Sincronización con múltiples tarxetas de son - + Output Saída - + Input Entrada - + System Reported Latency Latencia informada polo sistema - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. Aumente búfer de son se o contador de desbordamento está aumentando ou escoita chascar durante a reprodución. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics Consellos e diagnósticos - + Downsize your audio buffer to improve Mixxx's responsiveness. Reduza u búfer de son para mellorar a velocidade de resposta do Mixxx. - + Query Devices Consulta a dispositivos @@ -8171,47 +8212,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Hardware de son - + Controllers Controladores - + Library Fonoteca - + Interface Interface - + Waveforms Formas de onda - + Mixer Mesturador - + Auto DJ DJ automático - + Decks - + Colors @@ -8246,47 +8287,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Efectos - + Recording Gravando - + Beat Detection Detección de ritmo - + Key Detection Detección de clave musical - + Normalization Normalización - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Control do vinilo - + Live Broadcasting Difusión en directo - + Modplug Decoder Descodificador do Modplug @@ -8642,284 +8683,284 @@ This can not be undone! Resumo - + Filetype: Tipo de ficheiro: - + BPM: BPM: - + Location: Localización: - + Bitrate: Taxa de bits: - + Comments Comentarios - + BPM BPM - + Sets the BPM to 75% of the current value. Estabelece os BPM ao 75% do valor detectado. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. Estabelece os BPM ao 50% do valor actual. - + Displays the BPM of the selected track. Amosar os BPM da pista seleccionada. - + Track # Pista num. - + Album Artist Interprete do álbum - + Composer Compositor - + Title Título - + Grouping Agrupación - + Key Clave - + Year Ano - + Artist Interprete - + Album Álbum - + Genre Xénero - + ReplayGain: ReplayGain: - + Sets the BPM to 200% of the current value. Estabelece os BPM ao 200% do valor actual. - + Double BPM Duplicar os BPM - + Halve BPM Dividir ÷2 os BPM - + Clear BPM and Beatgrid Limpar os BPM e a grella de ritmo - + Move to the previous item. "Previous" button Mover ao elemento anterior - + &Previous &Anterior - + Move to the next item. "Next" button Mover ao seguinte elemento - + &Next &Seguinte - + Duration: Duración: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color Cor - + Date added: - + Open in File Browser Abrir no navegador de ficheiros - + Samplerate: - + Track BPM: BPM da pista: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo Asumir tempo constante - + Sets the BPM to 66% of the current value. Estabelece os BPM ao 66% do valor actual. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. Estabelece os BPM ao 150% do valor actual. - + 3/2 BPM 3/2 BPM - + Sets the BPM to 133% of the current value. Estabelece os BPM ao 133% do valor actual. - + 4/3 BPM 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. Golpee seguindo o ritmo para estabelecer os BPM. - + Tap to Beat Toque para golpe de ritmo - + Hint: Use the Library Analyze view to run BPM detection. Consello: Use a vista de análise na fototeca para executar a detección de BPM. - + Save changes and close the window. "OK" button Gardar os cambios e pechar a xanela. - + &OK &Aceptar - + Discard changes and close the window. "Cancel" button Desbotar os cambios e pechar a xanela. - + Save changes and keep the window open. "Apply" button Gardar os cambios e manter a xanela aberta. - + &Apply A&plicar - + &Cancel &Cancelar - + (no color) @@ -9076,7 +9117,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9278,27 +9319,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) Soundtouch (rápido) - + Rubberband (better) Rubberband (mellor) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9513,15 +9554,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. Modo seguro activado - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9533,57 +9574,57 @@ Shown when VuMeter can not be displayed. Please keep OpenGL. - + activate activar - + toggle conmutar - + right dereita - + left esquerda - + right small dereita pequeno - + left small esquerda pequeno - + up arriba - + down abaixo - + up small arriba pequeno - + down small abaixo pequeno - + Shortcut Atallo @@ -9591,62 +9632,62 @@ OpenGL. Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9656,22 +9697,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Importar unha lista de reprodución - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Ficheiros de lista de reprodución (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9718,27 +9759,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found Non se atoparon os controis do Mixxx - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9798,18 +9839,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Non se atopan as pistas - + Hidden Tracks Pistas agachadas - Export to Engine Prime + Export to Engine DJ @@ -9821,209 +9862,250 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy O dispositivo de son está ocupado - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Tenteo de novo</b> despois de pechar o outro aplicativo ou de volver conectar un dispositivo de son - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Reconfigurar</b> os axustes do dispositivo de son do Mixxx. - - + + Get <b>Help</b> from the Mixxx Wiki. Obter <b>axuda</b> no wiki de Mixxx. - - - + + + <b>Exit</b> Mixxx. <b>Saír</b> do Mixxx. - + Retry Tentar de novo - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Volver configurar - + Help Axuda - - + + Exit Saír - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error Produciuse un erro no dispositivo de son - + <b>Retry</b> after fixing an issue - + No Output Devices Non hai dispositivos de saída - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Mixxx foi configurado sen ningún dispositivo de saída de son. Se non hai configurado.un dispositivo de saída de son o procesado será desactivado. - + <b>Continue</b> without any outputs. <b>Continuar</b> sen ningunha saída. - + Continue Continuar - + Load track to Deck %1 Cargar a pista no prato %1 - + Deck %1 is currently playing a track. O prato %1 está a reproducir unha pista. - + Are you sure you want to load a new track? Confirma que quere cargar unha nova pista? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Non hai ningún dispositivo de entrada seleccionado para este control de paso. Seleccione antes un dispositivo de entrada nas preferencias de hardware de son. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Produciuse un erro no ficheiro do tema - + The selected skin cannot be loaded. Non foi posíbel cargar o tema seleccionado. - + OpenGL Direct Rendering Debuxado directo OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Confirmar a saída - + A deck is currently playing. Exit Mixxx? O prato está reproducindo. Saír do Mixxx? - + A sampler is currently playing. Exit Mixxx? Un mostreador está reproducindo actualmente. Saír dp Mixxx? - + The preferences window is still open. A xanela de preferencias segue aberta. - + Discard any changes and exit Mixxx? Desbotar calquera cambio e saír do Mixxx? @@ -10039,13 +10121,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Bloquear - - + + Playlists Listas de reprodución @@ -10055,32 +10137,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Desbloquear - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Algúns DJ constrúen listas de reprodución antes de actuar en directo, outros prefiren facelo ao voo. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Cando se utiliza unha lista de reprodución durante una sesión de DJ en directo, lembre que debe observar sempre con moita atención como reacciona o público á música que escolleu para reproducir. - + Create New Playlist Crear unha nova lista de reprodución @@ -11571,7 +11679,7 @@ Fully right: end of the effect period - + Deck %1 Prato %1 @@ -11704,7 +11812,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Pasante @@ -11735,7 +11843,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11868,12 +11976,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11908,42 +12016,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12001,54 +12109,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Listas de reprodución - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12607,7 +12715,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl Vinilo xirando @@ -12789,7 +12897,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Deseño da portada @@ -13025,197 +13133,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap Toque de tempo e BPM - + Show/hide the spinning vinyl section. Amosar/agachar a sección do vinilo xiratorio. - + Keylock Bloqueo tonal - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play Reproducir - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13453,926 +13561,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - - + + Drag a Hotcue button here to continue playing after releasing the Hotcue. - + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank Gardar o banco de mostras - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank Cargar o banco de mostras - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob Súper mando - + Next Chain Seguinte cadea - + Previous Chain Cadea anterior - + Next/Previous Chain Cadea seguinte/anterior - + Clear Limpar - + Clear the current effect. - + Toggle Conmutar - + Toggle the current effect. - + Next Seguinte - + Clear Unit Limpar a unidade - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit Conmutador da unidade - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Anterior - + Switch to the previous effect. - + Next or Previous Seguinte ou anterior - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Axustar a grella do ritmo - + Adjust beatgrid so the closest beat is aligned with the current play position. Axusta grella de ritmo polo que o ritmo máis próximo aliñase coa reprodución actual. - - + + Adjust beatgrid to match another playing deck. Axustar a grella do ritmo para que coincida co outro prato en reprodución - + If quantize is enabled, snaps to the nearest beat. Se está activada a cuantización, acóplase ao ritmo máis próximo. - + Quantize Cuantizar - + Toggles quantization. Conmutar o modo de cuantización. - + Loops and cues snap to the nearest beat when quantization is enabled. Bucles e referencias axústanse ao ritmo próximo cando a cuantización está activada. - + Reverse Inverter - + Reverses track playback during regular playback. Inverte a reprodución da pista durante unha reprodución normal. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Reproducir/Deter - + Jumps to the beginning of the track. Salta ao principio da pista. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough Activa o paso do son - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14507,33 +14621,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. Reproduce ou detén a pista. - + (while playing) (cando reproduce) @@ -14553,215 +14667,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (cando está detida) - + Cue Referencia - + Headphone Auricular - + Mute Silenciar - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. Sincronizase co primeiro prato (en orde numérica) que estea reproducindo unha pista e teña BPM. - + If no deck is playing, syncs to the first deck that has a BPM. Se non hai un prato reproducindo, sincronizase co primeiro prato que teña BPM. - + Decks can't sync to samplers and samplers can only sync to decks. Os pratos non poden sincronizar con mostreadores e os mostreadores só poden sincronizar con pratos. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust Axuste de ton - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + Drag this button onto a Play button while previewing to continue playback after release. - + Dragging with Shift key pressed will not start previewing the hotcue. - + Record Mix Gravar a mestura - + Toggle mix recording. - + Enable Live Broadcasting Activar a difusión en directo - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. A reprodución retomase cando corresponda na pista como se non houbera entrado no bucle. - + Loop Exit Saír do bucle - + Turns the current loop off. Apaga o bucle actual. - + Slip Mode Modo de esvaramento - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. Cando está activado, a reprodución continua silenciosa en segundo plano durante un bucle, inversión de xiro, rabuñada, etc. - + Once disabled, the audible playback will resume where the track would have been. Unha vez desactivado, a reprodución sonora retomarase na pista na que debera estar. - + Track Key The musical key of a track Clave da pista - + Displays the musical key of the loaded track. Amosa a clave musical da pista cargada. - + Clock Reloxo - + Displays the current time. Amosa o tempo actual. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14806,254 +14920,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind Retroceso rápido - + Fast rewind through the track. Retroceder rápido na pista. - + Fast Forward Avance rápido - + Fast forward through the track. Avance rápido na pista. - + Jumps to the end of the track. Salta á fin da pista. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control Control do ton - + Pitch Rate Taxa de ton - + Displays the current playback rate of the track. Amosa a taxa de reprodución actual da pista. - + Repeat Repetición - + When active the track will repeat if you go past the end or reverse before the start. Cando está activada, a pista repetirase se sobrepasa a fin ou cara atrás antes do inicio. - + Eject Expulsar - + Ejects track from the player. Expulsa a pista do reprodutor. - + Hotcue Referencia activa - + If hotcue is set, jumps to the hotcue. Se está estabelecida a referencia activa, salta á referencia activa. - + If hotcue is not set, sets the hotcue to the current play position. Se non está estabelecida a referencia activa, estabelece a referencia activa na posición de reprodución actual. - + Vinyl Control Mode Modo do Control do vinilo - + Absolute mode - track position equals needle position and speed. Modo absoluto - a posición da pista é igual a posición e velocidade da agulla. - + Relative mode - track speed equals needle speed regardless of needle position. Modo relativo - a velocidade da pista é igual á velocidade da agulla sen importar a posición da agulla. - + Constant mode - track speed equals last known-steady speed regardless of needle input. Modo constante - a velocidade da pista é igual á última velocidade constante coñecida, independentemente da entrada da agulla. - + Vinyl Status Estado do vinilo - + Provides visual feedback for vinyl control status: Fornece información visual para o estado do control do vinilo: - + Green for control enabled. Verde para o control activado. - + Blinking yellow for when the needle reaches the end of the record. Amarelo intermitente para cando a agulla chega á fin do disco. - + Loop-In Marker Marcador do inicio do bucle - + Loop-Out Marker Marcador da fin do bucle - + Loop Halve Divide o bucle á metade - + Halves the current loop's length by moving the end marker. Divide á metade a lonxitude do bucle actual movendo o marcador da fin. - + Deck immediately loops if past the new endpoint. O prato reinicia inmediatamente o bucle de sobrepasarse o novo punto de fin. - + Loop Double Duplica a lonxitude do bucle - + Doubles the current loop's length by moving the end marker. Duplica a lonxitude do bucle actual movendo o marcador da fin. - + Beatloop Golpe de bucle - + Toggles the current loop on or off. Conmutar o apagado e activado do bucle actual. - + Works only if Loop-In and Loop-Out marker are set. Só funciona se se estabelecen as marcas de inicio fin do de bucle. - + Vinyl Cueing Mode Modo punto de referencia do vinilo - + Determines how cue points are treated in vinyl control Relative mode: Determina como se tratan os puntos de referencia no modo relativo do control do vinilo: - + Off - Cue points ignored. Apagado: Os puntos de referencia son ignorados. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. Unha referencia: Se a agulla fose soltada despois dun punto de referencia, a pista vai buscar ese punto de referencia. - + Track Time Tempo da pista - + Track Duration Duración da pista - + Displays the duration of the loaded track. Amosa a duración da pista cargada. - + Information is loaded from the track's metadata tags. A información cargase desde as etiquetas de metadatos da pista. - + Track Artist Intérprete da pista - + Displays the artist of the loaded track. Amosa o intérprete da pista cargada. - + Track Title Título da pista - + Displays the title of the loaded track. Amosa o título da pista cargada. - + Track Album Álbum da pista - + Displays the album name of the loaded track. Amosa o álbum da pista cargada. - + Track Artist/Title Pista interprete/título - + Displays the artist and title of the loaded track. Amosa o interprete e o título da pista cargada. @@ -15061,12 +15175,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15281,47 +15395,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15446,323 +15560,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crear unha &nova lista de reprodución - + Create a new playlist Crear unha nova lista de reprodución - + Ctrl+n Ctrl+n - + Create New &Crate Crear un novo &caixón - + Create a new crate Crear un novo caixón - + Ctrl+Shift+N Ctrl+Maiús+N - - + + &View &Ver - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. É probábel que non admita todos os temas. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Amosar a sección do micrófono - + Show the microphone section of the Mixxx interface. Amosa a sección do micrófono na interface do Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Amosar a sección do Control do vinilo - + Show the vinyl control section of the Mixxx interface. Amosa a sección do control do vinilo na interface do Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Amosar a escoita previa do prato - + Show the preview deck in the Mixxx interface. Amosar a escoita previa do prato na interface do Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Amosa o deseño da portada - + Show cover art in the Mixxx interface. Amosar o deseño da portada na interface do Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar a fonoteca - + Maximize the track library to take up all the available screen space. Maximiza ou restaura a vista da fonoteca per abarcar toda a pantalla - + Space Menubar|View|Maximize Library Espazo - + &Full Screen &Pantalla completa - + Display Mixxx using the full screen Amosa o Mixxx usando a pantalla completa - + &Options &Opcións - + &Vinyl Control &Control do vinilo - + Use timecoded vinyls on external turntables to control Mixxx Usar vinilos con código de tempo en xira discos externos para controlar Mixxx - + Enable Vinyl Control &%1 Activar o Control do vinilo &%1 - + &Record Mix &Gravar a mestura - + Record your mix to a file Grava a súa mestura a un ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar a &difusión en directo - + Stream your mixes to a shoutcast or icecast server Difundir as súas mesturas a un servidor Shoutcast ou Icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar os atallos do &teclado - + Toggles keyboard shortcuts on or off Conmutar os atallos de teclado activados ou desactivados - + Ctrl+` Ctrl+` - + &Preferences &Preferencias - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambiar os axustes do Mixxx (p.ex. reprodución, MIDI, controles) - + &Developer &Desenvolvedor - + &Reload Skin &Volver cargar o tema - + Reload the skin Volver cargar o tema - + Ctrl+Shift+R Ctrl+Maiús+R - + Developer &Tools &Ferramentas de desenvolvemento - + Opens the developer tools dialog Abre o cadro de diálogo das ferramentas de desenvolvemento - + Ctrl+Shift+T Ctrl+Maiús+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Maiús+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Maiús+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D Ctrl+Maiús+D - + &Help &Axuda - + Show Keywheel menu title @@ -15779,74 +15923,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support Axuda da &comunidade - + Get help with Mixxx Obter axuda con Mixxx - + &User Manual Manual do &usuario - + Read the Mixxx user manual. Lea o manual do usuario do Mixxx. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Traducir este aplicativo - + Help translate this application into your language. Axude a traducir este aplicativo ao seu idioma. - + &About &Sobre - + About the application Sobre o aplicativo @@ -15854,25 +15998,25 @@ This can not be undone! WOverview - + Passthrough Pasante - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15881,25 +16025,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Buscar - + Clear input @@ -15910,169 +16042,163 @@ This can not be undone! Buscar... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Atallo + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Clave - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Interprete - + Album Artist Interprete do álbum - + Composer Compositor - + Title Título - + Album Álbum - + Grouping Agrupación - + Year Ano - + Genre Xénero - + Directory - + &Search selected @@ -16080,620 +16206,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck Prato - + Sampler Mostras - + Add to Playlist Engadir á lista de reprodución - + Crates Caixóns - + Metadata Metadatos - + Update external collections - + Cover Art Deseño da portada - + Adjust BPM - + Select Color - - + + Analyze Analizar - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Engadir á cola de DJ automático (abaixo) - + Add to Auto DJ Queue (top) Engadir á cola de DJ automático (arriba) - + Add to Auto DJ Queue (replace) Engadir á cola do DJ automático (trocar) - + Preview Deck Escoita previa do prato - + Remove Retirar - + Remove from Playlist - + Remove from Crate - + Hide from Library Agachar da fonoteca - + Unhide from Library Amosar da fonoteca - + Purge from Library Purgar da fonoteca - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Propiedades - + Open in File Browser Abrir no navegador de ficheiros - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Cualificación - + Cue Point - - + + Hotcues Referencias activas - + Intro - + Outro - + Key Clave - + ReplayGain ReplayGain - + Waveform - + Comment Comentario - + All Todas - + Sort hotcues by position (remove offsets) - + Sort hotcues by position - + Lock BPM Bloquear os BPM - + Unlock BPM Desbloquear os BPM - + Double BPM Duplicar os BPM - + Halve BPM Dividir ÷2 os BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM 4/3 BPM - + 3/2 BPM 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Prato %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Crear unha nova lista de reprodución - + Enter name for new playlist: Escriba o nome para a nova lista de reprodución - + New Playlist Nova lista de reprodución - - - + + + Playlist Creation Failed Non foi posíbel crear a lista de reprodución - + A playlist by that name already exists. Xa existe unha lista de reprodución con ese nome. - + A playlist cannot have a blank name. Unha lista de reprodución non pode ter un nome baleiro. - + An unknown error occurred while creating playlist: Produciuse un erro descoñecido mentres se creaba a lista de reprodución: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Sorting hotcues of %n track(s) by position (remove offsets) - + Sorting hotcues of %n track(s) by position - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Cancelar - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Pechar - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16709,37 +16840,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16747,37 +16878,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16785,12 +16916,12 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Amosar ou agachar as columnas. - + Shuffle Tracks @@ -16798,52 +16929,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Escolla o directorio da fonoteca - + controllers - + Cannot open database Non é posíbel abrir a base de datos - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16854,68 +16985,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates - + + Playlists + + + + + Selected crates/playlists + + + + Browse Examinar - + Export directory - + Database version - + Export Exportar - + Cancel Cancelar - + Export Library to Engine DJ "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16936,7 +17077,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16946,23 +17087,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_hi_IN.ts b/res/translations/mixxx_hi_IN.ts index 24ee16559a5e..e938c5f3f053 100644 --- a/res/translations/mixxx_hi_IN.ts +++ b/res/translations/mixxx_hi_IN.ts @@ -3643,32 +3643,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -5633,6 +5633,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6224,62 +6234,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes इस स्किन में रंग परियोजना का समर्थन नहीं है - + Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -9560,57 +9570,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9683,22 +9693,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist प्लेलिस्ट आयात करें - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) प्लेलिस्ट फ़ाइलस (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? क्या फ़ाइल के ऊपर लिखें ? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9971,129 +9981,129 @@ Do you really want to overwrite it? - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10115,7 +10125,7 @@ Do you want to select an input device? - + Playlists @@ -10156,27 +10166,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist नई प्लेलिस्ट बनाएं @@ -11800,7 +11810,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -15548,323 +15558,353 @@ This can not be undone! - Create &New Playlist + Search in Current View... + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + + Create &New Playlist + + + + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title @@ -15881,74 +15921,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15983,25 +16023,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - - - - + Search noun - + Clear input @@ -16012,92 +16040,86 @@ This can not be undone! - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history - - - - - Esc + + in search history - - Exit search - Exit search bar and leave focus + + Delete query from history @@ -16905,52 +16927,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_hu.qm b/res/translations/mixxx_hu.qm index 13e00e7c7ea7..e8771895a342 100644 Binary files a/res/translations/mixxx_hu.qm and b/res/translations/mixxx_hu.qm differ diff --git a/res/translations/mixxx_hu.ts b/res/translations/mixxx_hu.ts index 67e16b4bea85..c5691d88cecb 100644 --- a/res/translations/mixxx_hu.ts +++ b/res/translations/mixxx_hu.ts @@ -36,7 +36,7 @@ Clear Auto DJ Queue - Auto DJ lista törlése + Auto DJ-lista ürítése @@ -295,7 +295,7 @@ Do you really want to delete playlist <b>%1</b>? - Biztos törölni akarod a(z) „%1” lejátszólistát? + Biztos törölni akarod a(z) <b>„%1”</b> lejátszólistát? @@ -3644,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Probáld resetelni a controllered - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -5634,6 +5634,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6244,62 +6254,62 @@ Fogd-és-vidd módszerrel mindig másolhatsz lejátszókat. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. A kiválasztott kinézet mérete nagyobb, mint a képernyőd felbontása. - + Allow screensaver to run Képernyővédő engedése - + Prevent screensaver from running Képernyővédő letiltása - + Prevent screensaver while playing Képernyővédő letiltása lejátszás közben - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Ez a kinézet nem támogat színsémákat - + Information Információ - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -9580,57 +9590,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9703,22 +9713,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Lejátszólista importálása - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Lejátszólista típusok - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9988,129 +9998,129 @@ Do you really want to overwrite it? - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10132,7 +10142,7 @@ Do you want to select an input device? - + Playlists Lejátszólista @@ -10173,27 +10183,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Megeshet, hogy ki kell hagynod pár számot az előkészített lejátszólistádból, vagy egyéb számokat is be kell fűznöd, hogy fenntartsd a buli energiaszintjét. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Néhány DJ az élő előadása előtt állít össze lejátszási listákat, míg mások szeretik inkább az előadásuk helyszínén összerakni a sajátjaikat. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Új lejátszólista készítése @@ -11818,7 +11828,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -15566,323 +15576,353 @@ This can not be undone! - Create &New Playlist + Search in Current View... + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + + Create &New Playlist + + + + Create a new playlist Új lejátszólista létrehozása - + Ctrl+n - + Create New &Crate - + Create a new crate Új rekesz készítése - + Ctrl+Shift+N - - + + &View &Nézet - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. Maximalizálja a számkönyvtárat, hogy minden elérhető helyet elfoglaljon a képernyőn. - + Space Menubar|View|Maximize Library - + &Full Screen &Teljes képernyő - + Display Mixxx using the full screen A Mixxx teljes képernyőben mutatása - + &Options &Opciók - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx Használjon időkódos lemezeket a külső lemezjátszókon a Mixxx vezérléséhez - + Enable Vinyl Control &%1 - + &Record Mix &Mix felvétele - + Record your mix to a file A mix rögzítése fileba - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server Közvetítse a mixeit shoutcast vagy icecast serverre - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences &Testreszabás - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help &Súgó - + Show Keywheel menu title @@ -15899,74 +15939,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. A Mixxx felhasználói beállítások könyvtár megnyitása. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application Az alkalmazásról @@ -16001,25 +16041,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun - + Clear input @@ -16030,92 +16058,86 @@ This can not be undone! Keresés... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history - - - - - Esc + + in search history - - Exit search - Exit search bar and leave focus + + Delete query from history @@ -16923,52 +16945,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Válasszon zene gyűjtemény könyvtárat - + controllers - + Cannot open database Az adatbázis megnyitása nem sikerült - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_hy.ts b/res/translations/mixxx_hy.ts index 32191e39eb15..26655fb58d97 100644 --- a/res/translations/mixxx_hy.ts +++ b/res/translations/mixxx_hy.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ Ավտո DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist Փլեյլիստի էքսպորտ @@ -258,13 +258,13 @@ - + Playlist Creation Failed Չհաջողվեց ստեղծել փլեյլիստ - + An unknown error occurred while creating playlist: Անհայտ սխալ ծագեց փլեյլիստի ստեղծման ժամանակ՝ @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Փլեյլիստ (*.m3u);;M3U8 Փլեյլիստ (*.m3u8);;PLS Փլեյլիստ (*.pls);;Տեքստային CSV (*.csv);;Կարդացվեղ տեքստ (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp Թայմստեմպ @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Չկարողացա բացել երգը @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Ալբոմ - + Album Artist - + Artist Արտիստ - + Bitrate Բիթրեյթ - + BPM BPM - + Channels - + Color - + Comment Մեկնաբանություն - + Composer Կոմպոզիտոր - + Cover Art - + Date Added Ավելացման օր - + Last Played - + Duration Տևողություն - + Type Տեսակ - + Genre Ժանր - + Grouping - + Key Բանալի - + Location Վայր - + Preview Նախադիտում - + Rating Վարկանիշ - + ReplayGain - + Samplerate - + Played Երգված - + Title Անուն - + Track # Երգ # - + Year Տարի - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links Ավելացնել Արագ հղումներում - + Remove from Quick Links Հեռացնել Արագ հղումներից - + Add to Library - + Refresh directory tree - + Quick Links - - + + Devices - + Removable Devices - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Ավելացնել ավտո DJ-ի հերթին - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Ավելացնել ավտո DJ-ի հերթին - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Ավտո DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Լոք @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages - + Export Crate - + Unlock - + An unknown error occurred while creating crate: - + Rename Crate + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Փլեյլիստ (*.m3u);;M3U8 Փլեյլիստ (*.m3u8);;PLS Փլեյլիստ (*.pls);;Տեքստային CSV (*.csv);;Կարդացվեղ տեքստ (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. - + A crate by that name already exists. @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Ավտո DJ - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 - + Shoutcast 1 - + Icecast 1 - + MP3 - + Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% - + 16% - + 24% - + 50% - + 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Վերանվանել - + Export - + Delete - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: BPM - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Երգ # - + Album Artist - + Composer Կոմպոզիտոր - + Title Անուն - + Grouping - + Key Բանալի - + Year Տարի - + Artist Արտիստ - + Album Ալբոմ - + Genre Ժանր @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Լոք - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Լոք - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Բանալի - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Արտիստ - + Album Artist - + Composer Կոմպոզիտոր - + Title Անուն - + Album Ալբոմ - + Grouping - + Year Տարի - + Genre Ժանր - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Ավելացնել ավտո DJ-ի հերթին - + Add to Auto DJ Queue (top) Ավելացնել ավտո DJ-ի հերթին - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Ջնջել - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Վարկանիշ - + Cue Point - + Hotcues - + Intro - + Outro - + Key Բանալի - + ReplayGain - + Waveform - + Comment Մեկնաբանություն - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist Նոր փլեյլիստ - - - + + + Playlist Creation Failed Չհաջողվեց ստեղծել փլեյլիստ - + A playlist by that name already exists. Այս անունով փլեյլիստ արդեն կա - + A playlist cannot have a blank name. Փլեյլիստը չի կարող ունենալ դատարկ անուն - + An unknown error occurred while creating playlist: Անհայտ սխալ ծագեց փլեյլիստի ստեղծման ժամանակ՝ - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_id.qm b/res/translations/mixxx_id.qm index 63c46250dc8b..1e841013b713 100644 Binary files a/res/translations/mixxx_id.qm and b/res/translations/mixxx_id.qm differ diff --git a/res/translations/mixxx_id.ts b/res/translations/mixxx_id.ts index 42d1c31e39b5..60ab85e9ed7f 100644 --- a/res/translations/mixxx_id.ts +++ b/res/translations/mixxx_id.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -147,28 +147,28 @@ BasePlaylistFeature - + New Playlist Playlist Baru - + Add to Auto DJ Queue (bottom) Tambahkan ke Auto DJ (bawah) - + Create New Playlist Buat Playlist Baru - + Add to Auto DJ Queue (top) Tambahkan ke Auto DJ (atas) - + Remove Hapus @@ -178,12 +178,12 @@ Ganti Nama - + Lock Kunci - + Duplicate Duplikasi @@ -204,24 +204,24 @@ Analisa Seluruh Playlist - + Enter new name for playlist: Ganti nama baru untuk Playlist ini: - + Duplicate Playlist Duplikasi Playlist - - + + Enter name for new playlist: Masukkan nama baru untuk Playlist ini: - + Export Playlist Ekspor Playlist @@ -231,70 +231,77 @@ - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Ganti Nama Playlist - - + + Renaming Playlist Failed Ganti Nama Playlist Gagal - - - + + + A playlist by that name already exists. Nama playlist tersebut sudah digunakan - - - + + + A playlist cannot have a blank name. Playlist tidak bisa memiliki nama kosong - + _copy //: Appendix to default name when duplicating a playlist _salin - - - - - - + + + + + + Playlist Creation Failed Pembuatan Playlist Tidak Berhasil - - + + An unknown error occurred while creating playlist: Kesalahan yang tidak diketahui terjadi saat membuat playlist: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Playlist M3U (*.m3u);;Playlist M3U8 (*.m3u8);;Playlist PLS (*.pls);;Teks CSV (*.csv);;Teks Terbaca (*.txt) @@ -302,12 +309,12 @@ BaseSqlTableModel - + # # - + Timestamp Penanda waktu @@ -315,7 +322,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Tidak dapat memuat lagu @@ -323,137 +330,142 @@ BaseTrackTableModel - + Album Album - + Album Artist Artis dari Album - + Artist Artis - + Bitrate Bitrasi - + BPM DPM - + Channels - + Color - + Comment Komentar - + Composer Penyusun - + Cover Art Gambar - + Date Added Tanggal Ditambahkan - + Last Played - + Duration Durasi - + Type Jenis - + Genre Aliran - + Grouping Kelompok - + Key Kunci - + Location Tempat - + + Overview + + + + Preview Pratinjau - + Rating Penilaian - + ReplayGain - + Samplerate - + Played Dimainkan - + Title Judul - + Track # Lagu # - + Year Tahun - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -541,67 +553,77 @@ BrowseFeature - + Add to Quick Links Tambahkan ke Link Cepat - + Remove from Quick Links Hapus dari Link Cepat - + Add to Library Tambahkan ke Library - + Refresh directory tree - + Quick Links Link Cepat - - + + Devices Perangkat - + Removable Devices Perangkat Removable - - + + Computer - + Music Directory Added Berkas Musik Ditambahkan - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan Pindai - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -747,87 +769,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -837,27 +859,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1039,13 +1066,13 @@ trace - Above + Profiling messages - + Set to full volume buat jadi volume maksimal - + Set to zero volume buat jadi tidak ada volume @@ -1070,13 +1097,13 @@ trace - Above + Profiling messages - + Headphone listen button Tombol dengar headphone - + Mute button Tombol diam @@ -1087,25 +1114,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Orientasi mix (misalnya kiri, tengah, kanan) - + Set mix orientation to left Jadikan orientasi mix ke kiri - + Set mix orientation to center Jadikan orientasi mix ke tengah - + Set mix orientation to right Jadikan orientasi mix ke kanan @@ -1146,22 +1173,22 @@ trace - Above + Profiling messages Tombol sadap BPM - + Toggle quantize mode Mode pengalihan quantisasi - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode Aktifkan mode Keylock @@ -1171,193 +1198,193 @@ trace - Above + Profiling messages Equalizer - + Vinyl Control Kontrol Vinil - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Pengalihan mode penanda kontrol-vinil (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) Pengalihan mode kontrol-vinil (ABS/REL/CONST) - + Pass through external audio into the internal mixer Sambungkan Audio eksternal ke Mixer internal - + Cues Penanda - + Cue button Tombol penanda - + Set cue point Atur titik penanda - + Go to cue point Lompat ke titik penanda - + Go to cue point and play Lompat ke titik penanda dan play - + Go to cue point and stop Ke titik penanda dan stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues Penanda Utama - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 Hapus penanda tepat %1 - + Set hotcue %1 - + Jump to hotcue %1 Loncat ke penanda tepat %1 - + Jump to hotcue %1 and stop Loncat ke penanda tepat %1 dan stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping Putaran - + Loop In button Tombol Masuk Putaran - + Loop Out button Tombol Keluar Putaran - + Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop Buat %1-putaran ketukan - + Create temporary %1-beat loop roll @@ -1473,20 +1500,20 @@ trace - Above + Profiling messages - - + + Volume Fader - + Full Volume - + Zero Volume @@ -1502,7 +1529,7 @@ trace - Above + Profiling messages - + Mute @@ -1513,7 +1540,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1534,25 +1561,25 @@ trace - Above + Profiling messages - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1622,82 +1649,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1738,451 +1765,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Tambahkan ke Auto DJ (bawah) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Tambahkan ke Auto DJ (atas) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track Muat lagu yang dipilih - + Load selected track and play Buka trek terpilih dan mainkan - - + + Record Mix - + Toggle mix recording - + Effects Efek - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob Tombol tambah - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2197,102 +2224,102 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2444,1041 +2471,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Mikrofon on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface Antarmuka Pengguna - + Samplers Show/Hide - + Show/hide the sampler section Tampilkan/sembunyikan seksi sampler/contoh - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section Tampil/sembunyikan bagian kontrol vinil - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget Tampil/sembunyikan bagian widget vinil - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3593,32 +3642,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3662,13 +3711,13 @@ trace - Above + Profiling messages CrateFeature - + Remove Hapus - + Create New Crate @@ -3678,132 +3727,132 @@ trace - Above + Profiling messages Ganti Nama - - + + Lock Kunci - + Export Crate as Playlist - + Export Track Files - + Duplicate Duplikasi - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Peti - - + + Import Crate Impor Peti - + Export Crate Ekspor Peti - + Unlock Buka Kunci - + An unknown error occurred while creating crate: Kesalahan tidak diketahui terjadi saat membuat peti: - + Rename Crate Ubah nama peti - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Penamaan Peti Gagal - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) Playlist M3U (*.m3u);;Playlist M3U8 (*.m3u8);;Playlist PLS (*.pls);;Teks CSV (*.csv);;Teks Terbaca (*.txt) - + M3U Playlist (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. Peti merupakan cara yang baik membantu mengatur musik yang akan di mix. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! Peti memberi kebebasan Anda mengatur musik seperti yang diinginkan! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Sebuah peti tidak dapat memiliki nama kosong - + A crate by that name already exists. Sebuah peti dengan nama tersebut sudah ada @@ -3898,12 +3947,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -4022,72 +4071,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Detik - + Auto DJ Fade Modes Full Intro + Outro: @@ -4118,80 +4167,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Auto DJ - + Shuffle Acak - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4414,37 +4463,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4483,17 +4532,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -5146,113 +5195,113 @@ associated with each key. DlgPrefController - + Apply device settings? Terapkan pengaturan perangkat? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Tidak ada - + %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5265,105 +5314,105 @@ Apply settings and continue? - + Enabled - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: - + Support: - + Screens preview - + Input Mappings - - + + Search - - + + Add Tambah - - + + Remove Hapus @@ -5378,22 +5427,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5403,28 +5452,28 @@ Apply settings and continue? - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Hapus Semua - + Output Mappings @@ -5583,6 +5632,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6174,62 +6233,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7396,173 +7455,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled - + Stereo Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7580,131 +7638,131 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7859,27 +7917,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7892,250 +7951,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate Tingkat bingkai - - Displays which OpenGL version is supported by the current platform. - Menampilkan versi OpenGL yang didukung oleh platform saat ini. + + OpenGL Status + - - Waveform - + + Displays which OpenGL version is supported by the current platform. + Menampilkan versi OpenGL yang didukung oleh platform saat ini. - + Normalize waveform overview - + Average frame rate - + Visual gain Tambah visual - + Default zoom level Waveform zoom - + Displays the actual frame rate. Menampilkan frame rate yang sebenarnya. - + Visual gain of the middle frequencies Tambahan visual suntuk frekuensi tengah - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low Rendah - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies Tambahan visual suntuk frekuensi tinggi - + Visual gain of the low frequencies Tambahan visual suntuk frekuensi rendah - + High Tinggi - + Global visual gain Tambahan visual global - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. Sinkronkan tingkat tanjak di semua tampilan bentuk gelombang. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8143,47 +8208,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware - + Controllers - + Library Pustaka - + Interface - + Waveforms - + Mixer Mixer - + Auto DJ Auto DJ - + Decks - + Colors @@ -8218,47 +8283,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Efek - + Recording - + Beat Detection - + Key Detection - + Normalization - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Kontrol Vinil - + Live Broadcasting - + Modplug Decoder @@ -8291,22 +8356,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8614,284 +8679,284 @@ This can not be undone! - + Filetype: - + BPM: BPM - + Location: - + Bitrate: - + Comments - + BPM DPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Lagu # - + Album Artist Artis dari Album - + Composer Penyusun - + Title Judul - + Grouping Kelompok - + Key Kunci - + Year Tahun - + Artist Artis - + Album Album - + Genre Aliran - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid Hapus DPM dan Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser Buka di Browser Berkas - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -9048,7 +9113,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9250,27 +9315,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9414,38 +9479,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes - + Select your iTunes library - + (loading) iTunes - + Use Default Library - + Choose Library... - + Error Loading iTunes Library - + There was an error loading your iTunes library. Check the logs for details. @@ -9453,12 +9518,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9466,18 +9531,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9485,15 +9550,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9504,57 +9569,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9562,62 +9627,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9627,22 +9692,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Impor Playlist - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Berkas Daftar putar (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9689,27 +9754,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9769,18 +9834,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9792,208 +9857,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10009,13 +10115,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Kunci - - + + Playlists @@ -10025,32 +10131,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Buka Kunci - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Buat Playlist Baru @@ -11541,7 +11673,7 @@ Fully right: end of the effect period - + Deck %1 Deck %1 @@ -11674,7 +11806,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11705,7 +11837,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11838,12 +11970,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11878,42 +12010,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11971,54 +12103,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12153,19 +12285,19 @@ may introduce a 'pumping' effect and/or distortion. Kunci - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12577,7 +12709,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12759,7 +12891,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Gambar @@ -12995,197 +13127,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13423,924 +13555,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14475,33 +14615,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14521,205 +14661,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue - + Headphone - + Mute - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14764,254 +14914,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat - + When active the track will repeat if you go past the end or reverse before the start. - + Eject - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist - + Displays the artist of the loaded track. - + Track Title - + Displays the title of the loaded track. - + Track Album Album - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -15019,12 +15169,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15032,47 +15182,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15244,47 +15389,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15408,407 +15553,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view - + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15816,25 +15992,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15843,25 +16019,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun - + Clear input @@ -15872,169 +16036,163 @@ This can not be undone! Pencarian... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Kunci - + harmonic with %1 - + BPM DPM - + between %1 and %2 - + Artist Artis - + Album Artist Artis dari Album - + Composer Penyusun - + Title Judul - + Album Album - + Grouping Kelompok - + Year Tahun - + Genre Aliran - + Directory - + &Search selected @@ -16042,599 +16200,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist Tambah ke Daftar Putar - + Crates Peti - + Metadata - + Update external collections - + Cover Art Gambar - + Adjust BPM - + Select Color - - + + Analyze Menganalisis - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Tambahkan ke Auto DJ (bawah) - + Add to Auto DJ Queue (top) Tambahkan ke Auto DJ (atas) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Hapus - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Pengaturan - + Open in File Browser Buka di Browser Berkas - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Penilaian - + Cue Point - + + Hotcues Penanda Utama - + Intro - + Outro - + Key Kunci - + ReplayGain - + Waveform - + Comment Komentar - + All - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM Kunci DPM - + Unlock BPM Buka Kunci BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Buat Playlist Baru - + Enter name for new playlist: Masukkan nama baru untuk Playlist ini: - + New Playlist Playlist Baru - - - + + + Playlist Creation Failed Pembuatan Playlist Tidak Berhasil - + A playlist by that name already exists. Nama playlist tersebut sudah digunakan - + A playlist cannot have a blank name. Playlist tidak bisa memiliki nama kosong - + An unknown error occurred while creating playlist: Kesalahan yang tidak diketahui terjadi saat membuat playlist: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16650,37 +16834,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16688,37 +16872,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16726,60 +16910,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Tampilkan atau sembunyikan kolom. + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Pilih petunjuk pustaka musik. - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16790,67 +16979,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Telusuri - + Export directory - + Database version - + Export - + Cancel - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16871,7 +17071,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16881,23 +17081,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_is.ts b/res/translations/mixxx_is.ts index b255bd68ba9b..454604fad56b 100644 --- a/res/translations/mixxx_is.ts +++ b/res/translations/mixxx_is.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ Sjálfvirk hljóðblöndun - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist @@ -258,13 +258,13 @@ - + Playlist Creation Failed - + An unknown error occurred while creating playlist: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Gat ekki opnað lag. @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Plata - + Album Artist - + Artist Flytjandi - + Bitrate Bitahraði - + BPM BPM - + Channels Rásir - + Color - + Comment Athugasemd - + Composer - + Cover Art - + Date Added Bætt við - + Last Played - + Duration Lengd - + Type Tegund - + Genre Stíll - + Grouping - + Key Tónlykill - + Location Staðsetning - + Preview - + Rating Stjörnugjöf - + ReplayGain - + Samplerate - + Played Spilað - + Title Heiti - + Track # Lag # - + Year Ár - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library - + Refresh directory tree - + Quick Links Flýtihlekkir - - + + Devices Tæki - + Removable Devices Fjarlægjanleg tæki - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages Tónjafnarar - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Næsta - + Switch to next effect - + Previous Fyrri - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Sjálfvirk hljóðblöndun - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Læsa @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages - + Export Crate - + Unlock - + An unknown error occurred while creating crate: Óþekkt villa kom upp við gerð nýs kassa: - + Rename Crate Endurnefna kassa + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Ekki tókst að endurnefna kassa - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Kassi verður að hafa heiti - + A crate by that name already exists. Kassi með þessu nafni er til fyrir @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Sleppa - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Sjálfvirk hljóðblöndun - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 Icecast 2 - + Shoutcast 1 - + Icecast 1 Icecast 1 - + MP3 MP3 - + Ogg Vorbis Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo Víðóma - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Ekkert - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% - + 16% - + 24% - + 50% - + 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Endurnefna - + Export Flytja út - + Delete Eyða - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Virkt - + Stereo Víðóma - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Stillingarvilla @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev Hljóð-forritaskil - + Sample Rate Tíðni - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Úttak - + Input Inntak - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices Finna tæki @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: BPM: - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Lag # - + Album Artist - + Composer - + Title Heiti - + Grouping - + Key Tónlykill - + Year Ár - + Artist Flytjandi - + Album Plata - + Genre Stíll @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: Lengd: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: BPM lags: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Virkja - + &Cancel &Hætta við - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Læsa - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Læsa - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Tónlykill - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Flytjandi - + Album Artist - + Composer - + Title Heiti - + Album Plata - + Grouping - + Year Ár - + Genre Stíll - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates Kassar - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze Greina - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Fjarlægja - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Stjörnugjöf - + Cue Point - + Hotcues - + Intro - + Outro - + Key Tónlykill - + ReplayGain - + Waveform - + Comment Athugasemd - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist - - - + + + Playlist Creation Failed - + A playlist by that name already exists. - + A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Veldu möppu sem inniheldur lagasafn - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_it.qm b/res/translations/mixxx_it.qm index 01e4cbbbae35..77b46f739d19 100644 Binary files a/res/translations/mixxx_it.qm and b/res/translations/mixxx_it.qm differ diff --git a/res/translations/mixxx_it.ts b/res/translations/mixxx_it.ts index cda53d9233d7..fe1b0c0cd9e3 100644 --- a/res/translations/mixxx_it.ts +++ b/res/translations/mixxx_it.ts @@ -3649,32 +3649,32 @@ traccia - Come sopra + Messaggi di profilazione ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. La funzionalità fornita da questo mapping controller sarà disabilitata fino a che il problema non sarà risolto. - + You can ignore this error for this session but you may experience erratic behavior. Puoi ignorare questo errore per questa sessione ma puoi incontrare comportamenti incoerenti. - + Try to recover by resetting your controller. Tenta il ripristino tramite la reimpostazione ai valori predefiniti del tuo controller. - + Controller Mapping Error Errore Mappatura Controller - + The mapping for your controller "%1" is not working properly. La mappatura per il tuo controller "%1" non funziona correttamente. - + The script code needs to be fixed. Il codice dello script deve essere riparato. @@ -3931,7 +3931,7 @@ traccia - Come sopra + Messaggi di profilazione Mixxx %1.%2 Development Team - + Mixxx %1.%2 Development Team @@ -5660,6 +5660,16 @@ Applicare la configurazione e continuare? Multi-Sampling Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -5673,7 +5683,7 @@ Applicare la configurazione e continuare? Off - + Off @@ -6274,62 +6284,62 @@ Puoi sempre trascinare tracce sullo schermo per clonare un deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. La dimensione minore della skin selezionata è maggiore della risoluzione del tuo schermo. - + Allow screensaver to run Permette di avviare il salvaschermo - + Prevent screensaver from running Evita l'avvio del salvaschermo - + Prevent screensaver while playing Evita l'avvio del salvaschermo durante la riproduzione - + Disabled Disabilitato - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Questa skin non supporta gli schemi di colore. - + Information Informazione - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx deve essere riavviato prima che le nuove impostazioni di localizzazione, scalatura o multi-sampling abbiano effetto. @@ -7757,7 +7767,7 @@ Il target di intensità sonora è approssimativo e presuppone che il pregain del Output - + Uscita @@ -8964,7 +8974,7 @@ Spesso si avrà un buon risultato con tracce a ritmo costante, non funzionerà b Tap to Beat - + Premi alla Battuta @@ -9619,57 +9629,57 @@ Shown when VuMeter can not be displayed. Please keep supporto OpenGL. - + activate Attiva - + toggle Attiva - + right destra - + left sinistra - + right small destra piccolo - + left small sinistra poco - + up su - + down giù - + up small su poco - + down small giu poco - + Shortcut Scorciatoia da tastiera @@ -9748,22 +9758,22 @@ Interrompi l'operazione per evitare incongruenze nella libreria LibraryFeature - + Import Playlist Importa Playlist - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) File playlist (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Sovrascrivo File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10037,133 +10047,133 @@ Vuoi veramente sovrascriverlo? Continua - + Load track to Deck %1 Carica una traccia dal mazzo %1 - + Deck %1 is currently playing a track. Il mazzo %1 sta correntemente riproducendo una traccia. - + Are you sure you want to load a new track? Sei sicuro di voler caricare una nuova traccia? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Non è stato selezionato nessuno dispositivo di input per il controllo vinile. Prego selezionare prima un dispositivo di controllo di input nel pannello di preferenze hardware. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Nessun dispositivo di input è stato selezionato per il controllo diretto passtrough. Prego selezionare prima un dispositivo di input nel pannello di preferenze hardware. - + There is no input device selected for this microphone. Do you want to select an input device? Non c'è nessun dispositivo di input selezionato per questo microfono. Vuoi selezionare un dispositivo di input? - + There is no input device selected for this auxiliary. Do you want to select an input device? Non c'è nessun dispositivo di input selezionato per questo ausiliare. Vuoi selezionare un dispositivo di input? - + Scan took %1 - + No changes detected. Nessun cambiamento rilevato. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Errore nel file della Skin - + The selected skin cannot be loaded. La seguente Skin non può essere caricata. - + OpenGL Direct Rendering Rendering Diretto OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Direct rendering non è abilitato sulla tua macchina.<br><br>Ciò significa che la visualizzazione delle forme d'onda sarà molto<br><b>lento e può impattare sulla tua CPU pesantemente</b>. Aggiorna la tua<br>configurazione per abilitare il direct rendering, or disabilita la visualizzazione<br>della forma d'onda nelle preferenze di Mixxx selezionando<br>"Vuota" come visualizzazione di forma d'onda nella sezione 'Interfaccia'. - - - + + + Confirm Exit Conferma uscita - + A deck is currently playing. Exit Mixxx? Un deck è in riproduzione. Uscire da Mixxx? - + A sampler is currently playing. Exit Mixxx? Un campionamento è attualmente in riproduzione. Uscire da Mixxx? - + The preferences window is still open. La finestra delle Preferenze è ancora aperta. - + Discard any changes and exit Mixxx? Annullare ogni modifica e uscire da Mixxx? @@ -10185,7 +10195,7 @@ Vuoi selezionare un dispositivo di input? - + Playlists Playlist @@ -10226,27 +10236,27 @@ Vuoi selezionare un dispositivo di input? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Le playlist sono elenchi ordinati di brani che ti consentono di pianificare i tuoi DJ set. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Potrebbe essere necessario saltare alcune tracce nella playlist preparata o aggiungere alcune tracce diverse per mantenere l'energia del pubblico. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Alcuni Djs organizzano le playlist prima della performance live, ma altri preferiscono farle al "volo". - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Quando usi una playlist durante una esibizione Live Dj, ricordati sempre di prestare molta attenzione a come il tuo pubblico reagisce alla musica da eseguire che hai selezionato. - + Create New Playlist Crea Nuova Playlist @@ -10584,7 +10594,7 @@ Vuoi scansionare la tua libreria per cercare i file di copertina adesso? Encoder - + Encoder @@ -11910,7 +11920,7 @@ Suggerimento: compensa le voci "chipmunk" o "ringhio"La quantità di amplificazione applicata al segnale audio. Ad alti livelli, il suono sarà più distorto. - + Passthrough Passthrough @@ -15669,323 +15679,353 @@ Questa azione non può essere annullata! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + Ctrl+f + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crea una &Nuova Playlist - + Create a new playlist Crea una nuova playlist - + Ctrl+n Ctrl+n - + Create New &Crate Crea Nuovo &Contenitore - + Create a new crate Crea un nuovo contenitore - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Vista - + Auto-hide menu bar Auto-nascondi la barra del menu - + Auto-hide the main menu bar when it's not used. Auto-nasconde la barra del menu quando non viene usata. - + May not be supported on all skins. Potrebbe non essere supportata su tutte le skin - + Show Skin Settings Menu Mostra Menu Impostazioni Skin - + Show the Skin Settings Menu of the currently selected Skin Mostra Menu Impostazioni Skin della Skin correntemente selezionata - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostra la Sezione Microfono - + Show the microphone section of the Mixxx interface. Mostra la Sezione Microfono dell'interfaccia Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostra la Sezione Controllo Vinile - + Show the vinyl control section of the Mixxx interface. Mosta la sezione Vinyl Control della Interfaccia Mixxx - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostra Anteprima Deck - + Show the preview deck in the Mixxx interface. Mostra l'anteprima del deck nell'interfaccia di Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Mostra Copertina - + Show cover art in the Mixxx interface. Mostra la copertina nell'interfaccia Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Massimizza Libreria - + Maximize the track library to take up all the available screen space. Massimizza la libreria tracce per occupare tutto lo spazio disponibile sullo schermo - + Space Menubar|View|Maximize Library Spazio - + &Full Screen &Schermo intero - + Display Mixxx using the full screen Visualizza Mixxx a schermo intero - + &Options &Opzioni - + &Vinyl Control Controllo &Vinile - + Use timecoded vinyls on external turntables to control Mixxx Usa vinili timecoded su piatti esterni per controllare Mixxx - + Enable Vinyl Control &%1 Abilita Controllo Vinile &%1 - + &Record Mix &Registra il Mixaggio - + Record your mix to a file Registra il tuo Mixaggio su un file - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Abilita Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server Invia i tuoi mix a un server shoutcast o icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Attiva Scorciatoie da Tastiera - + Toggles keyboard shortcuts on or off Alterna le scorciatoie da Tastiera On/Offf - + Ctrl+` Ctrl+` - + &Preferences &Preferenze - + Change Mixxx settings (e.g. playback, MIDI, controls) Cambia le impostazioni di Mixxx (per esempio la riproduzione, i Midi, i controlli) - + &Developer &Sviluppatore - + &Reload Skin Ricarica la Skin - + Reload the skin Ricarica la Skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Strumenti Sviluppa&tori - + Opens the developer tools dialog Apre lo strumento dialogo sviluppatore - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Statistiche: Cassetto &Esperimento - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Abilita il modo esperimento. Colleziona statistiche nel cassetto di tracciamento esperimento. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Statistiche: Cassetto &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Abilita Modo Base. Colleziona statistiche nel cassetto tracciamento Base - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Deb&ugger Abilitato - + Enables the debugger during skin parsing Abilita il debugger durante l'analisi skin - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Aiuto - + Show Keywheel menu title Mostra ruota di chiave @@ -16002,74 +16042,74 @@ Questa azione non può essere annullata! Esporta la libreria nel formato Engine DJ - + Show keywheel tooltip text Mostra ruota di chiave - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Supporto della &comunità - + Get help with Mixxx Ottieni dell'aiuto con Mixxx - + &User Manual Manuale &Utente - + Read the Mixxx user manual. Leggi il manuale utente di Mixxx - + &Keyboard Shortcuts Scorciatoie da tastiera - + Speed up your workflow with keyboard shortcuts. Velocizza il tuo flusso di lavoro con le scorciatoie da tastiera. - + &Settings directory Cartella Impostazioni - + Open the Mixxx user settings directory. Apre la directory delle impostazioni utente di Mixxx. - + &Translate This Application &Traduci questa applicazione - + Help translate this application into your language. Aiutaci a tradurre questo programma nella tua lingua. - + &About &Informazioni su - + About the application Informazioni sull'applicazione @@ -16104,25 +16144,13 @@ Questa azione non può essere annullata! WSearchLineEdit - - Clear input - Clear the search bar input field - Cancella l'input - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Cerca - + Clear input Cancella l'input @@ -16133,93 +16161,87 @@ Questa azione non può essere annullata! Cerca... - + Clear the search bar input field Pulisce il campo della barra di ricerca - - Enter a string to search for - Inserisci una stringa da cercare + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Usa operatori come bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Per maggiori informazioni vedi il Manuale Utente > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Scorciatoia da tastiera + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Il centro + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Del + + Additional Shortcuts When Focused: + - Shortcuts - Scorciatoie + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Attiva la ricerca prima del timeout della ricerca-come-tu-scrivi o salta alla visualizzazione dei brani in seguito + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Spazio - + Toggle search history Shows/hides the search history entries Attiva/disattiva cronologia ricerche - + Delete or Backspace Cancella o Backspace - - Delete query from history - Cancella query dallo storico - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Esci dalla ricerca + + Delete query from history + Cancella query dallo storico @@ -17026,52 +17048,52 @@ Questa azione non può essere annullata! mixxx::CoreServices - + fonts font - + database database - + effects effetti - + audio interface interfaccia audio - + decks decks - + library libreria - + Choose music library directory Scegli la cartella della tua libreria musicale - + controllers controllers - + Cannot open database Impossibile aprire il database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_ja.qm b/res/translations/mixxx_ja.qm index 609067dc47e6..bbb768211200 100644 Binary files a/res/translations/mixxx_ja.qm and b/res/translations/mixxx_ja.qm differ diff --git a/res/translations/mixxx_ja.ts b/res/translations/mixxx_ja.ts index acb121d3d6ef..52b7ea6d68e2 100644 --- a/res/translations/mixxx_ja.ts +++ b/res/translations/mixxx_ja.ts @@ -3644,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -5640,6 +5640,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6231,62 +6241,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information 通知 - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -8986,7 +8996,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Album Artist - アルバムアーティスト + アルバム アーティスト @@ -9388,7 +9398,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Artist + Album - アーティスト + + アーティスト + アルバム @@ -9569,57 +9579,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9692,22 +9702,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist プレイリストをインポート - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) プレイリスト ファイル (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9977,129 +9987,129 @@ Do you really want to overwrite it? 続行 - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit 終了の確認 - + A deck is currently playing. Exit Mixxx? デッキは現在再生中です。Mixxxを終了しますか? - + A sampler is currently playing. Exit Mixxx? サンプラーは現在再生中です。MIXXXを終了しますか? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10121,7 +10131,7 @@ Do you want to select an input device? - + Playlists プレイリスト @@ -10162,27 +10172,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist 新規プレイリストの作成 @@ -11809,7 +11819,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough パススルー @@ -15557,323 +15567,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist 新しいプレイリストを作成(&N) - + Create a new playlist 新しいプレイリストを作成 - + Ctrl+n Ctrl+n - + Create New &Crate 新しいレコードボックスを作成(&C) - + Create a new crate 新しいレコードボックスを作成 - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View 表示(&V) - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck プレビューデッキを表示 - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art カバーアートを表示 - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library ライブラリを最大化 - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen 全画面表示 (&F) - + Display Mixxx using the full screen Mixxxを全画面表示にする。 - + &Options オプション(&O) - + &Vinyl Control Vinylコントロール(&V) - + Use timecoded vinyls on external turntables to control Mixxx ターンテーブルとタイムコードの記録されているレコードを使用してMixxxを操作する - + Enable Vinyl Control &%1 - + &Record Mix ミックスを録音する (&R) - + Record your mix to a file ミックスをファイルに録音する - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server shoutcastかicecastサーバーを通じてミックスをストリーミング - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` Ctrl+ - + &Preferences 設定(&P) - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled デバッガを有効化(&u) - + Enables the debugger during skin parsing - + Ctrl+Shift+D Ctrl+Shift+D - + &Help ヘルプ(&H) - + Show Keywheel menu title @@ -15890,74 +15930,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel F12 - + &Community Support コミュニティーのサポート(&C) - + Get help with Mixxx - + &User Manual ユーザーマニュアル(_U) - + Read the Mixxx user manual. Mixxxユーザーマニュアルを読む - + &Keyboard Shortcuts キーボードショートカット(&K) - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application このアプリケーションを翻訳(&T) - + Help translate this application into your language. あなたの言語でこのアプリケーションを翻訳するのを手伝ってください。 - + &About このアプリケーションについて(&A) - + About the application このアプリケーションについて @@ -15992,25 +16032,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun - + Clear input @@ -16021,92 +16049,86 @@ This can not be undone! 検索... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history - - - - - Esc + + in search history - - Exit search - Exit search bar and leave focus + + Delete query from history @@ -16914,52 +16936,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory 音楽ライブラリのディレクトリを選択してください - + controllers - + Cannot open database データベースが開けません。 - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_ko.qm b/res/translations/mixxx_ko.qm index a1c3a29500c2..3d2ccdab99a1 100644 Binary files a/res/translations/mixxx_ko.qm and b/res/translations/mixxx_ko.qm differ diff --git a/res/translations/mixxx_ko.ts b/res/translations/mixxx_ko.ts index f8883a67d113..a9446c5e9bf7 100644 --- a/res/translations/mixxx_ko.ts +++ b/res/translations/mixxx_ko.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source 트랙 영역에 삭제 - + Auto DJ 자동 디제잉 - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source 트랙 영역에 추가 @@ -148,7 +148,7 @@ BasePlaylistFeature - + New Playlist 새 재생 목록 @@ -159,7 +159,7 @@ - + Create New Playlist 새 재생 목록 만들기 @@ -189,113 +189,120 @@ 복제 - - + + Import Playlist 재생 목록 가져오기 - + Export Track Files 트랙 파일 익스포트 - + Analyze entire Playlist 전체 재생 목록 분석 - + Enter new name for playlist: 새로운 재생 목록의 이름 입력 : - + Duplicate Playlist 재생 목록 복제 - - + + Enter name for new playlist: 새 재생 목록의 이름을 입력하세요: - - + + Export Playlist 재생 목록 내보내기 - + Add to Auto DJ Queue (replace) 자동 디제잉 대기열에 넣기 (교체) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist 재생 목록 이름 변경 - - + + Renaming Playlist Failed 재생 목록 이름 변경 실패 - - - + + + A playlist by that name already exists. 해당 재생 목록 이름은 이미 존재합니다. - - - + + + A playlist cannot have a blank name. 재생 목록은 공백을 이름으로 가질 수 없습니다. - + _copy //: Appendix to default name when duplicating a playlist _복사 - - - - - - + + + + + + Playlist Creation Failed 재생 목록 생성 실패 - - + + An unknown error occurred while creating playlist: 재생 목록을 생성하는 도중에 알 수 없는 에러가 발생했습니다: - + Confirm Deletion 삭제 확인하기 - + Do you really want to delete playlist <b>%1</b>? 플레이리스트 <b>%1</b>를 삭제하시겠습니까? - + M3U Playlist (*.m3u) M3U 재생 목록 (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U 재생 목록 (*.m3u);;M3U8 재생 목록 (*.m3u8);;PLS 재생 목록 (*.pls);;CSV 텍스트 (*.csv);;일반 텍스트 (*.txt) @@ -303,12 +310,12 @@ BaseSqlTableModel - + # # - + Timestamp 타임 스탬프 @@ -316,7 +323,7 @@ BaseTrackPlayerImpl - + Couldn't load track. 트랙을 불러올 수 없습니다. @@ -324,137 +331,142 @@ BaseTrackTableModel - + Album 앨범 - + Album Artist 앨범 작가 - + Artist 악곡가 - + Bitrate 품질 - + BPM 분당 박자수 - + Channels 채널 - + Color 색상 - + Comment 덛붙임 - + Composer 작곡가 - + Cover Art 인장 - + Date Added 추가된 날짜 - + Last Played 마지막 재생 - + Duration 길이 - + Type 유형 - + Genre 장르 - + Grouping 그룹핑 - + Key - + Location 위치 - + + Overview + + + + Preview 미리 듣기 - + Rating 별점 - + ReplayGain 리플레이 게인 - + Samplerate 샘플레이트 - + Played 재생됨 - + Title 제목 - + Track # 트랙 번호 - + Year 년도 - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -542,67 +554,77 @@ BrowseFeature - + Add to Quick Links 퀵 링크에 추가 - + Remove from Quick Links 퀵 링크에서 제거 - + Add to Library 라이브러리에 추가 - + Refresh directory tree - + Quick Links 퀵 링크 - - + + Devices 장치 - + Removable Devices 이동식 장치 - - + + Computer 컴퓨터 - + Music Directory Added 음악 디렉토리에 추가됨 - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? 하나 이상의 음악 디렉토리를 추가했습니다. 이 디렉토리의 트랙은 라이브러리를 다시 스캔할 때까지 사용할 수 없습니다. 지금 다시 스캔하시겠습니까? - + Scan 스캔 - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. "컴퓨터"를 사용하면 하드 디스크 및 외부 장치의 폴더에서 트랙을 탐색, 확인 및 로드할 수 있습니다. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -1045,13 +1067,13 @@ trace - Above + Profiling messages - + Set to full volume 음량 최대로 - + Set to zero volume 음량 0으로 @@ -1076,13 +1098,13 @@ trace - Above + Profiling messages 리버스 롤(Censor) 버튼 - + Headphone listen button 헤드폰 듣기 버튼 - + Mute button 음소거 @@ -1093,25 +1115,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) 믹스 방향 (예: 왼쪽, 오른쪽, 가운데) - + Set mix orientation to left 믹스 방향을 왼쪽으로 설정 - + Set mix orientation to center 믹스 방향을 가운데로 설정 - + Set mix orientation to right 믹스 방향을 오른쪽으로 설정 @@ -1152,22 +1174,22 @@ trace - Above + Profiling messages BPM(분당 박자수) 탭 버튼 - + Toggle quantize mode 양자화(quantize) 모드 토글 - + One-time beat sync (tempo only) 1회 비트 싱크 (템포 전용) - + One-time beat sync (phase only) 1회 비트 싱크 (위상 전용) - + Toggle keylock mode 음높이 고정 모드 토글 @@ -1177,193 +1199,193 @@ trace - Above + Profiling messages 이퀄라이저(EQ) - + Vinyl Control 바이닐(Vinyl) 컨트롤 - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) 바이닐 컨트롤 큐잉 모드 토글 (끄기/1회/핫큐) - + Toggle vinyl-control mode (ABS/REL/CONST) 바이닐 컨트롤 모드 토글 (ABS/REL/CONST) - + Pass through external audio into the internal mixer 외부 오디오를 통해 내부 믹서로 전달 - + Cues - + Cue button 큐 버튼 - + Set cue point 큐 포인트 설정 - + Go to cue point 큐 포인트로 이동 - + Go to cue point and play 큐 포인트로 가서 재생 - + Go to cue point and stop 큐 포인트로 가서 정지 - + Preview from cue point 큐 포인트에서 미리보기 - + Cue button (CDJ mode) 큐 버튼 (CDJ 모드) - + Stutter cue 스터터 큐 - + Hotcues 핫큐 - + Set, preview from or jump to hotcue %1 핫큐 %1 에서 미리보기 또는 이동 설정 - + Clear hotcue %1 핫큐 %1 지우기 - + Set hotcue %1 핫큐 %1 설정 - + Jump to hotcue %1 핫큐 %1 으로 이동 - + Jump to hotcue %1 and stop 핫큐 %1 으로 이동 후 정지 - + Jump to hotcue %1 and play 핫큐 %1 으로 이동 후 재생 - + Preview from hotcue %1 핫큐 %1 했을때 미리듣기 - - + + Hotcue %1 핫큐 %1 - + Looping 반복(루핑) - + Loop In button 반복 들어가기 버튼 - + Loop Out button 반복 나오기 버튼 - + Loop Exit button 반복 나가기 버튼 - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats 루프를 %1 비트 앞으로 이동 - + Move loop backward by %1 beats 루프를 %1 비트 뒤로 이동 - + Create %1-beat loop %1-박자 반복 만들기 - + Create temporary %1-beat loop roll %1-박자 반복 롤 설정 @@ -1479,20 +1501,20 @@ trace - Above + Profiling messages - - + + Volume Fader 음량 페이더 - + Full Volume 최고음량 - + Zero Volume 무음량 @@ -1508,7 +1530,7 @@ trace - Above + Profiling messages - + Mute 음소거 @@ -1519,7 +1541,7 @@ trace - Above + Profiling messages - + Headphone Listen 헤드폰으로 듣기 @@ -1540,25 +1562,25 @@ trace - Above + Profiling messages - + Orientation 크로스페이더 위치 - + Orient Left 크로스페이더 왼쪽으로 위치 - + Orient Center 크로스페이더 중앙으로 위치 - + Orient Right 크로스페이더 오른쪽으로 위치 @@ -1628,82 +1650,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key 초기화 키 - + Resets key to original 원상복구 키 @@ -1744,451 +1766,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 핫큐 %1 지우기 - + Set Hotcue %1 핫큐 %1 설정 - + Jump To Hotcue %1 핫큐 %1 으로 이동 - + Jump To Hotcue %1 And Stop 핫큐 %1 으로 이동 후 정지 - + Jump To Hotcue %1 And Play 핫큐 %1 으로 이동 후 재생 - + Preview Hotcue %1 핫큐 %1 했을때 미리듣기 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) 자동 디제잉 대기열에 넣기 (아래로) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) 자동 디제잉 대기열에 넣기 (위로) - + Prepend selected track to the Auto DJ Queue - + Load Track 트랙 불러오기 - + Load selected track 선택한 트랙 불러오기 - + Load selected track and play 선택한 트랙 불러오고 재생 - - + + Record Mix - + Toggle mix recording - + Effects 이펙트 - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob 게인 노브 - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2203,102 +2225,102 @@ trace - Above + Profiling messages 헤드폰 게인 - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2450,1053 +2472,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - - + + Sort hotcues by position - - + + Sort hotcues by position (remove offsets) - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) 자동 디제잉 대기열에 넣기 (교체) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off 마이크 켜기/끄기 - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ 자동 디제잉 - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track 다음 노래로의 전환 발동 - + User Interface 유저 인터페이스 - + Samplers Show/Hide - + Show/hide the sampler section 샘플러 부분 보이기/가리기 - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section 바이닐 컨트롤 부분 보이기/가리기 - + Preview Deck Show/Hide - + Show/hide the preview deck 덱 미리보기 보기/가기리 - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget 회전하는 바이닐 위젯 보이기/가리기 - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3611,32 +3643,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3744,7 +3776,7 @@ trace - Above + Profiling messages 상자 가져오기 - + Export Crate 상자 내보내기 @@ -3754,7 +3786,7 @@ trace - Above + Profiling messages 잠금 해제 - + An unknown error occurred while creating crate: 상자를 만드는 도중 예상치 못한 에러가 발생했습니다: @@ -3763,12 +3795,6 @@ trace - Above + Profiling messages Rename Crate 상자 이름 변경 - - - - Export to Engine Prime - - Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. @@ -3786,17 +3812,17 @@ trace - Above + Profiling messages 상자 이름 변경 실패 - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U 재생 목록 (*.m3u);;M3U8 재생 목록 (*.m3u8);;PLS 재생 목록 (*.pls);;CSV 텍스트 (*.csv);;일반 텍스트 (*.txt) - + M3U Playlist (*.m3u) M3U 재생 목록 (*.m3u) @@ -3805,6 +3831,12 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. 상자는 디제잉을 위해 음악을 구성하는 좋은 방법입니다. + + + + Export to Engine DJ + + Crates let you organize your music however you'd like! @@ -3916,12 +3948,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -4432,37 +4464,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4501,17 +4533,17 @@ You tried to learn: %1,%2 - + Log - + Search 검색 - + Stats @@ -5164,114 +5196,114 @@ associated with each key. DlgPrefController - + Apply device settings? 장치 설정을 적용하시겠습니까? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? 학습 마법사를 시작하기 전에 설정이 적용되어야 합니다. 설정을 적용하고 계속하시겠습니까? - + None 없음 - + %1 by %2 %1 / %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5289,100 +5321,100 @@ Apply settings and continue? 활성화됨 - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: 설명: - + Support: 지원: - + Screens preview - + Input Mappings - - + + Search 검색 - - + + Add 추가 - - + + Remove 지우기 @@ -5402,17 +5434,17 @@ Apply settings and continue? - + Mapping Info - + Author: 저자: - + Name: 이름: @@ -5422,28 +5454,28 @@ Apply settings and continue? 학습 마법사 (MIDI 전용) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All 모두 삭제 - + Output Mappings 출력 맵핑 @@ -5602,6 +5634,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6193,62 +6235,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information 정보 - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7415,173 +7457,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled 활성화됨 - + Stereo 스테레오 - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7599,131 +7640,131 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output 출력 - + Input 입력 - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -8169,47 +8210,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware - + Controllers - + Library 라이브러리 - + Interface - + Waveforms - + Mixer 믹서 - + Auto DJ 자동 디제잉 - + Decks - + Colors @@ -8244,47 +8285,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects 이펙트 - + Recording - + Beat Detection - + Key Detection - + Normalization - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control 바이닐(Vinyl) 컨트롤 - + Live Broadcasting - + Modplug Decoder @@ -8640,284 +8681,284 @@ This can not be undone! - + Filetype: - + BPM: 분당 박자수: - + Location: - + Bitrate: - + Comments - + BPM 분당 박자수 - + Sets the BPM to 75% of the current value. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # 트랙 번호 - + Album Artist 앨범 작가 - + Composer 작곡가 - + Title 제목 - + Grouping 그룹핑 - + Key - + Year 년도 - + Artist 악곡가 - + Album 앨범 - + Genre 장르 - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color 색상 - + Date added: - + Open in File Browser 파일 탐색기에서 열기 - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -9074,7 +9115,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9276,27 +9317,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9511,15 +9552,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9530,57 +9571,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut 단축키 @@ -9588,62 +9629,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9653,22 +9694,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist 재생 목록 가져오기 - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) 재생 목록 파일 (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9715,27 +9756,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9795,18 +9836,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks 빠진 트랙 - + Hidden Tracks 숨은 트랙 - Export to Engine Prime + Export to Engine DJ @@ -9818,208 +9859,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10035,13 +10117,13 @@ Do you want to select an input device? PlaylistFeature - + Lock 잠그기 - - + + Playlists @@ -10051,32 +10133,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock 잠금 해제 - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist 새 재생 목록 만들기 @@ -11567,7 +11675,7 @@ Fully right: end of the effect period - + Deck %1 덱 %1 @@ -11700,7 +11808,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11731,7 +11839,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11864,12 +11972,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11904,42 +12012,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11997,54 +12105,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12603,7 +12711,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12785,7 +12893,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art 인장 @@ -13021,197 +13129,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play 재생 - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13449,926 +13557,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - - + + Drag a Hotcue button here to continue playing after releasing the Hotcue. - + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating 별점 - + Assign ratings to individual tracks by clicking the stars. @@ -14503,33 +14617,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14549,215 +14663,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue - + Headphone - + Mute 음소거 - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + Drag this button onto a Play button while previewing to continue playback after release. - + Dragging with Shift key pressed will not start previewing the hotcue. - + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode 슬립 모드 - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14802,254 +14916,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind 빠른 되감기 - + Fast rewind through the track. - + Fast Forward 빨리감기 - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat - + When active the track will repeat if you go past the end or reverse before the start. - + Eject 꺼내다 - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist - + Displays the artist of the loaded track. - + Track Title - + Displays the title of the loaded track. - + Track Album 앨범 - + Displays the album name of the loaded track. 불려온 트랙의 앨범 이름을 보여줍니다. - + Track Artist/Title 트랙 작가/이름 - + Displays the artist and title of the loaded track. 불려온 트랙의 작가와 곡이름을 보여줍니다. @@ -15057,12 +15171,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15277,47 +15391,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15442,323 +15556,353 @@ This can not be undone! - Create &New Playlist + Search in Current View... + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + + Create &New Playlist + + + + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title @@ -15775,74 +15919,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual &사용설명서 - + Read the Mixxx user manual. Mixxx의 사용설명서를 읽어주세요. - + &Keyboard Shortcuts &단축키 - + Speed up your workflow with keyboard shortcuts. 단축키를 이용하여 작업속도를 높이세요. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &프로그램 번역 - + Help translate this application into your language. 자국어로 번역하는 일을 도와주세요. - + &About - + About the application 이 프로그램에 대해 @@ -15850,25 +15994,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15877,25 +16021,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - - - - + Search noun 검색 - + Clear input @@ -15906,169 +16038,163 @@ This can not be undone! - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - 단축키 + See User Manual > Mixxx Library for more information. + - - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key - + harmonic with %1 - + BPM 분당 박자수 - + between %1 and %2 - + Artist 악곡가 - + Album Artist 앨범 작가 - + Composer 작곡가 - + Title 제목 - + Album 앨범 - + Grouping 그룹핑 - + Year 년도 - + Genre 장르 - + Directory - + &Search selected @@ -16076,620 +16202,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist 재생목록에 추가 - + Crates 상자 - + Metadata - + Update external collections - + Cover Art 인장 - + Adjust BPM - + Select Color - - + + Analyze 분석 - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) 자동 디제잉 대기열에 넣기 (아래로) - + Add to Auto DJ Queue (top) 자동 디제잉 대기열에 넣기 (위로) - + Add to Auto DJ Queue (replace) 자동 디제잉 대기열에 넣기 (교체) - + Preview Deck - + Remove 지우기 - + Remove from Playlist - + Remove from Crate - + Hide from Library 라이브러리에서 숨기기 - + Unhide from Library 라이브러리에서 숨김해제 - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser 파일 탐색기에서 열기 - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count 재생 횟수 - + Rating 별점 - + Cue Point 큐포인트 - - + + Hotcues 핫큐 - + Intro - + Outro - + Key - + ReplayGain 리플레이 게인 - + Waveform 웨이브폼 - + Comment 덛붙임 - + All 전체 - + Sort hotcues by position (remove offsets) - + Sort hotcues by position - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 덱 %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist 새 재생 목록 만들기 - + Enter name for new playlist: 새 재생 목록의 이름을 입력하세요: - + New Playlist 새 재생 목록 - - - + + + Playlist Creation Failed 재생 목록 생성 실패 - + A playlist by that name already exists. 해당 재생 목록 이름은 이미 존재합니다. - + A playlist cannot have a blank name. 재생 목록은 공백을 이름으로 가질 수 없습니다. - + An unknown error occurred while creating playlist: 재생 목록을 생성하는 도중에 알 수 없는 에러가 발생했습니다: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Sorting hotcues of %n track(s) by position (remove offsets) - + Sorting hotcues of %n track(s) by position - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16705,37 +16836,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16743,37 +16874,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16781,12 +16912,12 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. - + Shuffle Tracks @@ -16794,52 +16925,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory 음악 라이브러리 디렉토리를 선택하세요 - + controllers - + Cannot open database 자료모음을 열 수 없음 - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16850,68 +16981,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates - + + Playlists + + + + + Selected crates/playlists + + + + Browse 탐색기 - + Export directory - + Database version - + Export - + Cancel - + Export Library to Engine DJ "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16932,7 +17073,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16942,23 +17083,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_lb.qm b/res/translations/mixxx_lb.qm index 8c06dc2a9d7f..d10add87bcd9 100644 Binary files a/res/translations/mixxx_lb.qm and b/res/translations/mixxx_lb.qm differ diff --git a/res/translations/mixxx_lb.ts b/res/translations/mixxx_lb.ts index d71b3a938c18..bf7fb25f5a07 100644 --- a/res/translations/mixxx_lb.ts +++ b/res/translations/mixxx_lb.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source - + Auto DJ Auto Dj - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -147,28 +147,28 @@ BasePlaylistFeature - + New Playlist Nei Playlist - + Add to Auto DJ Queue (bottom) An Playlescht Warteschlang setzen (Ennen) - + Create New Playlist - + Add to Auto DJ Queue (top) An Playlescht Warteschlang setzen (Uewen) - + Remove Läschen @@ -178,12 +178,12 @@ Ëmbenennen - + Lock Späer - + Duplicate @@ -204,24 +204,24 @@ - + Enter new name for playlist: - + Duplicate Playlist Playlescht dublizeieren - - + + Enter name for new playlist: - + Export Playlist Playlescht exportéieren @@ -231,70 +231,77 @@ - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Playlescht Embenennen - - + + Renaming Playlist Failed Embennen ass fehlgeschloen - - - + + + A playlist by that name already exists. Eng Playlescht mam selweschten Numm gett et schon - - - + + + A playlist cannot have a blank name. Eng Playlescht kann net Eidel sin - + _copy //: Appendix to default name when duplicating a playlist _kopéieren - - - - - - + + + + + + Playlist Creation Failed Playlescht konnt net erstallt gin - - + + An unknown error occurred while creating playlist: En onbekannten Fehler ass beim Erstellen vun der Playlescht opgetrueden: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlescht (*.m3u);;M3U8 Playlescht (*.m3u8);;PLS Playlescht (*.pls);;Text CSV (*.csv);;LiesbarenText (*.txt) @@ -302,12 +309,12 @@ BaseSqlTableModel - + # # - + Timestamp Zäitstempel @@ -315,7 +322,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Konnt net gelueden gin @@ -323,137 +330,142 @@ BaseTrackTableModel - + Album Album - + Album Artist - + Artist Kënschtler - + Bitrate Bitrate - + BPM BPM - + Channels - + Color - + Comment Kommentar - + Composer Komponist - + Cover Art - + Date Added Datum bäigesat - + Last Played - + Duration Dauer - + Type Typ - + Genre Genre - + Grouping - + Key - + Location Uertschaft - + + Overview + + + + Preview Virschau - + Rating Bewäertung - + ReplayGain - + Samplerate - + Played Gespielt - + Title Titel - + Track # Lied - + Year Joër - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -541,67 +553,77 @@ BrowseFeature - + Add to Quick Links Quick Links dobäisetzen - + Remove from Quick Links Läschen vun den Quick Links - + Add to Library - + Refresh directory tree - + Quick Links Schnell Link - - + + Devices Geräter - + Removable Devices USB Geräter - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -747,87 +769,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -837,27 +859,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1039,13 +1066,13 @@ trace - Above + Profiling messages - + Set to full volume - + Set to zero volume @@ -1070,13 +1097,13 @@ trace - Above + Profiling messages - + Headphone listen button - + Mute button @@ -1087,25 +1114,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1146,22 +1173,22 @@ trace - Above + Profiling messages - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1171,193 +1198,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1473,20 +1500,20 @@ trace - Above + Profiling messages - - + + Volume Fader - + Full Volume - + Zero Volume @@ -1502,7 +1529,7 @@ trace - Above + Profiling messages - + Mute @@ -1513,7 +1540,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1534,25 +1561,25 @@ trace - Above + Profiling messages - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1622,82 +1649,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1738,451 +1765,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) An Playlescht Warteschlang setzen (Ennen) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) An Playlescht Warteschlang setzen (Uewen) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Nächsten - + Switch to next effect - + Previous Fierderun - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2197,102 +2224,102 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2444,1041 +2471,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Auto Dj - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3593,32 +3642,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3662,13 +3711,13 @@ trace - Above + Profiling messages CrateFeature - + Remove Läschen - + Create New Crate @@ -3678,132 +3727,132 @@ trace - Above + Profiling messages Ëmbenennen - - + + Lock Späer - + Export Crate as Playlist - + Export Track Files - + Duplicate - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Datei - - + + Import Crate Datei importeieren - + Export Crate Datei exporteieren - + Unlock Opgespart - + An unknown error occurred while creating crate: Een fehler ass opgetrueden bei der creatioun vun der datei - + Rename Crate datei embenimmen - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Fehler beim embenennen vun der datei - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlescht (*.m3u);;M3U8 Playlescht (*.m3u8);;PLS Playlescht (*.pls);;Text CSV (*.csv);;LiesbarenText (*.txt) - + M3U Playlist (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Eng datei muss een numm hun. - + A crate by that name already exists. Dest datei mat dem selweschten num gett et schon @@ -3898,12 +3947,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -4022,72 +4071,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Iwwersprangen - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Auto DJ Fade Modes Full Intro + Outro: @@ -4118,80 +4167,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Auto Dj - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4414,37 +4463,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4483,17 +4532,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -5146,113 +5195,113 @@ associated with each key. DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Keen - + %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5265,105 +5314,105 @@ Apply settings and continue? - + Enabled Aktiv - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: - + Support: - + Screens preview - + Input Mappings - - + + Search - - + + Add Dobäifügen - - + + Remove Läschen @@ -5378,22 +5427,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5403,28 +5452,28 @@ Apply settings and continue? - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Alles ausmaachen - + Output Mappings @@ -5583,6 +5632,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6174,62 +6233,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Informatioun - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -6835,7 +6894,7 @@ and allows you to pitch adjust them for harmonic mixing. Crossfader Curve - + Crossfader Curve @@ -7396,173 +7455,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Aktiv - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7580,131 +7638,131 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7859,27 +7917,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7892,250 +7951,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies - + Visual gain of the low frequencies - + High - + Global visual gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8143,47 +8208,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware - + Controllers - + Library - + Interface - + Waveforms - + Mixer - + Auto DJ Auto Dj - + Decks - + Colors @@ -8218,47 +8283,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects - + Recording - + Beat Detection - + Key Detection - + Normalization - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control - + Live Broadcasting - + Modplug Decoder @@ -8291,22 +8356,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8614,284 +8679,284 @@ This can not be undone! - + Filetype: - + BPM: BPM - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Lied - + Album Artist - + Composer Komponist - + Title Titel - + Grouping - + Key - + Year Joër - + Artist Kënschtler - + Album Album - + Genre Genre - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -9048,7 +9113,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9250,27 +9315,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9414,38 +9479,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes - + Select your iTunes library - + (loading) iTunes - + Use Default Library - + Choose Library... - + Error Loading iTunes Library - + There was an error loading your iTunes library. Check the logs for details. @@ -9453,12 +9518,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9466,18 +9531,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9485,15 +9550,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9504,57 +9569,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9562,62 +9627,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9627,22 +9692,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Playlescht emportéieren - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Playlescht Fichieren (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9689,27 +9754,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9769,18 +9834,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9792,208 +9857,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10009,13 +10115,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Späer - - + + Playlists @@ -10025,32 +10131,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Opgespart - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -11541,7 +11673,7 @@ Fully right: end of the effect period - + Deck %1 @@ -11674,7 +11806,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11705,7 +11837,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11838,12 +11970,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11878,42 +12010,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11971,54 +12103,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12153,19 +12285,19 @@ may introduce a 'pumping' effect and/or distortion. Späer - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12577,7 +12709,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12759,7 +12891,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art @@ -12995,197 +13127,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13423,924 +13555,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next Nächsten - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Fierderun - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14475,33 +14615,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14521,205 +14661,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue - + Headphone - + Mute - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14764,254 +14914,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat - + When active the track will repeat if you go past the end or reverse before the start. - + Eject - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist - + Displays the artist of the loaded track. - + Track Title - + Displays the title of the loaded track. - + Track Album Album - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -15019,12 +15169,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15032,47 +15182,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15244,47 +15389,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15408,407 +15553,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view + + + + + Ctrl+f - + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15816,25 +15992,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15843,25 +16019,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - - - - + Search noun - + Clear input @@ -15872,169 +16036,163 @@ This can not be undone! - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut + See User Manual > Mixxx Library for more information. - - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Kënschtler - + Album Artist - + Composer Komponist - + Title Titel - + Album Album - + Grouping - + Year Joër - + Genre Genre - + Directory - + &Search selected @@ -16042,599 +16200,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates Datei - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) An Playlescht Warteschlang setzen (Ennen) - + Add to Auto DJ Queue (top) An Playlescht Warteschlang setzen (Uewen) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Läschen - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Bewäertung - + Cue Point - + + Hotcues - + Intro - + Outro - + Key - + ReplayGain - + Waveform - + Comment Kommentar - + All - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist Nei Playlist - - - + + + Playlist Creation Failed Playlescht konnt net erstallt gin - + A playlist by that name already exists. Eng Playlescht mam selweschten Numm gett et schon - + A playlist cannot have a blank name. Eng Playlescht kann net Eidel sin - + An unknown error occurred while creating playlist: En onbekannten Fehler ass beim Erstellen vun der Playlescht opgetrueden: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16650,37 +16834,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16688,37 +16872,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16726,60 +16910,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16790,67 +16979,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Duerchsichen - + Export directory - + Database version - + Export Exportéieren - + Cancel - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16871,7 +17071,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16881,23 +17081,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_mi.ts b/res/translations/mixxx_mi.ts index b5e9b6945cfa..8d6f7f0b91fd 100644 --- a/res/translations/mixxx_mi.ts +++ b/res/translations/mixxx_mi.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist Kaweake Rārangipāho @@ -258,13 +258,13 @@ - + Playlist Creation Failed I rahua te auaha tūtira waiata - + An unknown error occurred while creating playlist: Hapa waihangatanga rārangipāho: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) Rārangipāho M3U (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp Waitohuwā @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Pukaemi - + Album Artist Mataoro Pukaemi - + Artist Mataoro - + Bitrate Auaumoka - + BPM Taki i te Meneti - + Channels - + Color - + Comment Tākupu - + Composer Kaitito - + Cover Art Toi Pukaemi - + Date Added Rā i Tāpiritia - + Last Played - + Duration Roanga - + Type Momo - + Genre Tūmomo - + Grouping Whakarōpū - + Key Paeoro - + Location Tauwāhi - + Preview Arokite - + Rating Whakatauranga - + ReplayGain - + Samplerate - + Played I Pāhotia - + Title Taitara - + Track # # Riu - + Year Tau - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library - + Refresh directory tree - + Quick Links - - + + Devices - + Removable Devices - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM Taki i te Meneti - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Raka @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages - + Export Crate - + Unlock - + An unknown error occurred while creating crate: - + Rename Crate + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - + M3U Playlist (*.m3u) Rārangipāho M3U (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. - + A crate by that name already exists. @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 - + Shoutcast 1 - + Icecast 1 - + MP3 - + Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% - + 16% - + 24% - + 50% - + 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Whakaingoa Anō - + Export - + Delete - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: - + Location: - + Bitrate: - + Comments - + BPM Taki i te Meneti - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # # Riu - + Album Artist Mataoro Pukaemi - + Composer Kaitito - + Title Taitara - + Grouping Whakarōpū - + Key Paeoro - + Year Tau - + Artist Mataoro - + Album Pukaemi - + Genre Tūmomo @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Raka - + Playlists Ngā Rārangipāho @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Waihangaia he Rārangipāho @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Ngā Rārangipāho - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Raka - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist Waihangaia he rārangipāho - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Paeoro - + harmonic with %1 - + BPM Taki i te Meneti - + between %1 and %2 - + Artist Mataoro - + Album Artist Mataoro Pukaemi - + Composer Kaitito - + Title Taitara - + Album Pukaemi - + Grouping Whakarōpū - + Year Tau - + Genre Tūmomo - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist Tāpiri ki te Rārangipāho - + Crates - + Metadata - + Update external collections - + Cover Art Toi Pukaemi - + Adjust BPM - + Select Color - - + + Analyze Tātari - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Muku - + Remove from Playlist Mukua mai i Rārangipāho - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Whakatauranga - + Cue Point - + Hotcues - + Intro - + Outro - + Key Paeoro - + ReplayGain - + Waveform - + Comment Tākupu - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Waihangaia he Rārangipāho - + Enter name for new playlist: Tāurutia te ingoa rārangipāho hōu: - + New Playlist Rārangipāho Hōu - - - + + + Playlist Creation Failed I rahua te auaha tūtira waiata - + A playlist by that name already exists. Kei te tīariari kē te ingoa rārangipāho. - + A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: Hapa waihangatanga rārangipāho: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_mk.ts b/res/translations/mixxx_mk.ts index ce7809aaba74..78991d8033a2 100644 --- a/res/translations/mixxx_mk.ts +++ b/res/translations/mixxx_mk.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ Авто-Диџеј - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist Изнеси Плејлиста @@ -258,13 +258,13 @@ - + Playlist Creation Failed Неуспешно креирање на Плејлистата - + An unknown error occurred while creating playlist: Непозната грешка се појави при креирање на плејлистата: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Плејлиста (*.m3u);;M3U8 Плејлиста (*.m3u8);;PLS Плејлиста (*.pls);;Текст CSV (*.csv);;Читлив текст (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # Бр. - + Timestamp Временска ознака @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Не може да се вчита датотеката @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Албум - + Album Artist - + Artist Изведувач - + Bitrate Брзина на битови - + BPM Битови во минута - + Channels - + Color - + Comment Коментар - + Composer Композитор - + Cover Art - + Date Added Датум на додавање - + Last Played - + Duration Времетраење - + Type Тип - + Genre Жанр - + Grouping - + Key Нота - + Location Локација - + Preview - + Rating Рејтинг - + ReplayGain - + Samplerate - + Played Пуштено - + Title Наслов - + Track # Нумера бр. - + Year Година - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links Додави во Брза врска - + Remove from Quick Links Избриши од Брза врска - + Add to Library - + Refresh directory tree - + Quick Links Брзи врски - - + + Devices Уреди - + Removable Devices Преносни Уреди - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM Битови во минута - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Додади во листата на автоматскиот Диџеј (најдолу) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Додади во листата на автоматскиот Диџеј (најгоре) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next - + Switch to next effect - + Previous - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Авто-Диџеј - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Заклучи @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages - + Export Crate Изнеси кутија - + Unlock Отклучи - + An unknown error occurred while creating crate: - + Rename Crate + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Плејлиста (*.m3u);;M3U8 Плејлиста (*.m3u8);;PLS Плејлиста (*.pls);;Текст CSV (*.csv);;Читлив текст (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. - + A crate by that name already exists. @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Секунди - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Авто-Диџеј - + Shuffle Измешај - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 - + Shoutcast 1 - + Icecast 1 - + MP3 - + Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% - + 16% - + 24% - + 50% - + 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Преименувај - + Export - + Delete - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Излез - + Input Влез - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: Битови во минута - + Location: - + Bitrate: - + Comments - + BPM Битови во минута - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Нумера бр. - + Album Artist - + Composer Композитор - + Title Наслов - + Grouping - + Key Нота - + Year Година - + Artist Изведувач - + Album Албум - + Genre Жанр @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Заклучи - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock Отклучи - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Заклучи - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Нота - + harmonic with %1 - + BPM Битови во минута - + between %1 and %2 - + Artist Изведувач - + Album Artist - + Composer Композитор - + Title Наслов - + Album Албум - + Grouping - + Year Година - + Genre Жанр - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Додади во листата на автоматскиот Диџеј (најдолу) - + Add to Auto DJ Queue (top) Додади во листата на автоматскиот Диџеј (најгоре) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Одстрани - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Рејтинг - + Cue Point - + Hotcues - + Intro - + Outro - + Key Нота - + ReplayGain - + Waveform - + Comment Коментар - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist Нова Плејлиста - - - + + + Playlist Creation Failed Неуспешно креирање на Плејлистата - + A playlist by that name already exists. Веќе постои Плејлиста со тоа име. - + A playlist cannot have a blank name. Плејлистата неможе да има празно име. - + An unknown error occurred while creating playlist: Непозната грешка се појави при креирање на плејлистата: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_nb.qm b/res/translations/mixxx_nb.qm index 2f93eacaa6ee..72a1ab3fe588 100644 Binary files a/res/translations/mixxx_nb.qm and b/res/translations/mixxx_nb.qm differ diff --git a/res/translations/mixxx_nb.ts b/res/translations/mixxx_nb.ts index 42c714ff106e..6a6e36033d87 100644 --- a/res/translations/mixxx_nb.ts +++ b/res/translations/mixxx_nb.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Fjern Kasse som Sporkilde - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Legg til Kasse som Sporkilde @@ -149,28 +149,28 @@ BasePlaylistFeature - + New Playlist Ny spilleliste - + Add to Auto DJ Queue (bottom) Legg til Automatisk DJ Kø - + Create New Playlist Opprett ny spilleliste - + Add to Auto DJ Queue (top) Legg til Automatisk DJ Kø (øverst) - + Remove Fjern @@ -180,12 +180,12 @@ Gi nytt navn - + Lock Lås - + Duplicate Duplikat @@ -206,24 +206,24 @@ Analysér hele spillelisten - + Enter new name for playlist: Skriv inn nytt navn for spilleliste: - + Duplicate Playlist Dupliser spillelisten - - + + Enter name for new playlist: Skriv inn nytt navn for spilleliste: - + Export Playlist Eksportér spilleliste @@ -233,70 +233,77 @@ - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Gi spillelisten nytt navn - - + + Renaming Playlist Failed Navngivning av spilleliste mislyktes - - - + + + A playlist by that name already exists. Det finnes allerede en spilleliste med det navnet. - - - + + + A playlist cannot have a blank name. Spillelisten kan ikke ha en tomt navn. - + _copy //: Appendix to default name when duplicating a playlist Kopier - - - - - - + + + + + + Playlist Creation Failed Oppretting av spilleliste mislyktes - - + + An unknown error occurred while creating playlist: Det oppstod en ukjent feil under oppretting av spilleliste: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U spilleliste (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Spilleliste (*.m3u);;M3U8 Spilleliste (*.m3u8);;PLS Spilleliste (*.pls);;Tekst CSV (*.csv);;Lesbar Tekst (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Tidsstempel @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Fikk ikke lastet sporet @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Album - + Album Artist Albumartist - + Artist Artist - + Bitrate Bithastighet - + BPM BPM - + Channels Kanaler - + Color - + Comment Kommentar - + Composer Komponist - + Cover Art Omslagsbilde - + Date Added Dato lagt til - + Last Played - + Duration Varighet - + Type Type - + Genre Sjanger - + Grouping Gruppering - + Key Tast - + Location Plassering - + + Overview + + + + Preview Forhåndsvisning - + Rating Vurdering - + ReplayGain Avspillingsnivå - + Samplerate - + Played Spilt - + Title Tittel - + Track # Spornummer # - + Year År - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Legg til Hurtiglenker - + Remove from Quick Links Fjern fra Hurtiglenker - + Add to Library Legg til bibliotek - + Refresh directory tree - + Quick Links Hurtiglenker - - + + Devices Enheter - + Removable Devices Avtagbare enheter - - + + Computer Datamaskin - + Music Directory Added Musikkmappe lagt til - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Du har lagt til én eller flere musikkmapper. Sporene i disse mappene vil ikke være tilgjengelig før du oppdaterer biblioteket. Vil du oppdatere nå? - + Scan Skann - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -749,87 +771,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -839,27 +861,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1041,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume Sett til fullt volum - + Set to zero volume @@ -1072,13 +1099,13 @@ trace - Above + Profiling messages - + Headphone listen button - + Mute button @@ -1089,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1148,22 +1175,22 @@ trace - Above + Profiling messages BPM tappeknapp - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1173,194 +1200,194 @@ trace - Above + Profiling messages Hint - + Vinyl Control Vinylkontroll - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues Markører - + Cue button Markørknapp - + Set cue point Sett markørpunkt - + Go to cue point Gå til markørpunkt - + Go to cue point and play Gå til markørpunkt og spill - + Go to cue point and stop Gå til markørpunkt og stopp - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1476,20 +1503,20 @@ Markørknapp - - + + Volume Fader - + Full Volume Fullt Volum - + Zero Volume @@ -1505,7 +1532,7 @@ Markørknapp - + Mute @@ -1516,7 +1543,7 @@ Markørknapp - + Headphone Listen @@ -1537,25 +1564,25 @@ Markørknapp - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1625,82 +1652,82 @@ Markørknapp - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1741,451 +1768,451 @@ Markørknapp - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode Vinyl Kontrollmodus - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Legg til Automatisk DJ Kø - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Legg til Automatisk DJ Kø (øverst) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects Effekter - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Neste - + Switch to next effect - + Previous Forrige - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob Forsterker knapp - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2200,102 +2227,102 @@ Markørknapp - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2447,1041 +2474,1063 @@ Markørknapp - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Mikrofon av/på - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface Brukergrensesnitt - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3596,32 +3645,32 @@ Markørknapp ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3665,13 +3714,13 @@ Markørknapp CrateFeature - + Remove Fjern - + Create New Crate @@ -3681,132 +3730,132 @@ Markørknapp Gi nytt navn - - + + Lock Lås - + Export Crate as Playlist - + Export Track Files - + Duplicate Duplikat - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Kasser - - + + Import Crate Importer Kasse - + Export Crate Eksporter Kasse - + Unlock Lås opp - + An unknown error occurred while creating crate: En ukjent feil oppstod under oppretting av kasse: - + Rename Crate Endra navn på Kasse - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Endring av kassenavn mislykket - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Spilleliste (*.m3u);;M3U8 Spilleliste (*.m3u8);;PLS Spilleliste (*.pls);;Tekst CSV (*.csv);;Lesbar Tekst (*.txt) - + M3U Playlist (*.m3u) M3U spilleliste (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. Kasser er en fin måte å organisere musikken du vil mikse med. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! Kasser lar deg organisere musikken som du vil! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. En kasse kan ikke ha blankt navn. - + A crate by that name already exists. Det er allerede en kasse ved det navnet. @@ -3901,12 +3950,12 @@ Markørknapp Tidligere bidragsytere - + Official Website - + Donate @@ -4025,72 +4074,72 @@ Markørknapp DlgAutoDJ - + Skip Hopp over - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Sekunder - + Auto DJ Fade Modes Full Intro + Outro: @@ -4121,80 +4170,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Auto DJ - + Shuffle Tilfeldig rekkefølge - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4417,37 +4466,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4486,17 +4535,17 @@ You tried to learn: %1,%2 - + Log - + Search Søk - + Stats @@ -5149,113 +5198,113 @@ associated with each key. DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Ingen - + %1 by %2 %1 av %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5268,105 +5317,105 @@ Apply settings and continue? - + Enabled Slått på - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Beskrivelse: - + Support: - + Screens preview - + Input Mappings - - + + Search Søk - - + + Add Legg til - - + + Remove Fjern @@ -5381,22 +5430,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5406,28 +5455,28 @@ Apply settings and continue? - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Nullstill alle - + Output Mappings @@ -5586,6 +5635,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6177,62 +6236,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Informasjon - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7399,173 +7458,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Slått på - + Stereo Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Feil i oppsettet @@ -7583,131 +7641,131 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate Samplingsfrekvens - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Utgang - + Input Inngang - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7862,27 +7920,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available OpenGL ikke tilgjengelig - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7895,250 +7954,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds sekunder - + Low Lav - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies - + Visual gain of the low frequencies - + High Høy - + Global visual gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8146,47 +8211,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware - + Controllers - + Library Bibliotek - + Interface - + Waveforms - + Mixer Mikser - + Auto DJ Auto DJ - + Decks - + Colors @@ -8221,47 +8286,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Effekter - + Recording Opptak - + Beat Detection - + Key Detection - + Normalization Normalisering - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Vinylkontroll - + Live Broadcasting Direkte Sending - + Modplug Decoder @@ -8294,22 +8359,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Start opptak - + Recording to file: - + Stop Recording Stopp opptak - + %1 MiB written in %2 @@ -8617,284 +8682,284 @@ This can not be undone! - + Filetype: - + BPM: BPM - + Location: - + Bitrate: - + Comments Kommentarer - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Spornummer # - + Album Artist Albumartist - + Composer Komponist - + Title Tittel - + Grouping Gruppering - + Key Tast - + Year År - + Artist Artist - + Album Album - + Genre Sjanger - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM Dobbel BPM - + Halve BPM Halv BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous &Forrige - + Move to the next item. "Next" button - + &Next &Neste - + Duration: Varighet: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser Åpne i filutforsker - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Bruk - + &Cancel &Avbryt - + (no color) @@ -9051,7 +9116,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9253,27 +9318,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9417,38 +9482,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes iTunes - + Select your iTunes library Velg ditt ITunes-bibliotek - + (loading) iTunes (laster) iTunes - + Use Default Library Bruk standardbiblioteket - + Choose Library... Velg bibliotek ... - + Error Loading iTunes Library Feil ved lasting av iTunes-bibliotek - + There was an error loading your iTunes library. Check the logs for details. @@ -9456,12 +9521,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9469,18 +9534,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9488,15 +9553,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9507,57 +9572,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut Snarvei @@ -9565,62 +9630,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9630,22 +9695,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Importer spilleliste - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Spilleliste filer (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9692,27 +9757,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9772,18 +9837,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9795,208 +9860,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. Finn <b>Hjelp</b> i Mixxx-wiki'en. - - - + + + <b>Exit</b> Mixxx. - + Retry Prøv igjen - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Sett opp på nytt - + Help Hjelp - - + + Exit Avslutt - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue Fortsett - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10012,13 +10118,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Lås - - + + Playlists Spillelister @@ -10028,32 +10134,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Lås opp - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Opprett ny spilleliste @@ -11544,7 +11676,7 @@ Fully right: end of the effect period - + Deck %1 Spiller %1 @@ -11677,7 +11809,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11708,7 +11840,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11841,12 +11973,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11881,42 +12013,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11974,54 +12106,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Spillelister - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12156,19 +12288,19 @@ may introduce a 'pumping' effect and/or distortion. Lås - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12580,7 +12712,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12762,7 +12894,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Omslagsbilde @@ -12998,197 +13130,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play Spill - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13426,924 +13558,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next Neste - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Forrige - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14478,33 +14618,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14524,205 +14664,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue - + Headphone - + Mute - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14767,254 +14917,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat - + When active the track will repeat if you go past the end or reverse before the start. - + Eject Løs ut - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode Vinyl Kontrollmodus - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration - + Displays the duration of the loaded track. - + Information is loaded from the track's metadata tags. - + Track Artist - + Displays the artist of the loaded track. - + Track Title - + Displays the title of the loaded track. - + Track Album Album - + Displays the album name of the loaded track. - + Track Artist/Title - + Displays the artist and title of the loaded track. @@ -15022,12 +15172,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15035,47 +15185,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15247,47 +15392,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15411,407 +15556,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... + + + + + Search for tracks in the current library view - - Export the library to the Engine Prime format + + Ctrl+f - + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist Lag en ny spilleliste - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View &Vis - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen &Fullskjerm - + Display Mixxx using the full screen Vis Mixxx på hele skjermen - + &Options &Alternativer - + &Vinyl Control &Vinylkontroll - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences &Innstillinger - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help &Hjelp - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. Les Mixxx bruksanvisningen. - + &Keyboard Shortcuts &Tastatursnarveier - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application Oversett Denne Applikasjon. - + Help translate this application into your language. Hjelp til med å oversette dette programmet til ditt språk. - + &About &Om - + About the application Om programmet @@ -15819,25 +15995,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15846,25 +16022,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Søk - + Clear input @@ -15875,169 +16039,163 @@ This can not be undone! Søk… - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Snarvei + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Avslutt søk + + Delete query from history + WSearchRelatedTracksMenu - + Search related Tracks - + Key Tast - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Artist - + Album Artist Albumartist - + Composer Komponist - + Title Tittel - + Album Album - + Grouping Gruppering - + Year År - + Genre Sjanger - + Directory - + &Search selected @@ -16045,599 +16203,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist Legg til i spilleliste - + Crates Kasser - + Metadata - + Update external collections - + Cover Art Omslagsbilde - + Adjust BPM - + Select Color - - + + Analyze Analysér - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Legg til Automatisk DJ Kø - + Add to Auto DJ Queue (top) Legg til Automatisk DJ Kø (øverst) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Fjern - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Egenskaper - + Open in File Browser Åpne i filutforsker - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Vurdering - + Cue Point - + + Hotcues - + Intro - + Outro - + Key Tast - + ReplayGain Avspillingsnivå - + Waveform Bølgeform - + Comment Kommentar - + All Alle - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM Lås BPM - + Unlock BPM Åpne BPM - + Double BPM Dobbel BPM - + Halve BPM Halv BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Spiller %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Opprett ny spilleliste - + Enter name for new playlist: Skriv inn nytt navn for spilleliste: - + New Playlist Ny spilleliste - - - + + + Playlist Creation Failed Oppretting av spilleliste mislyktes - + A playlist by that name already exists. Det finnes allerede en spilleliste med det navnet. - + A playlist cannot have a blank name. Spillelisten kan ikke ha en tomt navn. - + An unknown error occurred while creating playlist: Det oppstod en ukjent feil under oppretting av spilleliste: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Avbryt - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Lukk - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16653,37 +16837,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16691,37 +16875,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16729,60 +16913,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Vis eller skjul kolonner + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database Får ikke åpnet databasen - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16793,67 +16982,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Bla gjennom - + Export directory - + Database version - + Export Eksportér - + Cancel Avbryt - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16874,7 +17074,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16884,23 +17084,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_nl.qm b/res/translations/mixxx_nl.qm index 0a6f312fb6d4..5c6e526f49e9 100644 Binary files a/res/translations/mixxx_nl.qm and b/res/translations/mixxx_nl.qm differ diff --git a/res/translations/mixxx_nl.ts b/res/translations/mixxx_nl.ts index e954edb9d6ae..79ad4e6e9955 100644 --- a/res/translations/mixxx_nl.ts +++ b/res/translations/mixxx_nl.ts @@ -3649,32 +3649,32 @@ traceren - Boven + Profileringsberichten ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. De functionaliteit van deze controller-verbinding wordt uitgeschakeld totdat het probleem is opgelost. - + You can ignore this error for this session but you may experience erratic behavior. U kunt deze fout tijdens deze sessie negeren, maar u kunt onregelmatig gedrag ervaren. - + Try to recover by resetting your controller. Probeer te herstellen door uw controller te resetten. - + Controller Mapping Error Controller Mapping Fout - + The mapping for your controller "%1" is not working properly. De mapping voor uw controller "%1" werkt niet goed. - + The script code needs to be fixed. De script code moet hersteld worden. @@ -4792,123 +4792,129 @@ U probeerde aan te leren: %1, %2 DlgPrefBroadcast - + Icecast 2 Icecast 2 - + Shoutcast 1 Shoutcast 1 - + Icecast 1 Icecast 1 - + MP3 MP3 - + Ogg Vorbis Ogg Vorbis - + Opus Opus - + AAC AAC - + HE-AAC HE-AAC - + HE-AACv2 HE-AACv2 - + Automatic Automatisch - + Mono Mono - + Stereo Stereo - - - - + + + + Action failed Actie mislukt - + You can't create more than %1 source connections. U kunt niet meer dan %1 bronverbindingen maken. - + Source connection %1 Bronverbinding %1 - + + Settings for %1 + Settings for broadcast profile, %1 is the profile name placeholder + + + + At least one source connection is required. Er is ten minste één bronverbinding vereist. - + Are you sure you want to disconnect every active source connection? Weet u zeker dat u elke actieve bronverbinding wilt verbreken? - - + + Confirmation required Bevestiging benodigd - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. '%1' heeft hetzelfde Icecast mountpoint als '%2'. Twee bronverbindingen met dezelfde server die hetzelfde mountpoint hebben, kunnen niet tegelijkertijd worden ingeschakeld. - + Are you sure you want to delete '%1'? Weet u zeker dat u '%1' wilt verwijderen? - + Renaming '%1' Hernoemen '%1' - + New name for '%1': Nieuwe naam voor '%1': - + Can't rename '%1' to '%2': name already in use Kan de naam van '%1' niet hernoemen naar '%2': naam is al in gebruik @@ -5689,6 +5695,16 @@ Instellingen toepassen en doorgaan? Multi-Sampling Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6303,62 +6319,62 @@ U kunt de Tracks ten allen tijde op het scherm slepen en neerzetten om een deck DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. De minimale grootte van de geselecteerde skin is groter dan uw schermresolutie. - + Allow screensaver to run Toestaan dat Schermbeveiliging wordt uitgevoerd. - + Prevent screensaver from running Voorkom dat Schermbeveiliging wordt uitgevoerd - + Prevent screensaver while playing Voorkom Schermbeveiliging tijdens afspelen - + Disabled Uitgeschakeld - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Deze skin ondersteunt geen kleurenschema's - + Information Informatie - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx moet worden herstart vóór de nieuwe regio, schaal of multi-sampling instellingen toegepast worden. @@ -6605,47 +6621,47 @@ and allows you to pitch adjust them for harmonic mixing. Het item is geen map of ontbreekt. - + Choose a music directory Kies een muziek folder - + Confirm Directory Removal Bevestig het verwijderen van de map - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. Mixxx zal deze map niet langer observeren voor nieuwe Tracks. Wat wil je doen met de Tracks in deze map en submappen?<ul><li>Verberg alle Tracks uit deze map en submappen. </li><li>Verwijder permanent alle metadata van deze Tracks uit Mixxx.</li><li>Laat de Tracks ongemoeid in je Bibliotheek.</li></ul>Tracks verbergen zal wel de metadata blijven bewaren mocht je ze in de toekomst opnieuw willen toevoegen. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. Metadata betekent alle Trackdetails (Artiest, Titel, Afspeelteller, etc.) evenals Beatgrids, Hotcues en Loops. Deze keuze heeft alleen betrekking op de Mixxx-Bibliotheek. Er worden geen bestanden op schijf gewijzigd of verwijderd. - + Hide Tracks Verberg Tracks - + Delete Track Metadata Verwijder Metadata - + Leave Tracks Unchanged Laat Tracks ongewijzigd - + Relink music directory to new location Koppel de muziekmap opnieuw aan een nieuwe locatie - + Select Library Font Selecteer Bibliotheeklettertype @@ -6694,262 +6710,267 @@ and allows you to pitch adjust them for harmonic mixing. Herscan de bestandsmappen bij opstarten - + Audio File Formats Audiobestandsindelingen - + Track Table View Track tabel aanzicht - + Track Double-Click Action: Actie bij dubbel klik op Track - + BPM display precision: BPM detail weergave : - + Session History Sessie Geschiedenis - + Track duplicate distance Track komt dubbel voor - + When playing a track again log it to the session history only if more than N other tracks have been played in the meantime Wanneer een Track opnieuw wordt afgespeeld dan wordt deze enkel in de geschiedenis opgeslagen als er ondertussen meer dan N andere Tracks werden afgespeeld. - + History playlist with less than N tracks will be deleted<br/><br/>Note: the cleanup will be performed during startup and shutdown of Mixxx. Geschiedenis afspeellijsten met minder dan N Tracks worden verwijderd<br/><br/>Opmerking: het opkuisen gebeurd tijdens het opstarten en afsluiten van Mixxx. - + Delete history playlist with less than N tracks Verwijder Geschiedenis afspeellijst als die minder dan N Tracks bevat - + Library Font: Lettertype Bibliotheek: - + + Show scan summary dialog + + + + Grey out played tracks Verduister gespeelde tracks in grijs. - + Track Search Zoek track - + Enable search completions Zoekterm vervolledigen toestaan - + Enable search history keyboard shortcuts Zoekgeschiedenis via toetsenbord-snelkoppelingen toestaan - + Percentage of pitch slider range for 'fuzzy' BPM search: Percentage van het bereik van de pitch glijder voor wazige BPM zoekfunctie: - + This range will be used for the 'fuzzy' BPM search (~bpm:) via the search box, as well as for BPM search in Track context menu > Search related Tracks Dit bereik zal zowel gebruikt worden in de wazige BPM zoekfunctie (`bpm) via het zoekvenster als voor de BPM zoekfunctie in het Track omgevingsmenu > en het Zoeken van Overeenkomstige Tracks - + Preferred Cover Art Fetcher Resolution Voorkeur resolutie bij zoeken naar Cover Art - + Fetch cover art from coverartarchive.com by using Import Metadata From Musicbrainz. Zoek Cover Art bij CcoverArtArchive.com door Metadata van Musicbrainz te importeren. - + Note: ">1200 px" can fetch up to very large cover arts. Opmerking: ">1200 px" kan leiden tot zeer grote Cover Art bestanden. - + >1200 px (if available) >1200 px (indien beschikbaar) - + 1200 px (if available) 1200 px (indien beschikbaar) - + 500 px 500 px - + 250 px 250 px - + Settings Directory Instellingen Map - + The Mixxx settings directory contains the library database, various configuration files, log files, track analysis data, as well as custom controller mappings. De Mixxx instellingenmap bevat de Bibliotheek-database, verschillende configuratie-bestanden, log-bestanden, Track-analyses, als ook persoonlijke controller instellingen. - + Edit those files only if you know what you are doing and only while Mixxx is not running. Bewerk deze bestanden alleen als u weet wat u doet en alleen terwijl Mixxx niet actief is. - + Open Mixxx Settings Folder Open Mixxx-instellingenmap - + Library Row Height: Rijhoogte Bibliotheek: - + Use relative paths for playlist export if possible Gebruik indien mogelijk relatieve paden bij exporteren van afspeellijsten - + ... ... - + px px - + Synchronize library track metadata from/to file tags Synchroniseer Bibliotheek Track metadata van /naar tags in bestanden. - + Automatically write modified track metadata from the library into file tags and reimport metadata from updated file tags into the library Automatisch de aangepaste Track-metadata vanuit de Bibliotheek naar de bestand-tags wegschrijven en de metadata opnieuw importeren vanuit de aangepaste bestanden naar de Bibliotheek. - + Synchronize Serato track metadata from/to file tags (experimental) Synchroniseer Serato Track metadata van/naar bestands-tags (experimenteel) - + Keeps track color, beat grid, bpm lock, cue points, and loops synchronized with SERATO_MARKERS/MARKERS2 file tags.<br/><br/>WARNING: Enabling this option also enables the reimport of Serato metadata after files have been modified outside of Mixxx. On reimport existing metadata in Mixxx is replaced with the metadata found in file tags. Custom metadata not included in file tags like loop colors is lost. Houdt Track kleur, Beat Grid, BPM vergrendeling, Cue-Punten en Loops gesynchroniseerd met SERATO_MARKERS/MARKERS2 BestandsTags.<br/><br/>WAARSCHUWING: Activatie van deze optie activeert ook het her-importeren van de Serato metadata nadat bestanden nuiten Mixxx werden aangepast. Bij her-import wordt de bestaande metadata in Mixxx vervangen door de metadata die in de BestandsTags. Aangepaste metadata die niet in BestandsTags wordt opgeslagen, wordt verloren (bijv. Loop Kleuren) - + Edit metadata after clicking selected track Bewerk metadata nadat u op de geselecteerde Track hebt geklikt - + Search-as-you-type timeout: Zoeken-bij-typen timeout: - + ms ms - + Load track to next available deck Laad Track naar het volgende beschikbare Deck - + External Libraries Externe Bibliotheken - + You will need to restart Mixxx for these settings to take effect. U moet Mixxx opnieuw opstarten om deze instellingen te activeren. - + Show Rhythmbox Library Toon Rhythmbox Bibliotheek - + Track Metadata Synchronization / Playlists Track Metadata Synchronisatie / Afspeellijsten - + Add track to Auto DJ queue (bottom) Track toevoegen aan Auto-DJ wachtrij (onderaan) - + Add track to Auto DJ queue (top) Track toevoegen aan Auto-DJ wachtrij (bovenaan) - + Ignore Negeren - + Show Banshee Library Laat Banshee Bibliotheek zien - + Show iTunes Library Toon iTunes Bibliotheek - + Show Traktor Library Toon Traktor Bibliotheek - + Show Rekordbox Library Toon Rekordbox Bibliotheek - + Show Serato Library Toon Serato Bibliotheek - + All external libraries shown are write protected. Alle weergegeven externe bibliotheken zijn tegen schrijven beveiligd. @@ -7294,33 +7315,33 @@ and allows you to pitch adjust them for harmonic mixing. DlgPrefRecord - + Choose recordings directory Kies de Map voor Opnames - - + + Recordings directory invalid Map voor Opnames ongeldig - + Recordings directory must be set to an existing directory. De Map voor Opnames moet op een bestaande map worden ingesteld. - + Recordings directory must be set to a directory. De Map voor Opnames moet ingesteld zijn op een map. - + Recordings directory not writable Map voor Opnames is niet beschrijfbaar - + You do not have write access to %1. Choose a recordings directory you have write access to. U heeft geen schrijftoegang tot %1. Kies een Map voor Opnames waartoe u schrijftoegang hebt. @@ -7338,43 +7359,55 @@ and allows you to pitch adjust them for harmonic mixing. Zoeken... - - + + This will include the filepath for each track in the CUE file. +This option makes the CUE file less portable and can reveal personal +information from filepaths (i.e. username) + + + + + Enable File Annotation in CUE file + + + + + Quality Kwaliteit - + Tags Labels - + Title Titel - + Author Auteur - + Album Album - + Output File Format Bestandsindeling voor Uitvoer - + Compression Compressie - + Lossy @@ -7389,12 +7422,12 @@ and allows you to pitch adjust them for harmonic mixing. Map: - + Compression Level Compressie Niveau - + Lossless @@ -8000,17 +8033,17 @@ Het DoelVolume is bij benadering en veronderstelt dat Track PreGain en Hoofd Out volledige waveform weergave - + OpenGL not available OpenGL niet beschikbaar - + dropped frames verloren frames - + Cached waveforms occupy %1 MiB on disk. Waveforms in cache gebruiken %1 MiB op schijf @@ -8028,22 +8061,22 @@ Het DoelVolume is bij benadering en veronderstelt dat Track PreGain en Hoofd Out Framesnelheid - + OpenGL Status OpenGL Status - + Displays which OpenGL version is supported by the current platform. Geeft weer welke OpenGL-versie wordt ondersteund door het huidige platform. - + Normalize waveform overview Normaliseer Waveform-overzicht - + Average frame rate Gemiddelde framesnelheid @@ -8059,7 +8092,7 @@ Het DoelVolume is bij benadering en veronderstelt dat Track PreGain en Hoofd Out Standaard zoomniveau - + Displays the actual frame rate. Geeft de werkelijke framesnelheid weer. @@ -8094,7 +8127,7 @@ Het DoelVolume is bij benadering en veronderstelt dat Track PreGain en Hoofd Out Laag - + Show minute markers on waveform overview Toon minuut-aanduidingen in waveform overview @@ -8139,7 +8172,7 @@ Het DoelVolume is bij benadering en veronderstelt dat Track PreGain en Hoofd Out Globale visuele versterking - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. Het waveform overzicht toont de waveform omslag van de hele Track. @@ -8208,22 +8241,22 @@ Kies uit verschillende soorten weergaven voor de waveform, die voornamelijk vers pt - + Caching Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. Mixxx buffert de waveforms van je Tracks in de cache op schijf wanneer een Track voor de eerste keer laadt. Dit vermindert het CPU-gebruik tijdens het live spelen, maar vereist extra schijfruimte. - + Enable waveform caching Schakel waveform caching in - + Generate waveforms when analyzing library Genereer waveforms bij het analyseren van de Bibliotheek @@ -8239,7 +8272,7 @@ Kies uit verschillende soorten weergaven voor de waveform, die voornamelijk vers - + Type Type @@ -8269,12 +8302,42 @@ Kies uit verschillende soorten weergaven voor de waveform, die voornamelijk vers Verplaatst de speelmarkeringspositie op de waveforms naar links, rechts of midden (standaard). - + + Stem + + + + + Channel opacity + + + + + Channel opacity (outline) + + + + + Main stem opacity + + + + + Outline stem opacity + + + + + Move channel to foreground when volume is adjusted + + + + Overview Waveforms Overzicht Waveform - + Clear Cached Waveforms Wis gebufferde Waveforms @@ -9649,57 +9712,57 @@ Shown when VuMeter can not be displayed. Please keep ondersteuning. - + activate Activeer - + toggle Schakelaar - + right rechts - + left links - + right small rechts klein - + left small links klein - + up omhoog - + down omlaag - + up small omhoog klein - + down small omlaag klein - + Shortcut Snelkoppeling @@ -9778,22 +9841,22 @@ De operatie wordt afgebroken om fouten in de bibliotheek the vermijden. LibraryFeature - + Import Playlist Importeer Afspeellijst - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Afspeellijstbestanden (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Bestand Overschrijven? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9814,7 +9877,7 @@ Wil je het echt overschrijven? It's taking Mixxx a minute to scan your music library, please wait... - Mixxx heeft ongeveer een minuut nodig om je muziekBibliotheek te scannen, even geduld... + Mixxx heeft even nodig om je muziekbibliotheek te scannen, even geduld... @@ -9947,253 +10010,253 @@ Wil je het echt overschrijven? MixxxMainWindow - + Sound Device Busy Geluisapparaat bezig - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Probeer opnieuw</b> na het afsluiten van de andere applicatie of het opnieuw aansluiten van een geluidsapparaat - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Configureer</b> opnieuw de Mixxx instellingen van het geluidsapparaat. - - + + Get <b>Help</b> from the Mixxx Wiki. <b>Hulp</b>zoeken in de Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. <b>Verlaat</b> Mixxx. - + Retry Probeer opnieuw - + skin skin - + Allow Mixxx to hide the menu bar? Mixxx toestaan om de menu balk te verbergen? - + Hide Always show the menu bar? Verberg - + Always show Altijd tonen - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label De Mixxx menu balk is verborgen en kan worden opgeroepen met een enkele druk op de <b>Alt</b> toets.<br><br>Click <b>%1</b> om akkoord te gaan.<br><br>Click <b>%2</b> om dit uit te schakelen, bijvoorbeeld wanneer u Mixxx niet met een toetsenbord gebruikt.<br><br>U kan deze instelling altijd wijzigen in de Voorkeuren -> Interface.<br> - + Ask me again Vraag mij opnieuw - - + + Reconfigure Opnieuw configureren - + Help Help - - + + Exit Afsluiten - - + + Mixxx was unable to open all the configured sound devices. Mixxx kon niet alle geconfigureerde geluidsapparaten openen. - + Sound Device Error Fout met geluidsapparaat - + <b>Retry</b> after fixing an issue <b>Probeer opnieuw</b> na het oplossen van een probleem - + No Output Devices Geen uitvoerapparaten - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Mixxx is ingesteld zonder uitvoerapparaten voor geluid. Geluidsverwerking wordt uitgeschakeld zonder een geconfigureerd uitvoerapparaat. - + <b>Continue</b> without any outputs. <b>Ga door</b> zonder uitvoer. - + Continue Verdergaan - + Load track to Deck %1 Laad Track in deck %1 - + Deck %1 is currently playing a track. Deck %1 speelt momenteel een Track af. - + Are you sure you want to load a new track? Bent u zeker dat u een nieuwe Track wil laden? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Er is geen invoerapparaat geselecteerd voor deze vinylbesturing. Selecteer eerst een invoerapparaat in de voorkeuren voor geluidshardware. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Er is geen invoerapparaat geselecteerd voor dit Directe Doorvoerapparaat. Selecteer eerst een invoerapparaat in de voorkeuren voor geluidsapparatuur. - + There is no input device selected for this microphone. Do you want to select an input device? Er is geen invoerapparaat geselecteerd voor deze microfoon. Wilt u een invoerapparaat selecteren? - + There is no input device selected for this auxiliary. Do you want to select an input device? Er is geen invoerapparaat geselecteerd voor deze Auxiliary. Wilt u een invoerapparaat selecteren? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Fout in Skin-bestand - + The selected skin cannot be loaded. De geselecteerde Skin kan niet worden geladen. - + OpenGL Direct Rendering OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. OpenGL Directe weergave-herberekening is niet ingeschakeld op uw computer.<br><br> Dit betekent dat de weergave van de golfvormen erg<br><b> traag zal zijn en uw CPU zwaar kan belasten</b>. Werk uw <br> configuratie bij om OpenGL Directe weergave-herberekening mogelijk te maken of schakel<br>de waveform weergaven uit in de Mixxx-voorkeuren door "Leeg" te selecteren<br> als de waveform weergave in het gedeelte "Interface". - - - + + + Confirm Exit Afsluiten bevestigen - + A deck is currently playing. Exit Mixxx? Er is momenteel een deck actief. Mixxx afsluiten? - + A sampler is currently playing. Exit Mixxx? Er is momenteel een sampler actief. Mixxx afsluiten? - + The preferences window is still open. Het scherm "Voorkeuren" staat nog open. - + Discard any changes and exit Mixxx? Wijzigingen negeren en Mixxx afsluiten? @@ -10215,7 +10278,7 @@ Wilt u een invoerapparaat selecteren? - + Playlists Afspeellijsten @@ -10256,27 +10319,27 @@ Wilt u een invoerapparaat selecteren? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Playlists zijn geordende lijsten met Tracks waarmee u uw DJ-sets kunt plannen. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Het kan nodig zijn om enkele Tracks van uw voorbereide afspeellijst over te slaan of enkele andere Tracks toe te voegen om de energie van uw publiek op peil te houden. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Sommige DJ's maken afspeellijsten voordat ze live optreden, maar anderen bouwen ze liever on-the-fly tijdens hun optreden. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Wanneer u een afspeellijst gebruikt tijdens een live DJ-set, vergeet dan niet om goed op te letten hoe uw publiek reageert op de muziek die u hebt gekozen om te spelen. - + Create New Playlist Creëer nieuwe afspeellijst @@ -11790,13 +11853,13 @@ Volledig rechts: einde van de effectperiode OGG-opname wordt niet ondersteund. OGG/Vorbis-Bibliotheek kan niet worden geïnitialiseerd. - + encoder failure encoderfout - + Failed to apply the selected settings. Kan de geselecteerde instellingen niet toepassen. @@ -11937,7 +12000,7 @@ Tip: compenseer "chipmunk" en "diepeg" stemmen De hoeveelheid versterking die toegepast wordt op het audio signaal. Op een hoger niveau zal het geluid meer worden vervormd (distored)r. - + Passthrough Directe Doorvoer @@ -12147,42 +12210,42 @@ release tijd zorgen voor een pompend effect en/of een vervorming. Stem #%1 - + Empty Leeg - + Simple Eenvoudig - + Filtered Gefilterd - + HSV HSV - + VSyncTest VSyncTest - + RGB RGB - + Stacked Gestapeld - + Unknown Onbekend @@ -12637,7 +12700,7 @@ release tijd zorgen voor een pompend effect en/of een vervorming. SoftwareWaveformWidget - + Filtered Gefilterd @@ -15699,323 +15762,353 @@ Dit kan niet ongedaan gemaakt worden! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Maak &nieuwe Afspeellijst - + Create a new playlist Maak een nieuwe afspeellijst - + Ctrl+n Ctrl+n - + Create New &Crate Creëer nieuwe &Krat - + Create a new crate Creëer een nieuwe Krat - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Bekijk - + Auto-hide menu bar Verberg de menu balk automatisch - + Auto-hide the main menu bar when it's not used. Verberg de hoofd menu balk wanneer deze niet gebruikt wordt. - + May not be supported on all skins. Wordt mogelijk niet op alle Skins ondersteund. - + Show Skin Settings Menu Menu Skin-instellingen weergeven - + Show the Skin Settings Menu of the currently selected Skin Toon het menu Skin-instellingen van de huidig geselecteerde thema - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Laat Microfoon Sectie zien - + Show the microphone section of the Mixxx interface. Toon de microfoonsectie van de Mixxx-interface. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Toon sectie VinylBediening - + Show the vinyl control section of the Mixxx interface. Toon de sectie VinylBediening van de Mixxx-interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Toon VoorbeluisterDeck - + Show the preview deck in the Mixxx interface. Toon het VoorbeluisterDeck in de Mixxx-interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Toon Cover Art - + Show cover art in the Mixxx interface. Toon Cover Art in de Mixxx-interface. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximaliseer Bibliotheek - + Maximize the track library to take up all the available screen space. Maximaliseer de TrackBibliotheek in de beschikbare schermruimte. - + Space Menubar|View|Maximize Library Spatie - + &Full Screen &Volledig Scherm - + Display Mixxx using the full screen Geef Mixxx weer in volledig scherm - + &Options &Opties - + &Vinyl Control &VinylBediening - + Use timecoded vinyls on external turntables to control Mixxx Gebruik tijdgecodeerde vinyl op externe draaitafels om Mixxx te bedienen - + Enable Vinyl Control &%1 Activeer VinylBediening &%1 - + &Record Mix Mix &Opnemen - + Record your mix to a file Neem je Mix op naar een bestand - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Schakel Live &Uitzenden in - + Stream your mixes to a shoutcast or icecast server Stream je mixen naar een Shoutcast- of Icecast-server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Schakel &Sneltoetsen in - + Toggles keyboard shortcuts on or off ToetsenbordSneltoetsen Aan/Uit-Schakelen - + Ctrl+` Ctrl+` - + &Preferences &Instellingen - + Change Mixxx settings (e.g. playback, MIDI, controls) Mixxx-instellingen wijzigen (bijv. Afspelen, MIDI, BedieningsElementen) - + &Developer &Ontwikkelaar - + &Reload Skin &Herlaad Skin - + Reload the skin Herlaad de Skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Ontwikkelaar &Hulpmiddelen - + Opens the developer tools dialog Opent het dialoogvenster hulpprogramma's voor ontwikkelaars - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Statistieken: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Schakel Experiment-Modus in. Verzamelt statistieken in de EXPERIMENT-Tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Statistieken: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. Schakel Base Modus in. Verzamelt statistieken in de BASE Tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Deb&ugger ingeschakeld - + Enables the debugger during skin parsing Activeert de debugger tijdens het ontleden van het thema - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Help - + Show Keywheel menu title Toon Toonaard (Key)-Rad @@ -16032,74 +16125,74 @@ Dit kan niet ongedaan gemaakt worden! Exporteer de bibliotheek naar het Engine DJ formaat - + Show keywheel tooltip text Toon Toonaard (Key)-Rad - + F12 Menubar|View|Show Keywheel F12 - + &Community Support &Community Ondersteuning - + Get help with Mixxx Zoek hulp bij Mixxx - + &User Manual &Gebruikers Handleiding - + Read the Mixxx user manual. Lees de Mixxx gebruikers handleiding. - + &Keyboard Shortcuts &Toetsenbord Sneltoetsen - + Speed up your workflow with keyboard shortcuts. Versnel uw workflow met sneltoetsen. - + &Settings directory &Instellingen map - + Open the Mixxx user settings directory. Open de map met Mixxx GebruikersInstellingen - + &Translate This Application &Vertaal Deze Applicatie - + Help translate this application into your language. Help om deze applicatie in je eigen taal te vertalen. - + &About &Over - + About the application Over de applicatie @@ -16134,25 +16227,13 @@ Dit kan niet ongedaan gemaakt worden! WSearchLineEdit - - Clear input - Clear the search bar input field - Invoer wissen - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Zoek - + Clear input Invoer wissen @@ -16163,93 +16244,87 @@ Dit kan niet ongedaan gemaakt worden! Zoek... - + Clear the search bar input field Wis het zoektekstveld - - Enter a string to search for - Geef waarde om op te zoeken + + Return + Enter - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Gebruik operatoren zoals BPM: 115-128, Artiest: BooFar, -jaar: 1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Voor meer informatie zie Handleiding > Mixxx Bibliotheek + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Snelkoppeling + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Focus + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts - Snelkoppelingen + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Enter + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Kies Zoek voor zoek-terwijl-je-typt timeout of spring naar de Tracks nadien. + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Spatie - + Toggle search history Shows/hides the search history entries Zoekgeschiedenis Tonen/Verbergen-Schakelaar - + Delete or Backspace Delete of Backspace - - Delete query from history - Verwijder zoekterm uit geschiedenis - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Beëindig zoeken + + Delete query from history + Verwijder zoekterm uit geschiedenis @@ -17056,52 +17131,52 @@ Dit kan niet ongedaan gemaakt worden! mixxx::CoreServices - + fonts lettertype - + database database - + effects Effecten - + audio interface audio interface - + decks Decks - + library Bibliotheek - + Choose music library directory Kies de map voor de muziekBibliotheek - + controllers Controllers - + Cannot open database Kan de database niet openen - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_nn.ts b/res/translations/mixxx_nn.ts index 897c80a4d1e2..8ef4c912dba0 100644 --- a/res/translations/mixxx_nn.ts +++ b/res/translations/mixxx_nn.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ Automatisk DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist @@ -258,13 +258,13 @@ - + Playlist Creation Failed - + An unknown error occurred while creating playlist: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Kunne ikkje åpna sangen @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Album - + Album Artist - + Artist Artist - + Bitrate Bitrate - + BPM BPM - + Channels - + Color - + Comment Kommentar - + Composer - + Cover Art - + Date Added Dato lagt til - + Last Played - + Duration Lengd - + Type Type - + Genre Sjanger - + Grouping - + Key Nøkkel - + Location Stad - + Preview - + Rating Vurdering - + ReplayGain - + Samplerate - + Played Spelt - + Title Tittel - + Track # Spornummer # - + Year År - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library - + Refresh directory tree - + Quick Links Snarlinkar - - + + Devices Enheitar - + Removable Devices Flyttbare enheitar - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Neste - + Switch to next effect - + Previous Førre - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Automatisk DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Lås @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages - + Export Crate - + Unlock Lås opp - + An unknown error occurred while creating crate: Ein ukjend feil hende under laginga av kasse: - + Rename Crate Endra namn på Kasse + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Endringa av kasse namnet feila - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Ein kasse kan ikkje ha eit blankt namn. - + A crate by that name already exists. Ein kasse med det namnet finnst allereie @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Hopp over - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Automatisk DJ - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 - + Shoutcast 1 - + Icecast 1 - + MP3 - + Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% - + 16% - + 24% - + 50% - + 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Endra namn - + Export - + Delete - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: BPM: - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Spornummer # - + Album Artist - + Composer - + Title Tittel - + Grouping - + Key Nøkkel - + Year År - + Artist Artist - + Album Album - + Genre Sjanger @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Lås - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock Lås opp - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Lås - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Nøkkel - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Artist - + Album Artist - + Composer - + Title Tittel - + Album Album - + Grouping - + Year År - + Genre Sjanger - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates Kassar - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Fjern - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Vurdering - + Cue Point - + Hotcues - + Intro - + Outro - + Key Nøkkel - + ReplayGain - + Waveform - + Comment Kommentar - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist - - - + + + Playlist Creation Failed - + A playlist by that name already exists. - + A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_oc.ts b/res/translations/mixxx_oc.ts index 99d67a5dbd64..45d4d1bfb9e4 100644 --- a/res/translations/mixxx_oc.ts +++ b/res/translations/mixxx_oc.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist @@ -258,13 +258,13 @@ - + Playlist Creation Failed - + An unknown error occurred while creating playlist: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Impossible de cargar la pista. @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Album - + Album Artist - + Artist Artista - + Bitrate Debit - + BPM BPM - + Channels Canals - + Color - + Comment Comentari - + Composer - + Cover Art - + Date Added Apondut lo - + Last Played - + Duration Durada - + Type Tipe - + Genre Genre - + Grouping - + Key Clau - + Location Localizacion - + Preview - + Rating Nòta - + ReplayGain - + Samplerate - + Played Jogat - + Title Títol - + Track # Pista n° - + Year Annada - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library - + Refresh directory tree - + Quick Links Ligams Rapids - - + + Devices Periferics - + Removable Devices Periferics amovibles - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Seguent - + Switch to next effect - + Previous Precedenta - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Auto DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Varrolhar @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages Importar un contenidor - + Export Crate Exportar un contenidor - + Unlock Desvarrolhar - + An unknown error occurred while creating crate: Una error desconeguda s'es producha al moment de la creacion del contenidor : - + Rename Crate Tornar nomenar lo contenidor + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Fracàs al moment del cambiament de nom del contenidor - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Un contenidor deu aver un nom. - + A crate by that name already exists. Un nauc amb aqueste nom existís ja. @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Passar al seguent - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Auto DJ - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 Icecast 2 - + Shoutcast 1 - + Icecast 1 Icecast 1 - + MP3 MP3 - + Ogg Vorbis Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo Esterèo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Pas cap - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As Enregistrar coma - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? Volètz enregistrar totas las modificacion ? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% 10 % - + 16% - + 24% - + 50% 50 % - + 90% 90 % @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Tornar nomenar - + Export Exportar - + Delete Suprimir - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Activat - + Stereo Esterèo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Error de configuracion @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev Son API - + Sample Rate Taus d'escandalhatge - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input Entrada - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev Configuracion Vinyl - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: BPM - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Pista n° - + Album Artist - + Composer - + Title Títol - + Grouping - + Key Clau - + Year Annada - + Artist Artista - + Album Album - + Genre Genre @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel &Anullar - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. <b>Quitar</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit Quitar - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Varrolhar - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock Desvarrolhar - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Varrolhar - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Clau - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Artista - + Album Artist - + Composer - + Title Títol - + Album Album - + Grouping - + Year Annada - + Genre Genre - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates Contenidors - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze Analisar - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Suprimir - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Nòta - + Cue Point - + Hotcues - + Intro - + Outro - + Key Clau - + ReplayGain - + Waveform - + Comment Comentari - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist - - - + + + Playlist Creation Failed - + A playlist by that name already exists. - + A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Anullar - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface interfàcia àudio - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. Anullar - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_pl.qm b/res/translations/mixxx_pl.qm index 7e11f96f9757..15e6982fef55 100644 Binary files a/res/translations/mixxx_pl.qm and b/res/translations/mixxx_pl.qm differ diff --git a/res/translations/mixxx_pl.ts b/res/translations/mixxx_pl.ts index d325ec51c130..4888018f9fd4 100644 --- a/res/translations/mixxx_pl.ts +++ b/res/translations/mixxx_pl.ts @@ -26,17 +26,17 @@ Enable Auto DJ - Włącz Auto DJa + Disable Auto DJ - Wyłącz Auto DJa + Clear Auto DJ Queue - Wyczyść kolejkę Auto DJa + @@ -56,12 +56,12 @@ Do you really want to remove all tracks from the Auto DJ queue? - Czy napewno chcesz usunąć wszystkie ścieżki z kolejki Auto DJa? + This can not be undone. - Nie można tego cofnąć. + @@ -238,7 +238,7 @@ Importuj jako skrzynkę Export to Engine DJ "Engine DJ" is a product name and must not be translated. - Wyeksportuj do Engine DJ + @@ -425,7 +425,7 @@ Importuj jako skrzynkę Overview - Przegląd + @@ -471,7 +471,7 @@ Importuj jako skrzynkę Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk - Wczytuje okładkę ... + @@ -819,12 +819,12 @@ Importuj jako skrzynkę Starts Auto DJ when Mixxx is launched. - Uruchamia Auto DJ'a przy uruchomieniu Mixxx'a. + Rescans the library when Mixxx is launched. - Przeskanowuje bibliotekę przy uruchomieniu Mixxx'a. + @@ -839,7 +839,7 @@ Importuj jako skrzynkę Loads experimental QML GUI instead of legacy QWidget skin - Uruchomia eksperymentalny interfejs QML zamiast dotyczasowej skórki QWidget. + @@ -879,7 +879,7 @@ trace - Above + Profiling messages Overrides the default application GUI style. Possible values: %1 - Nadpisuje styl domyślnego interfejsu graficznego. Możliwe wartości: %1 + @@ -994,7 +994,7 @@ trace - Above + Profiling messages Sampler %1 - Sampler %1 + @@ -2396,12 +2396,12 @@ trace - Above + Profiling messages Halve BPM - Połowa BPM + Multiply current BPM by 0.5 - Pomnóż obecne BPM przez 0.5 + @@ -2411,7 +2411,7 @@ trace - Above + Profiling messages Multiply current BPM by 0.666 - Pomnóż obecne BPM przez 0.666 + @@ -2421,7 +2421,7 @@ trace - Above + Profiling messages Multiply current BPM by 0.75 - Pomnóż obecne BPM przez 0.75 + @@ -2431,7 +2431,7 @@ trace - Above + Profiling messages Multiply current BPM by 1.333 - Pomnóż obecne BPM przez 1.333 + @@ -2441,17 +2441,17 @@ trace - Above + Profiling messages Multiply current BPM by 1.5 - Pomnóż obecne BPM przez 1.5 + Double BPM - Podwój BPM + Multiply current BPM by 2 - Pomnóż obecne BPM przez 2 + @@ -2466,12 +2466,12 @@ trace - Above + Profiling messages Move Beatgrid - Przesuń siatkę bitu + Adjust the beatgrid to the left or right - Skoryguj siatkę tempa do lewej lub prawej + @@ -2481,23 +2481,23 @@ trace - Above + Profiling messages Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. - Skoryguj siatkę bitu o dokładnie jedną połowę bitu. Przydatne tylko dla ścieżek o stałym tempie. + Toggle the BPM/beatgrid lock - Przełącz blokadę BPM/bitu + Revert last BPM/Beatgrid Change - Cofnij ostatnią zmianę BPM/siatki bitu + Revert last BPM/Beatgrid Change of the loaded track. - Cofnij ostatnią zmianę BPM/siatki bitu załadowanej ścieżki. + @@ -2951,12 +2951,12 @@ trace - Above + Profiling messages Remove Temporary Loop - Usuń tymczasową pętlę + Remove the temporary loop - Usuń tymczasową pętlę + @@ -3156,29 +3156,29 @@ trace - Above + Profiling messages Clears the search query - Wyczyszcza zapytanie wyszukiwania + Select Next Color Available - Wybierz następny dostępny kolor + Select the next color in the color palette for the first selected track - Wybierz następny kolor w palecie kolorów dla pierwszej wybranej ścieżki + Select Previous Color Available - Wybierz poprzedni dostępny kolor + Select the previous color in the color palette for the first selected track - Wybierz poprzedni kolor w palecie kolorów dla pierwszej wybranej ścieżki + @@ -3330,12 +3330,12 @@ trace - Above + Profiling messages Auto DJ Add Random Track - Auto DJ Dodaj losową ścieżkę + Add a random track to the Auto DJ queue - Dodaj losowe ścieżki do kolejki Auto DJ'a + @@ -3371,7 +3371,7 @@ trace - Above + Profiling messages Waveform Zoom Reset To Default - Zresetuj powiększenie wykresu dźwięku do domyślnego + @@ -3381,22 +3381,22 @@ trace - Above + Profiling messages Select the next color in the color palette for the loaded track. - Wybierz następny kolor w palecie kolorów dla załadowanej ścieżki. + Select previous color in the color palette for the loaded track. - Wybierz poprzedni kolor w palecie kolorów dla załadowanej ścieżki. + Navigate Through Track Colors - Nawiguj przez kolory ścieżek + Select either next or previous color in the palette for the loaded track. - Wybierz następny lub poprzedni kolor w palecie kolorów dla załadowanej ścieżki. + @@ -3540,7 +3540,7 @@ trace - Above + Profiling messages Unknown - Nieznany + @@ -3634,7 +3634,7 @@ trace - Above + Profiling messages Unnamed - Bez nazwy + @@ -3645,32 +3645,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. Funkcjonalność zapewniana przez to mapowanie kontrolera zostanie wyłączona do czasu rozwiązania problemu. - + You can ignore this error for this session but you may experience erratic behavior. Możesz zignorować ten błąd w tej sesji, ale może wystąpić nieprawidłowe zachowanie. - + Try to recover by resetting your controller. Spróbuj przwrócić resetując swój kontroler - + Controller Mapping Error Błąd mapowania kontrolera - + The mapping for your controller "%1" is not working properly. Mapowanie kontrolera „%1” nie działa poprawnie. - + The script code needs to be fixed. Kod skryptu musi zostać naprawiony. @@ -3738,7 +3738,7 @@ trace - Above + Profiling messages Export Crate as Playlist - Wyeksportuj skrzynkę jako playlistę + @@ -3800,7 +3800,7 @@ trace - Above + Profiling messages Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - Stwórz skrzynkę na twój następny występ, dla twoich ulubionych utworów electrohouse lub najbardziej pożądanych ścieżek. + @@ -3837,7 +3837,7 @@ trace - Above + Profiling messages Export to Engine DJ - Wyeksportuj do Engine DJ + @@ -3847,7 +3847,7 @@ trace - Above + Profiling messages Do you really want to delete crate <b>%1</b>? - Czy na pewno chcesz usunąć skrzynkę <b>%1</b>? + @@ -3988,7 +3988,7 @@ trace - Above + Profiling messages Qt Version: - Wersja Qt: + @@ -4177,31 +4177,7 @@ Skip Silence Start Full Volume: The same as Skip Silence, but starting transitions with a centered crossfader, so that the intro starts at full volume. - Tryby Auto DJ Fade - -Pełne wprowadzenie i zakończenie: -Odtwórz pełne wprowadzenie i zakończenie. Użyj długości intro lub outro jako -czasu przejścia, w zależności od tego, który z nich jest krótszy. Jeśli nie zaznaczono żadnego wstępu ani zakończenia, użyj wybranego czasu przenikania - -Przejście Gdy Outro Się Zacznie: -Rozpocznij przenikanie na początku zakończenia. Jeśli zakończenie jest dłuższe niż -wprowadzenie, odetnij koniec zakończenia. Użyj długości intro lub outro jako -czasu przejścia, w zależności od tego, który z nich jest krótszy. Jeśli nie zaznaczono żadnego wstępu -ani zakończenia, użyj wybranego czasu przenikania. - -Pełny utwór: -Odtwórz cały utwór. Rozpocznij przenikanie od wybranej liczby -sekund przed końcem ścieżki. Ujemny czas przejścia powoduje dodanie -ciszy pomiędzy ścieżkami. - -Pomiń ciszę: -Odtwórz cały utwór z wyjątkiem ciszy na początku i na końcu. -Rozpocznij przejście od wybranej liczby sekund przed -ostatnim dźwiękiem. - -Pomiń cisze Zacznij pełną glośnością: -To samo co pomiń ciszę, ale przejście zaczyna się dopiero po osiągnięciu centralnego crossfadera, dzięki czemu intro zaczyna się z pełną głośnością. - + @@ -4226,7 +4202,7 @@ To samo co pomiń ciszę, ale przejście zaczyna się dopiero po osiągnięciu c Skip Silence Start Full Volume - Pomiń ciszę Zacznij pełną głośnością + @@ -4345,7 +4321,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Enforced - Wymuszone + @@ -4548,7 +4524,7 @@ Próbowałeś się nauczyć: %1,%2 Fetched Cover Art - Zaciągnij okładkę + @@ -4780,128 +4756,122 @@ Próbowałeś się nauczyć: %1,%2 DlgPrefBroadcast - + Icecast 2 Icecast 2 - + Shoutcast 1 Shoutcast 1 - + Icecast 1 Icecast 1 - + MP3 MP3 - + Ogg Vorbis Ogg Vorbis - + Opus - Opus + - + AAC AAC - + HE-AAC https://pl.wikipedia.org/wiki/AAC%2B - + HE-AACv2 https://pl.wikipedia.org/wiki/AAC%2B - + Automatic Automatyczny - + Mono Mono - + Stereo Stereo - - - - + + + + Action failed Akcja zakończona niepowodzeniem - + You can't create more than %1 source connections. Nie możesz utworzyć więcej niż %1 połączeń źródłowych. - + Source connection %1 Połączenie źródłowe %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - Ustawienia dla %1 - - - + At least one source connection is required. Wymagane jest co najmniej jedno połączenie źródłowe. - + Are you sure you want to disconnect every active source connection? Czy na pewno chcesz rozłączyć każde aktywne połączenie źródłowe? - - + + Confirmation required Wymagane potwierdzenie - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. „%1” ma ten sam punkt montowania Icecast co „%2”. Nie można jednocześnie włączyć dwóch połączeń źródłowych z tym samym serwerem, które mają ten sam punkt podłączenia. - + Are you sure you want to delete '%1'? Czy na pewno chcesz usunąć '%1'? - + Renaming '%1' Zmiana nazwy '%1' - + New name for '%1': Nowa nazwa dla '%1': - + Can't rename '%1' to '%2': name already in use Nie można zmienić '%1' na '%2': taka nazwa jest już w użyciu @@ -5206,7 +5176,7 @@ Two source connections to the same server that have the same mountpoint can not Loop default color - Domyślny kolor pętli + @@ -5370,52 +5340,52 @@ Zastosować ustawienie i kontynuować? Device Info - Informacje o urządzeniu + Physical Interface: - Fizyczny intefejs: + Vendor name: - Nazwa producenta: + Product name: - Nazwa produktu: + Vendor ID - ID wydawcy + VID: - VID: + Product ID - ID produktu + PID: - PID: + Serial number: - Numer seryjny: + USB interface number: - Numer interfejsu USB: + @@ -5425,7 +5395,7 @@ Zastosować ustawienie i kontynuować? HID Usage: - Użycie HID: + @@ -5440,7 +5410,7 @@ Zastosować ustawienie i kontynuować? Screens preview - Podgląd ekranów + @@ -5503,7 +5473,7 @@ Zastosować ustawienie i kontynuować? Data protocol: - Protokół danych: + @@ -5513,7 +5483,7 @@ Zastosować ustawienie i kontynuować? Mapping Settings - Ustawienia mapowania + @@ -5576,7 +5546,7 @@ Zastosować ustawienie i kontynuować? Enable MIDI Through Port - Włącz MIDI Throught Port + @@ -5644,7 +5614,7 @@ Zastosować ustawienie i kontynuować? Skin selector - Wybór skórki + @@ -5681,6 +5651,16 @@ Zastosować ustawienie i kontynuować? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -5792,17 +5772,17 @@ Zastosować ustawienie i kontynuować? Reject - Odrzuć + Allow, but stop deck - Zezwól, ale zatrzymaj deck + Allow, play from load point - Zezwół, otwórz od punktu załadowania + @@ -5946,7 +5926,7 @@ Jeśli ta opcja jest wyłączona, punkt początkowy intro zostanie automatycznie Loading a track, when deck is playing - Załaduj ścieżkę, kiedy deck gra + @@ -6111,7 +6091,7 @@ Zawsze możesz przeciągnąć i upuścić ścieżki na ekranie, aby sklonować t Keyunlock mode - Tryb odblokowania klucza + @@ -6131,7 +6111,7 @@ Zawsze możesz przeciągnąć i upuścić ścieżki na ekranie, aby sklonować t Use steady tempo - Użyj stałego tempa + @@ -6145,7 +6125,7 @@ Zawsze możesz przeciągnąć i upuścić ścieżki na ekranie, aby sklonować t Effect Chain Presets - Ustawienia łańcuchów efektów + @@ -6165,22 +6145,22 @@ Zawsze możesz przeciągnąć i upuścić ścieżki na ekranie, aby sklonować t effect 1 name - nazwa 1 efektu + effect 2 name - nazwa 2 efektu + effect 3 name - nazwa 3 efektu + Import - Importuj + @@ -6200,13 +6180,13 @@ Zawsze możesz przeciągnąć i upuścić ścieżki na ekranie, aby sklonować t Quick Effect Chain Presets - Ustawienia szybkich łańcuchów efektów + Visible Effects - Widoczne efekty + @@ -6216,17 +6196,17 @@ Zawsze możesz przeciągnąć i upuścić ścieżki na ekranie, aby sklonować t Hidden Effects - Ukryte efekty + - + - + @@ -6277,64 +6257,64 @@ Zawsze możesz przeciągnąć i upuścić ścieżki na ekranie, aby sklonować t DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Minimalny rozmiar wybranej skórki jest większy niż dostępna rozdzielczość ekranu. - + Allow screensaver to run Zezwól na uruchomienie wygaszacza ekranu - + Prevent screensaver from running Zapobiegaj uruchomieniu wygaszacza ekranu - + Prevent screensaver while playing Zapobiegaj wygaszaczowi ekranu podczas gry - + Disabled Wyłączone - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Ta skórka nie obsługuje schematów kolorów. - + Information Informacja - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. - Mixxx musi zastać zrestartowany aby nowe ustawienia regionalne, skalowania lub multi-sampling'u zaczęły obowiązywać. + @@ -6393,7 +6373,7 @@ and allows you to pitch adjust them for harmonic mixing. Enforced - Wymuszone + @@ -6556,7 +6536,7 @@ and allows you to pitch adjust them for harmonic mixing. See the manual for details - Odwiedź instrukcję dla szczegółów. + @@ -6576,50 +6556,50 @@ and allows you to pitch adjust them for harmonic mixing. Item is not a directory or directory is missing - Przedmiot nie jest katalogiem lub nie ma takiego katalogu. + - + Choose a music directory Wybierz katalog z muzyką - + Confirm Directory Removal Potwierdź usunięcie katalogu - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. Mixxx nie będzie dłużej obserwował tego katalogu w poszukiwaniu nowych utworów. Co chcesz zrobić z utworami z tego katalogu i podkatalogów?<ul><li>Ukryj wszystkie utwory z katalogu i podkatalogów.</li><li>Trwale usuń z Mixxx'a wszystkie metadane tych utworów.</li><li>Pozostaw utwory w Twojej bibliotece niezmienione.</li><li>Ukrycie utworów zachowuje ich metadane w przypadku ich ponownego dodania w przyszłości. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. Metadane są to wszystkie informacje o utworze (wykonawca, tytuł, ilość odtworzeń itp.) a także siatki tempa, punkty hotcue i pętle. Ten wybór ma wpływ tylko na bibliotekę Mixxx,a. żadne pliki na dysku nie zostaną zmienione czy usunięte. - + Hide Tracks Ukryj Utwory - + Delete Track Metadata Usuń metadane utworu - + Leave Tracks Unchanged Zostaw utwory niezmienione - + Relink music directory to new location Połącz katalog muzyki z nową lokalizacją - + Select Library Font Wybierz czcionkę Biblioteki @@ -6665,270 +6645,265 @@ and allows you to pitch adjust them for harmonic mixing. Rescan directories on start-up - Przeskanuj ponownie katalogi przy starcie + - + Audio File Formats Formaty Plików Audio - + Track Table View - + Track Double-Click Action: - + BPM display precision: - precyzja wyświetlania BPM: + - + Session History - Historia sesji + - + Track duplicate distance - Dystans duplikatów + - + When playing a track again log it to the session history only if more than N other tracks have been played in the meantime - + History playlist with less than N tracks will be deleted<br/><br/>Note: the cleanup will be performed during startup and shutdown of Mixxx. - + Delete history playlist with less than N tracks - Usuń histoię playlisty z mnie niż N ścieżkami + - + Library Font: Czcionka Biblioteki: - - Show scan summary dialog - - - - + Grey out played tracks - + Track Search - + Enable search completions - + Enable search history keyboard shortcuts - + Percentage of pitch slider range for 'fuzzy' BPM search: - + This range will be used for the 'fuzzy' BPM search (~bpm:) via the search box, as well as for BPM search in Track context menu > Search related Tracks - + Preferred Cover Art Fetcher Resolution - + Fetch cover art from coverartarchive.com by using Import Metadata From Musicbrainz. - Zaciągnij okładki z coverartarchive.com używając Importuj metadane z Musicbrainz. + - + Note: ">1200 px" can fetch up to very large cover arts. - Uwaga: ">1200 px" może zaciągnąć bardzo duże okładki + - + >1200 px (if available) >1200 px (Jeśli dostępne) - + 1200 px (if available) 1200 px (Jeśli dostępne) - + 500 px 500 px - + 250 px 250 px - + Settings Directory - + The Mixxx settings directory contains the library database, various configuration files, log files, track analysis data, as well as custom controller mappings. - Katalog ustawień Mixxa zawiera bazę danych biblioteki, różne pliki konfiguracyjne, logi, dane analityczne oraz niestandarowe mapy kontrolerów. + - + Edit those files only if you know what you are doing and only while Mixxx is not running. Edytuj te pliki tylko wtedy, gdy wiesz, co robisz i tylko wtedy, gdy Mixxx nie jest uruchomiony. - + Open Mixxx Settings Folder Otwórz folder ustawień Mixxx - + Library Row Height: Wysokość wiersza Biblioteki: - + Use relative paths for playlist export if possible Użyj względnych ścieżek dla eksportu listy odtwarzania, jeśli to możliwe - + ... ... - + px px - + Synchronize library track metadata from/to file tags - + Automatically write modified track metadata from the library into file tags and reimport metadata from updated file tags into the library - Automatycznie zapisuj zmodyfikowane metadane ścieżki do biblioteki do metadanych pliku i przeimportuj metadane z zaktualizowanego pliku do biblioteki. + - + Synchronize Serato track metadata from/to file tags (experimental) - + Keeps track color, beat grid, bpm lock, cue points, and loops synchronized with SERATO_MARKERS/MARKERS2 file tags.<br/><br/>WARNING: Enabling this option also enables the reimport of Serato metadata after files have been modified outside of Mixxx. On reimport existing metadata in Mixxx is replaced with the metadata found in file tags. Custom metadata not included in file tags like loop colors is lost. - + Edit metadata after clicking selected track Edytuj metadane po kliknięciu wybranego utworu - + Search-as-you-type timeout: Szukaj-to-co-piszesz Limit czasu: - + ms ms - + Load track to next available deck Załaduj utwór do następnego wolnego odtwarzacza - + External Libraries Biblioteki Zewnętrzne - + You will need to restart Mixxx for these settings to take effect. Musisz ponownie uruchomić Mixxx, aby te ustawienia odniosły skutek. - + Show Rhythmbox Library Pokaż bibliotekę Rythmbox - + Track Metadata Synchronization / Playlists - + Add track to Auto DJ queue (bottom) Dodaj utwór do kolejki Auto DJ (na dole) - + Add track to Auto DJ queue (top) Dodaj utwór do kolejki Auto DJ (u góry) - + Ignore Ignoruj - + Show Banshee Library Pokaż Bibliotekę Banshee - + Show iTunes Library Pokaż Bibliotekę iTunes - + Show Traktor Library Pokaż Bibliotekę Tractor - + Show Rekordbox Library Pokaż bibliotekę Rekordbox - + Show Serato Library Pokaż bibliotekę Serato - + All external libraries shown are write protected. Wszystkie wyświetlone biblioteki zewnętrzne są zabezpieczone przed zapisem. @@ -7611,7 +7586,7 @@ The loudness target is approximate and assumes track pregain and main output lev Are you sure you wish to proceed? - Czy napewno chcesz kontynuować? + @@ -7651,17 +7626,17 @@ The loudness target is approximate and assumes track pregain and main output lev Realtime scheduling is enabled. - + Planowanie w czasie rzeczywistym jest włączone. Main output only - Tylko wyjście główne + Main and booth outputs - Wyjścia główne i oba + @@ -7714,7 +7689,7 @@ The loudness target is approximate and assumes track pregain and main output lev Main Output Mode - Tryb Wyjścia Głównego + @@ -7788,12 +7763,12 @@ The loudness target is approximate and assumes track pregain and main output lev Headphone Output Delay - Opóźnienie wyjścia słuchawkowego + Booth Output Delay - Opóźnienie wyjścia obu + @@ -7963,7 +7938,7 @@ The loudness target is approximate and assumes track pregain and main output lev Bottom - Dół + @@ -7977,17 +7952,17 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL not available OpenGL niedostępne - + dropped frames opuszczone ramki - + Cached waveforms occupy %1 MiB on disk. Przebiegi buforowane zajmują %1 MiB na dysku. @@ -8005,22 +7980,22 @@ The loudness target is approximate and assumes track pregain and main output lev Liczba klatek na sekundę - + OpenGL Status - Status OpenGL + - + Displays which OpenGL version is supported by the current platform. Pokazuje jaką wersję OpenGL wspiera aktualna platforma. - + Normalize waveform overview Normalizuj przegląd przebiegów - + Average frame rate Średnia prędkość ramek @@ -8036,7 +8011,7 @@ The loudness target is approximate and assumes track pregain and main output lev Domyślny poziom powiększenia - + Displays the actual frame rate. Pokazuje szybkość klatek @@ -8053,7 +8028,7 @@ The loudness target is approximate and assumes track pregain and main output lev This functionality requires waveform acceleration. - Ta funkcjionalność wymaga akceleracji wykresu dźwięku. + @@ -8071,19 +8046,19 @@ The loudness target is approximate and assumes track pregain and main output lev Niskie - + Show minute markers on waveform overview Use acceleration - Użyj akcelerację + High details - Wysokie detale + @@ -8116,7 +8091,7 @@ The loudness target is approximate and assumes track pregain and main output lev Główny optyczny gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. Przegląd przebiegu pokazuje obwiednię przebiegu całej ścieżki. @@ -8162,12 +8137,12 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si Preferred font size - Preferowany rozmiar czcionki + Text height limit - Limit wysokości tekstu + @@ -8177,30 +8152,30 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si Placement - Umiejscowienie + pt - pt + - + Caching Zapisywanie w pamięci podręcznej - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. Mixxx buforuje przebiegi Twoich utworów na dysku przy pierwszym załadowaniu utworu. Zmniejsza to zużycie procesora podczas gry na żywo, ale wymaga dodatkowego miejsca na dysku. - + Enable waveform caching Włącz buforowanie przebiegów - + Generate waveforms when analyzing library Generuj przebiegi podczas analizy biblioteki @@ -8216,9 +8191,9 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si - + Type - Typ + @@ -8246,42 +8221,12 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si Przesuwa pozycję znacznika odtwarzania na przebiegach w lewo, w prawo lub na środek (domyślnie). - - Stem - - - - - Channel opacity - - - - - Channel opacity (outline) - - - - - Main stem opacity - - - - - Outline stem opacity - - - - - Move channel to foreground when volume is adjusted - - - - + Overview Waveforms - + Clear Cached Waveforms Wyczyść buforowane przebiegi @@ -8391,7 +8336,7 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - <font color='#BB0000'><b>Niektóre strony ustawień wyrzuciły błąd. Aby zastosować zmiany, napraw najpierw te problemy.</b></font> + @@ -8608,17 +8553,17 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si Current Cover Art - Obecna okładka albumu + Found Cover Art - Znaleziona okładka albumu + The results are ready to be applied. - Zmiany są gotowe do zastosowania. + @@ -8663,7 +8608,7 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si Metadata applied - Zastosowano metadane + @@ -8678,42 +8623,42 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si The results are ready to be applied - Zmiany są gotowe do zastosowania + Can't connect to %1: %2 - Nie można połączyć się do: %1: %2 + Looking for cover art - Szukanie okładki + Cover art found, receiving image. - Okładka znaleziona, pozyskiwanie obrazu. + Cover Art is not available for selected metadata - Okładka nie jest dostępna w wybranych metadanych + Metadata & Cover Art applied - Metadane i okładka zapisane + Selected cover art applied - Wybrana okładka zapisana + Cover Art File Already Exists - Plik okładki już istnieje + @@ -8721,10 +8666,7 @@ Wybierz spośród różnych typów wyświetlania przebiegu, które różnią si Folder: %2 Override existing file? This can not be undone! - Plik: %1 -Folder: %2 -Nadpisać istniejący plik? -Nie można tego cofnąć! + @@ -9044,7 +8986,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob (no color) - (bez koloru) + @@ -9112,7 +9054,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Re-Import Metadata from files - Importuj ponownie metadane z plików + @@ -9158,7 +9100,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Discard changes and reload saved values. "Reset" button - Porzuć zmiany i odśwież zapisane wartości. + @@ -9201,7 +9143,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob (no color) - (bez koloru) + @@ -9231,7 +9173,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob imported - zaimportowane + @@ -9413,17 +9355,17 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Rubberband R3 (near-hi-fi quality) - Rubberband R3 (praktycznie jakość hi-fi) + Unknown, using Rubberband (better) - Nieznane, użycie Rubberband (lepsze) + Unknown, using Soundtouch - Nieznane, użycie Soundtouch + @@ -9464,7 +9406,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Artist + Title - Artysta + Tytuł + @@ -9474,7 +9416,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Artist + Album - Artysta + Album + @@ -9492,7 +9434,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Artist + Title - Artysta + Tytuł + @@ -9502,7 +9444,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Artist + Album - Artysta + Album + @@ -9520,7 +9462,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Artist + Title - Artysta + Tytuł + @@ -9530,7 +9472,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Artist + Album - Artysta + Album + @@ -9598,7 +9540,7 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob There was an error loading your iTunes library. Check the logs for details. - Błąd przy ładowaniu biblioteki iTunes. Sprawdź logi, aby dowiedzieć się więcej. + @@ -9606,12 +9548,12 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Change color - Zmień kolor + Choose a new color - Wybierz nowy kolor + @@ -9619,18 +9561,18 @@ Często skutkuje wyższą jakością siatek beatowych, ale nie sprawdzi się dob Browse... - Przeglądaj... + No file selected - Nie wybrano pliku + Select a file - Wybierz plik + @@ -9655,57 +9597,57 @@ Shown when VuMeter can not be displayed. Please keep Brak wsparcia OpenGL. - + activate aktywny - + toggle przełącz - + right w prawo - + left w lewo - + right small odrobinę w prawo - + left small odrobinę w lewo - + up w górę - + down w dół - + up small odrobinę w górę - + down small odrobinę w dół - + Shortcut Skrót @@ -9715,7 +9657,7 @@ Shown when VuMeter can not be displayed. Please keep This or a parent directory is already in your library. - Ten albo nadrzędny katalog jest już w twojej bibliotece. + @@ -9727,43 +9669,40 @@ Aborting the operation to avoid library inconsistencies This directory can not be read. - Nie można odczytać tego katalogu. + An unknown error occurred. Aborting the operation to avoid library inconsistencies - Nieznany błąd. -Porzucam operację aby uniknąć niespójności w bibliotece. + Can't add Directory to Library - Nie można dodać katalogu do biblioteki. + Could not add <b>%1</b> to your library. %2 - Nie można dodać <b>%1</b> do twojej biblioteki. - -%2 + Can't remove Directory from Library - Nie można usunąć katalogu z biblioteki. + An unknown error occurred. - Nieznany błąd. + This directory does not exist or is inaccessible. - Ten katalog nie istnieje albo jest niedostępny. + @@ -9781,22 +9720,22 @@ Porzucam operację aby uniknąć niespójności w bibliotece. LibraryFeature - + Import Playlist Importuj listę odtwarzania - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Pliki list odtwarzania (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Nadpisać plik? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9878,7 +9817,7 @@ Czy na pewno chcesz to nadpisać? Unset all - Odznacz wszystko + @@ -9939,7 +9878,7 @@ Czy na pewno chcesz to nadpisać? Export to Engine DJ - Wyeksportuj do Engine DJ + @@ -9950,252 +9889,252 @@ Czy na pewno chcesz to nadpisać? MixxxMainWindow - + Sound Device Busy Urządzenie dźwiękowe zajęte - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Ponów</b> po zamknięciu innej aplikacji lub podłącz ponownie urządzenie dźwiękowe - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Rekonfiguruj</b> ustawienia urządzeń dźwiękowych Mixxx'a. - - + + Get <b>Help</b> from the Mixxx Wiki. Otrzymaj <b>Pomoc</b> na Wiki Mixxx'a. - - - + + + <b>Exit</b> Mixxx. <b>Wyjdź<b> z Mixxx'a. - + Retry Ponów - + skin Skórka - + Allow Mixxx to hide the menu bar? - Pozwoli Mixxx'owi schować pasek menu? + - + Hide Always show the menu bar? - Ukryj + - + Always show - Zawsze pokazuj + - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - Zapytaj mnie ponownie + - - + + Reconfigure Rekonfiguruj - + Help Pomoc - - + + Exit Wyjdź - - + + Mixxx was unable to open all the configured sound devices. W przypadku błędów bazy danych po pomoc skontaktuj się z: - + Sound Device Error Błąd urządzenia dźwiękowego - + <b>Retry</b> after fixing an issue <b>Spróbuj ponownie</b> po rozwiązaniu problemu - + No Output Devices Brak urządzeń wyjściowych. - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Mixxx został skonfigurowany bez jakichkolwiek wyjściowych urządzeń dźwiękowych. Przetwarzanie dźwięku będzie wyłączone do czasu skonfigurowania urządzenia wyjściowego. - + <b>Continue</b> without any outputs. <b>Kontynuuj</b> bez urządzeń wyjściowych. - + Continue Dalej - + Load track to Deck %1 Załaduj utwór do odtwarzacza %1 - + Deck %1 is currently playing a track. Odtwarzacz %1 aktualnie odtwarza utwór. - + Are you sure you want to load a new track? Czy na pewno chcesz załadować nowy utwór? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Nie zostało wybrane urządzenie do tej kontroli winylem. Proszę najpierw wybrać urządzenie wejściowe w Urządzeniach Audio. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Nie wybrano żadnego urządzenia wejściowego dla tej kontroli przejścia. Najpierw wybierz urządzenie wejściowe w preferencjach sprzętu dźwiękowego. - + There is no input device selected for this microphone. Do you want to select an input device? Dla tego mikrofonu nie wybrano żadnego urządzenia wejściowego. Czy chcesz wybrać urządzenie wejściowe? - + There is no input device selected for this auxiliary. Do you want to select an input device? Dla tego urządzenia pomocniczego nie wybrano żadnego urządzenia wejściowego. Czy chcesz wybrać urządzenie wejściowe? - + Scan took %1 - Skanowanie trwało %1 + - + No changes detected. - Nie wykryto zmian. + - - + + %1 tracks in total - %1 ścieżek w sumie + - + %1 new tracks found - %1 nowych ścieżek znalezionych + - + %1 moved tracks detected - %1 przemieszczonych ścieżek wykryto + - + %1 tracks are missing (%2 total) - %1 ścieżek brak (%2 w sumie) + - + %1 tracks have been rediscovered - %1 ścieżek zostało ponownie odznalezionych + - + Library scan finished - Skanowanie biblioteki zakończone + - + Error in skin file Błąd w pliku skórki. - + The selected skin cannot be loaded. Wybrana skórka nie może być załadowana. - + OpenGL Direct Rendering Renderowanie bezpośrednie OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Renderowanie bezpośrednie nie jest włączone na Twoim komputerze.<br><br>Oznacza to, że wyświetlanie przebiegów będzie bardzo <br><b>powolne i może mocno obciążać procesor</b>. Zaktualizuj<br>konfigurację, aby włączyć bezpośrednie renderowanie, albo wyłącz<br>wyświetlanie przebiegu w preferencjach Mixxx, wybierając<br>„Pusty” jako sposób wyświetlania przebiegu w sekcji „Interfejs”. - - - + + + Confirm Exit Potwierdź zamknięcie - + A deck is currently playing. Exit Mixxx? Deck właśnie gra! Wyjść z Mixxx'a? - + A sampler is currently playing. Exit Mixxx? Sampler aktualnie odtwarza. Wyjśc z Mixxx? - + The preferences window is still open. Okno właściwości jest nadal otwarte. - + Discard any changes and exit Mixxx? Porzucić wszystkie zmiany i wyjść z Mixxx? @@ -10217,7 +10156,7 @@ Czy chcesz wybrać urządzenie wejściowe? - + Playlists Listy odtwarzania @@ -10229,12 +10168,12 @@ Czy chcesz wybrać urządzenie wejściowe? Unlock all playlists - Odblokuj wszystkie playlisty + Delete all unlocked playlists - Usuń wszystkie odblokowane playlisty + @@ -10245,40 +10184,40 @@ Czy chcesz wybrać urządzenie wejściowe? Confirm Deletion - Potwierdź usunięcie + Do you really want to delete all unlocked playlists? - Czy napewno chcesz usunąć wszystkie odblokowane playlisty? + Deleting %1 unlocked playlists.<br>This operation can not be undone! - Usuwanie %1 odblokowanych playlists.<br>Nie można tego cofnąć! + - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - Playlisty są to uporządkowane listy ścieżek, które pozwalają planować swoje DJ sety. + - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - Może być niezbędne pominąć niektóre ścieżki w przygotowanej playliście lub dodanie niektórych aby utrzymać energię twojej widowni. + - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Niektórzy didżeje tworzą playlisty przed ich występem na żywo, natomiast inni preferują tworzyć je w locie. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Przy zastosowaniu list odtwarzania podczas występu na żywo, pamiętaj, aby zawsze zwracać baczną uwagę na to, jak publiczność reaguje na muzykę, którą wybrałeś do gry. - + Create New Playlist Utwórz nową listę odtwarzania @@ -10680,7 +10619,7 @@ Jeśli nie chcesz przyznawać Mixxx dostępu, kliknij Anuluj w selektorze plikó Downsampling - + Downsampling @@ -11471,7 +11410,7 @@ Higher values result in less attenuation of high frequencies. Bitrate Mode - Tryb bitrate'u + @@ -11760,18 +11699,18 @@ Fully right: end of the effect period MP3 encoding is not supported. Lame could not be initialized - Kodowanie MP3 nie jest obsługiwane. Lame nie mógł zostać uruchomiony. + OGG recording is not supported. OGG/Vorbis library could not be initialized. - Nagrywanie OGG nie jest obsługiwane. Biblioteka OGG/Vorbis nie mogła zostać uruchomiona. + encoder failure - błąd encoder'a + @@ -11913,7 +11852,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Passthrough @@ -11941,12 +11880,12 @@ Hint: compensates "chipmunk" or "growling" voices (empty) - (pusty) + Sampler %1 - Sampler %1 + @@ -11973,12 +11912,12 @@ and the processed output signal as close as possible in perceived loudness Off - Wył. + On - Wł. + @@ -12030,12 +11969,12 @@ At a ratio of 1:1 no compression is happening, as the input is exactly the outpu Attack (ms) - Atak (ms) + Attack - Atak + @@ -12079,12 +12018,12 @@ may introduce a 'pumping' effect and/or distortion. built-in - wbudowany + missing - brakujący + @@ -12094,7 +12033,7 @@ may introduce a 'pumping' effect and/or distortion. Warning! - Uwaga! + @@ -12117,44 +12056,44 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - Pusty + - + Simple - + Filtered - Przefiltrowane + - + HSV - HSV + - + VSyncTest - VSyncTest + - + RGB - RGB + - + Stacked - + Unknown - Nieznany + @@ -12170,12 +12109,12 @@ may introduce a 'pumping' effect and/or distortion. Low Disk Space Warning - Ostrzeżenie Mało miejsca na dysku + There is less than 1 GiB of usable space in the recording folder - Jest mniej niż 1 GiB wolnej przestrzeni w folderze na nagrania. + @@ -12195,7 +12134,7 @@ may introduce a 'pumping' effect and/or distortion. You can change the location of the Recordings folder in Preferences -> Recording. - Możesz zmienić lokalizację katalogu z Nagraniami w Ustawienia > Nagrywanie. + @@ -12214,7 +12153,7 @@ may introduce a 'pumping' effect and/or distortion. Rekordbox - Rekordbox + @@ -12259,7 +12198,7 @@ may introduce a 'pumping' effect and/or distortion. (loading) Rekordbox - (ładowanie) Rekordbox + @@ -12316,7 +12255,7 @@ may introduce a 'pumping' effect and/or distortion. Serato - Serato + @@ -12354,7 +12293,7 @@ may introduce a 'pumping' effect and/or distortion. Mark all tracks played - Zaznacz wszystkie ścieżki jako odtworzone + @@ -12401,13 +12340,13 @@ may introduce a 'pumping' effect and/or distortion. Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - Czy napewno chcesz usunąć wszystkie odblokowane playlisty z <b>%1</b>?<br><br> + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - Usuwanie %1 playlist z <b>%2</b>.<br><br> + @@ -12436,7 +12375,7 @@ may introduce a 'pumping' effect and/or distortion. Error setting tls mode: - Bład ustawień trybu TLS: + @@ -12486,17 +12425,17 @@ may introduce a 'pumping' effect and/or distortion. Error setting stream IRC! - Błąd ustawienia strumienia IRC! + Error setting stream AIM! - Błąd ustawienia strumienia AIM! + Error setting stream ICQ! - Błąd ustawienia strumienia ICQ! + @@ -12506,7 +12445,7 @@ may introduce a 'pumping' effect and/or distortion. Unknown stream encoding format! - Nieznany format kodowania strumienia! + @@ -12526,7 +12465,7 @@ may introduce a 'pumping' effect and/or distortion. See https://github.com/mixxxdj/mixxx/issues/5701 for more information. - Zobacz https://github.com/mixxxdj/mixxx/issues/5701 aby dowiedzieć się więcej. + @@ -12571,7 +12510,7 @@ may introduce a 'pumping' effect and/or distortion. Connection message - Wiadomość połączenia + @@ -12694,32 +12633,32 @@ may introduce a 'pumping' effect and/or distortion. Fingerprinting track - Zbieranie odcisków ścieżki + Reading track for fingerprinting failed. - Odczyt odcisków ścieżki nieudany. + Identifying track through AcoustID - Indetyfikowanie ścieżki poprzez AcoustID + Could not identify track through AcoustID. - Nie można zidentyfikować ścieżki poprzez AcoustID. + Could not find this track in the MusicBrainz database. - Nie można znaleść ścieżki w bazie danych MusicBrainz. + Retrieving metadata from MusicBrainz - Odbieranie metadanych z MusicBrainz + @@ -12742,7 +12681,7 @@ may introduce a 'pumping' effect and/or distortion. Double-click - Podwójne-kliknięcie + @@ -12757,12 +12696,12 @@ may introduce a 'pumping' effect and/or distortion. loop active - pętla aktywna + loop inactive - pętla nieaktywna + @@ -12828,7 +12767,7 @@ may introduce a 'pumping' effect and/or distortion. Right click to show cover art of loaded track. - Użyj prawego przycisku myszy aby pokazać okładkę załadowanej ścieżki. + @@ -12903,12 +12842,12 @@ may introduce a 'pumping' effect and/or distortion. Booth Gain - Wzmocnienie obu + Adjusts the booth output gain. - Reguluje wzmocnienie na wyjściu obu. + @@ -12968,7 +12907,7 @@ may introduce a 'pumping' effect and/or distortion. Sampler - Sampler + @@ -13030,12 +12969,12 @@ may introduce a 'pumping' effect and/or distortion. Show Effects - Pokaż efekty + Show or hide the effects. - Pokaż lub ukryj efekty + @@ -15662,323 +15601,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Utwórz &Nową Listę Odtwarzania - + Create a new playlist Utwórz nową listę odtwarzania - + Ctrl+n Ctrl+n - + Create New &Crate Utwórz nową &Skrzynkę - + Create a new crate Utwórz nową Skrzynkę - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Widok - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Może nie być wspierane we wszystkich skórkach. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Pokaż Sekcję Mikrofonową - + Show the microphone section of the Mixxx interface. Pokaż sekcję mikrofonu w interfejsie Mixxx'a. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Pokaż Sekcję Kontroli Vinyli - + Show the vinyl control section of the Mixxx interface. Pokaż sekcję kontroli vinyla w interfejsie Mixxx'a. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Pokaż Podgląd Decka - + Show the preview deck in the Mixxx interface. Pokaż podgląd decka w interfejsie Mixxx'a. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Pokaż Okładę - + Show cover art in the Mixxx interface. Pokaż Okładkę w interfejsie Mixxx'a - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maksymalizuj Bibliotekę - + Maximize the track library to take up all the available screen space. Maksymalizuj bibliotekę utworów, aby wykorzystać całe dostępne miejsce na ekranie. - + Space Menubar|View|Maximize Library Spacja - + &Full Screen &Pełny Ekran - + Display Mixxx using the full screen Włącz Mixxx w trybie pełnoekranowym - + &Options &Opcje - + &Vinyl Control Kontrola &Winylem - + Use timecoded vinyls on external turntables to control Mixxx Użyj "timecoded vinyls" na zewnętrznych gramofonach aby kontrolować Mixxx'a - + Enable Vinyl Control &%1 Włącz Kontrolę Winylem &%1 - + &Record Mix &Nagraj Mix - + Record your mix to a file Nagraj swój mix do pliku - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Włącz &Nadawanie na żywo - + Stream your mixes to a shoutcast or icecast server Wysyłaj strumień mixu do serwera shoutcast/icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Włącz skróty &Klawiaturowe - + Toggles keyboard shortcuts on or off Przełącza skróty klawiaturowe (Wł./Wył.) - + Ctrl+` Ctrl+` - + &Preferences &Ustawienia - + Change Mixxx settings (e.g. playback, MIDI, controls) Zmień ustawienia Mixxx (np. odtwarzanie, MIDI, sterowanie) - + &Developer &Programista - + &Reload Skin &Wczytaj ponownie skórkę - + Reload the skin Wczytaj ponownie skórkę - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Narzędzia &Programistyczne - + Opens the developer tools dialog Otwiera okienko dialogowe z narzędziami dla programistów. - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Włącza tryb eksperymentalny. Zbiera statystyki w "Koszyku Śledzenia Eksperymentu". - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. Włącza tryb podstawowy. Zbiera statystyki w "Podstawowym Koszyku Śledzenia". - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing Włącza debugger podczas analizowania skórki - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Pomoc - + Show Keywheel menu title @@ -15995,74 +15964,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support & Wsparcie Mixxx - + Get help with Mixxx Uzyskaj pomoc Mixxx - + &User Manual I instrukcja - + Read the Mixxx user manual. Przeczytaj instrukcję użytkownika Mixxx. - + &Keyboard Shortcuts &Skróty Klawiaturowe - + Speed up your workflow with keyboard shortcuts. Przyśpiesz pracę używając skrótów klawiaturowych - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application Prze&tłumacz ten program - + Help translate this application into your language. Pomóż przetłumaczyć ta Aplikacje Na Twój język. - + &About &O programie - + About the application O programie @@ -16097,25 +16066,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Wyczyść wejście - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Szukaj - + Clear input Wyczyść wejście @@ -16126,94 +16083,87 @@ This can not be undone! Szukaj... - + Clear the search bar input field - - Enter a string to search for - Wpisz słowo do wyszukania + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Skrót + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Skupienie - + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspce + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return - Powróć + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - Ctrl+Space + - + Toggle search history Shows/hides the search history entries - Przełącz historię wyszukiwania + - + Delete or Backspace - Delete lub Backspace - - - - Delete query from history - Usuń zapytanie z historii + - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Wyjdź z wyszukiwania + + Delete query from history + @@ -16221,7 +16171,7 @@ This can not be undone! Search related Tracks - Wyszukaj powiązane ścieżki + @@ -16231,7 +16181,7 @@ This can not be undone! harmonic with %1 - harmoniczne z %1 + @@ -16241,7 +16191,7 @@ This can not be undone! between %1 and %2 - pomiędzy %1 i %2 + @@ -16286,7 +16236,7 @@ This can not be undone! Directory - Folder: + @@ -16309,7 +16259,7 @@ This can not be undone! Sampler - Sampler + @@ -16329,7 +16279,7 @@ This can not be undone! Update external collections - Zaktualizuj zewnętrzną kolekcję + @@ -16356,7 +16306,7 @@ This can not be undone! Delete Track Files - Usuń pliki ścieżki + @@ -16386,12 +16336,12 @@ This can not be undone! Remove from Playlist - Usuń z playlisty + Remove from Crate - Usuń ze skrzynki + @@ -16411,12 +16361,12 @@ This can not be undone! Move Track File(s) to Trash - Przenieść pliki ścież(ki/ek) do kosza + Delete Files from Disk - Usuń pliki z dysku + @@ -16431,32 +16381,32 @@ This can not be undone! Select in Library - Wybierz w bibliotecę + Import From File Tags - Importuj z metadanych pliku + Import From MusicBrainz - Importuj z MusicBrainz + Export To File Tags - Eksportuj do metadanych pliku + BPM and Beatgrid - BPM i Siatka bitów + Play Count - Licznik odtwarzania + @@ -16497,7 +16447,7 @@ This can not be undone! Waveform - Wykres dźwięku + @@ -16567,17 +16517,17 @@ This can not be undone! Reanalyze - Analizuj ponownie + Reanalyze (constant BPM) - Analizuj ponownie (stałe BPM) + Reanalyze (variable BPM) - Analizuj ponownie (zmienne BPM) + @@ -16750,18 +16700,18 @@ This can not be undone! Move these files to the trash bin? - Czy przenieść ten pliki kosza? + Permanently delete these files from disk? - Usunąć te pliki na zawsze z dysku? + This can not be undone! - Nie można tego cofnąć! + @@ -16771,27 +16721,27 @@ This can not be undone! Delete Files - Usuń pliki + Okay - Ok + Move Track File(s) to Trash? - Przenieść pliki ścież(ki/ek) do kosza? + Track Files Deleted - Pliki ścieżki usunięte + Track Files Moved To Trash - Pliki ścieżki zostały przeniesione do kosza + @@ -16806,27 +16756,27 @@ This can not be undone! Track File Deleted - Plik ścieżki usunięty + Track file was deleted from disk and purged from the Mixxx database. - Plik ścieżki został usunięty z dysku i usunięty z bazy danych Mixxx'a. + The following %1 file(s) could not be deleted from disk - Te %1 plik(i/ów) mogły nie zostać usunięte z dysku + This track file could not be deleted from disk - Ten plik ścieżki nie mógł zostać usunięty z dysku + Remaining Track File(s) - Pozostałe pliki ścież(ki/ek). + @@ -16837,37 +16787,37 @@ This can not be undone! Clear Reset metadata in right click track context menu in library - Wyczyść + Loops - Pętle + Clear BPM and Beatgrid - Wyczyść BPM i siatkę beat'u + Undo last BPM/beats change - Cofnij ostatnią zmianę BPM/bitu + Move this track file to the trash bin? - Czy przenieść ten plik ścieżki do kosza? + Permanently delete this track file from disk? - Usunąć ten plik ścieżki na zawsze z dysku? + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - Wszystkie decki w których te ścieżki są załadowane zostaną zatrzymane a ścieżki zostaną wyrzucone z tychże decków. + @@ -16882,32 +16832,32 @@ This can not be undone! Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - Uwaga: jeśli jesteś w widoku Komputera ("Computer") lub Nagrywania ("Recording") musisz kliknąć obecny widok ponownie aby zobaczyć zmiany. + Track File Moved To Trash - Plik ścieżki został przeniesiony do kosza + Track file was moved to trash and purged from the Mixxx database. - Plik ścieżki został przeniesiony do kosza i usunięty z bazy danych Mixxx'a. + Don't show again during this session - Nie pokazuj ponownie podczas tej sesji + The following %1 file(s) could not be moved to trash - Te %1 plik(i/ów) mogły nie zostać przeniesione do kosza. + This track file could not be moved to trash - Ten plik może nie zostać przeniesiony do kosza. + @@ -16917,7 +16867,7 @@ This can not be undone! Reloading cover art of %n track(s) - Odświeżenie okładki jednej ścieżki.Odświeżenie okładek %n ścieżek.Odświeżenie okładek %n ścieżek.Odświeżenie okład(ki/ek) %n ścież(ki/ek) + @@ -16925,7 +16875,7 @@ This can not be undone! title - tytuł + @@ -16971,37 +16921,37 @@ This can not be undone! Confirm track hide - Potwiedź ukrycie ścieżki + Are you sure you want to hide the selected tracks? - Czy napewno chcesz ukryć wybrane ścieżki? + Are you sure you want to remove the selected tracks from AutoDJ queue? - Czy napewno chcesz usunąć wybrane ścieżki z kolejki AutoDJ? + Are you sure you want to remove the selected tracks from this crate? - Czy napewno chcesz usunąć wybrane ścieżki z tej skrzynki? + Are you sure you want to remove the selected tracks from this playlist? - Czy napewno chcesz usunąć wybrane ścieżki z tej playlisty? + Don't ask again during this session - Nie pytaj ponownie podczas tej sesji + Confirm track removal - Potwierdź usunięcie ścieżki + @@ -17014,58 +16964,58 @@ This can not be undone! Shuffle Tracks - Przetasuj ścieżki + mixxx::CoreServices - + fonts - czcionki + - + database - baza danych + - + effects - efekty + - + audio interface - interfejs audio + - + decks - decki + - + library - biblioteka + - + Choose music library directory Wybierz katalog biblioteki utworów. - + controllers - kontrolery + - + Cannot open database Nie mogę otworzyć bazy danych - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -17081,22 +17031,22 @@ Kliknij OK aby wyjść. Entire music library - Cała muzyczna biblioteka + Crates - Skrzynki + Playlists - Playlisty + Selected crates/playlists - Wybrane skrzynki/playlisty + @@ -17106,12 +17056,12 @@ Kliknij OK aby wyjść. Export directory - Wyeksportuj katalog + Database version - Wersja bazy danych + @@ -17127,32 +17077,32 @@ Kliknij OK aby wyjść. Export Library to Engine DJ "Engine DJ" must not be translated - Wyeksportuj bibliotekę do Engine DJ + Export Library To - Wyeksportuj bibliotekę do + No Export Directory Chosen - Nie eksportuj wybranego folderu + No export directory was chosen. Please choose a directory in order to export the music library. - Nie wybrano folderu exportu. Proszę wybrać folder, aby wyeskportować bibliotekę. + A database already exists in the chosen directory. Exported tracks will be added into this database. - Baza danych już istnieje w wybranym katalogu, Wyeksportowane ścieżki zostaną dodane do tej bazy danych. + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. - Baza danych już istnieje w wybranym katalogu, ale jest problem z załadowaniem jej. Export nie gwarantuje osiągnięcia sukcesu w tej sytuacji. + @@ -17160,12 +17110,12 @@ Kliknij OK aby wyjść. Export Modified Track Metadata - Wyeskportuj zmodyfikowane metadane ścieżki + Mixxx may wait to modify files until they are not loaded to any decks or samplers. If you do not see changed metadata in other programs immediately, eject the track from all decks and samplers or shutdown Mixxx. - Mixxx może poczekać na modyfikację plików, dopóki nie zostaną załadowane do decka lub samplera. Jeżeli nie widzisz natychmiastowej zmiany metadanych w innych programach, wyciągnij ścieżkę ze wszystkich decków lub wyłącz Mixxx'a. + @@ -17175,8 +17125,7 @@ Kliknij OK aby wyjść. Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message - Nie udało się wyeksportować ścieżki %1 - %2: -%3 + @@ -17184,22 +17133,22 @@ Kliknij OK aby wyjść. Export Completed - Export udany + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - Wyeksportowano %1 ścież(kę/ki/ek), %2 skrzyn(kę/ki/ek) i %3 playlist(ę/y). + Export Failed - Export nieudany + Exporting to Engine DJ... - Exportowanie do Engine DJ... + @@ -17207,7 +17156,7 @@ Kliknij OK aby wyjść. Abort - Porzuć + @@ -17215,7 +17164,7 @@ Kliknij OK aby wyjść. No network access - Brak dostępu do internetu + diff --git a/res/translations/mixxx_pt.qm b/res/translations/mixxx_pt.qm index 87bcc7820f87..fd4b26aa57f9 100644 Binary files a/res/translations/mixxx_pt.qm and b/res/translations/mixxx_pt.qm differ diff --git a/res/translations/mixxx_pt.ts b/res/translations/mixxx_pt.ts index fafd954e7445..25a759d51cea 100644 --- a/res/translations/mixxx_pt.ts +++ b/res/translations/mixxx_pt.ts @@ -170,7 +170,7 @@ Remove - + Remover @@ -352,7 +352,7 @@ BPM - + BPM @@ -362,7 +362,7 @@ Color - + Cor @@ -607,7 +607,7 @@ Scan - + Examinar @@ -700,7 +700,7 @@ Bitrate - + Bit rate @@ -710,7 +710,7 @@ Location - + LOCALIZAÇÃO @@ -748,7 +748,7 @@ The file '%1' could not be found. - + O arquivo '%1' não pôde ser encontrado. @@ -910,7 +910,7 @@ trace - Above + Profiling messages Remove Palette - + Remover Paleta @@ -938,7 +938,7 @@ trace - Above + Profiling messages No control chosen. - + Nenhum controlo escolhido. @@ -1016,7 +1016,7 @@ trace - Above + Profiling messages Effect Rack %1 - + Rack de Efeitos %1 @@ -1026,7 +1026,7 @@ trace - Above + Profiling messages Mixer - + Mixer @@ -1047,7 +1047,7 @@ trace - Above + Profiling messages Headphone delay - + Atraso Auscultador @@ -1105,7 +1105,7 @@ trace - Above + Profiling messages Mute button - + Tecla de Silêncio @@ -1122,7 +1122,7 @@ trace - Above + Profiling messages Set mix orientation to left - + Definir orientação da mistura à esquerda @@ -1134,7 +1134,7 @@ trace - Above + Profiling messages Set mix orientation to right - + Definir orientação da mistura à direita @@ -1180,12 +1180,12 @@ trace - Above + Profiling messages One-time beat sync (tempo only) - + Sincronização pontual da batida (só tempo) One-time beat sync (phase only) - + Sincronização pontual da batida (só fase) @@ -1250,7 +1250,7 @@ trace - Above + Profiling messages Preview from cue point - + Antevisão a partir do ponto de marcação @@ -1260,7 +1260,7 @@ trace - Above + Profiling messages Stutter cue - + Marcação Stutter @@ -1280,7 +1280,7 @@ trace - Above + Profiling messages Set hotcue %1 - + Definir a Hot Cue %1 @@ -1300,7 +1300,7 @@ trace - Above + Profiling messages Preview from hotcue %1 - + Antevisão a partir da Hot Cue %1 @@ -1376,7 +1376,7 @@ trace - Above + Profiling messages Move loop backward by %1 beats - + Move o loop para trás %1 batidas @@ -1396,7 +1396,7 @@ trace - Above + Profiling messages Slot %1 - + Compartimento %1 @@ -1406,12 +1406,12 @@ trace - Above + Profiling messages Headphone Split Cue - + Escuta Dividida no Auscultador Headphone Delay - + Atraso Auscultador @@ -1441,7 +1441,7 @@ trace - Above + Profiling messages Strip Search - + Busca pela Faixa @@ -1515,7 +1515,7 @@ trace - Above + Profiling messages Zero Volume - + Volume Zero @@ -1525,7 +1525,7 @@ trace - Above + Profiling messages Track Gain knob - + Botão de Ganho da Faixa @@ -1542,12 +1542,12 @@ trace - Above + Profiling messages Headphone Listen - + Escuta de Auscultador Headphone listen (pfl) button - + Botão de escuta de auscultador (PFL) @@ -1596,7 +1596,7 @@ trace - Above + Profiling messages BPM +0.1 - + BPM +0.1 @@ -1611,7 +1611,7 @@ trace - Above + Profiling messages Adjust Beatgrid Faster +.01 - + Ajustar Grelha de Batidas Mais Rápido +.01 @@ -1626,12 +1626,12 @@ trace - Above + Profiling messages Decrease track's average BPM by 0.01 - + Atrasa o BPM médio da faixa de 0.01 Move Beatgrid Earlier - + Mover Grelha de Batidas Cedo @@ -1641,7 +1641,7 @@ trace - Above + Profiling messages Move Beatgrid Later - + Mover Grelha de Batidas Tarde @@ -1656,22 +1656,22 @@ trace - Above + Profiling messages Align beatgrid to current position - + Alinhar a grade de batidas à posição atual Adjust Beatgrid - Match Alignment - + Ajustar Grelha de Batidas - Igualar Alinhamento Adjust beatgrid to match another playing deck. - + Ajusta a grelha de batidas para corresponder um outro leitor em reprodução. Quantize Mode - + Modo Quantização @@ -1686,7 +1686,7 @@ trace - Above + Profiling messages Sync Tempo One-Shot - + Sincronizar o Tempo De Uma Vez @@ -1696,37 +1696,37 @@ trace - Above + Profiling messages Pitch control (does not affect tempo), center is original pitch - + Controlo de tom (não afeta o tempo), ao centro é o tom original Pitch Adjust - + Ajustar Tom Adjust pitch from speed slider pitch - + Ajustar o tom com o cursor de velocidade Match musical key - + Igualar o tom musical Match Key - + Igualar Tom Reset Key - + Redefinir o Tom Resets key to original - + Redefine o tom para o original @@ -1736,7 +1736,7 @@ trace - Above + Profiling messages Mid EQ - + Equalizador dos Médios @@ -1767,7 +1767,7 @@ trace - Above + Profiling messages Toggle Vinyl Control - + Alternar Controlo do Vinil @@ -1782,22 +1782,22 @@ trace - Above + Profiling messages Vinyl Control Cueing Mode - + Controlo do Vinil Modo Marcação Vinyl Control Passthrough - + Controlo do Vinil Passthrough Vinyl Control Next Deck - + Controlo do Vinil Próximo Leitor Single deck mode - Switch vinyl control to next deck - + Modo leitor único - Comutar o controlo do vinil para Próximo Leitor @@ -1807,37 +1807,37 @@ trace - Above + Profiling messages Set Cue - + Definir Cue Go-To Cue - + Ir Para Cue Go-To Cue And Play - + Ir para Marcação e Tocar Go-To Cue And Stop - + Ir para Marcação e Parar Preview Cue - + Antevisão Marcação Cue (CDJ Mode) - + Cue (Modo CDJ) Stutter Cue - + Marcação Stutter @@ -1852,7 +1852,7 @@ trace - Above + Profiling messages Set Hotcue %1 - + Definir Hot Cue %1 @@ -1862,7 +1862,7 @@ trace - Above + Profiling messages Jump To Hotcue %1 And Stop - + Pular Para Hotcue %1 e Parar @@ -1872,12 +1872,12 @@ trace - Above + Profiling messages Preview Hotcue %1 - + Escutar Hotcue %1 Loop In - + Início de Loop @@ -1887,12 +1887,12 @@ trace - Above + Profiling messages Loop Exit - + Saída do Loop Reloop/Exit Loop - + Reloopar/Sair do Loop @@ -1917,32 +1917,32 @@ trace - Above + Profiling messages 1/8 - + 1/8 1/4 - + 1/4 Move Loop +%1 Beats - + Mover Loop +%1 Batidas Move Loop -%1 Beats - + Mover o Loop -%1 Batidas Loop %1 Beats - + Loopar %1 Batidas Loop Roll %1 Beats - + Loopar Temporariamente %1 Batidas @@ -1952,7 +1952,7 @@ trace - Above + Profiling messages Append the selected track to the Auto DJ Queue - + Coloca a faixa selecionada no final da fila Auto DJ @@ -1962,17 +1962,17 @@ trace - Above + Profiling messages Prepend selected track to the Auto DJ Queue - + Adicionar a faixa selecionada no começo da fila do Auto DJ Load Track - + Carregar Faixa Load selected track - + Carregar a faixa seleccionada @@ -1988,7 +1988,7 @@ trace - Above + Profiling messages Toggle mix recording - + Alternar gravação da mistura @@ -1998,28 +1998,28 @@ trace - Above + Profiling messages Quick Effects - + Efeitos Rápidos Deck %1 Quick Effect Super Knob - + Super Botão de Efeito Rápido do Deck %1 Quick Effect Super Knob (control linked effect parameters) - + Super Botão de Efeito Rápido (controla os parâmetros do efeito a que está ligado) Quick Effect - + Efeito Rápido Clear Unit - + Limpar Unidade @@ -2029,12 +2029,12 @@ trace - Above + Profiling messages Toggle Unit - + Ligar/Desligar Unidade Dry/Wet - + Seco/Molhado @@ -2044,12 +2044,12 @@ trace - Above + Profiling messages Super Knob - + Super Botão Next Chain - + Próxima Corrente @@ -2059,12 +2059,12 @@ trace - Above + Profiling messages Clear - + Limpar Clear the current effect - + Limpar o efeito corrente @@ -2074,7 +2074,7 @@ trace - Above + Profiling messages Toggle the current effect - + Alternar o efeito corrente @@ -2094,23 +2094,23 @@ trace - Above + Profiling messages Switch to the previous effect - + Trocar para o efeito anterior Next or Previous - + Próximo ou Anterior Switch to either next or previous effect - + Comutar quer para o próximo ou anterior efeito Parameter Value - + Valor do Parâmetro @@ -2141,7 +2141,7 @@ trace - Above + Profiling messages Skip the next track in the Auto DJ queue - + Pular a próxima faixa na fila do Auto DJ @@ -2151,7 +2151,7 @@ trace - Above + Profiling messages Toggle Auto DJ On/Off - + Ligar/Desligar Auto DJ @@ -2191,12 +2191,12 @@ trace - Above + Profiling messages Library Maximize/Restore - + Maximizar/Restaurar Biblioteca Maximize the track library to take up all the available screen space. - + Maximiza a biblioteca de faixas para ocupar todo o espaço disponível do ecrã. @@ -2206,22 +2206,22 @@ trace - Above + Profiling messages Show/hide the effect rack - + Mostra/Oculta a prateleira de efeitos Waveform Zoom Out - + Reduzir Forma de Onda Headphone Gain - + Ganho Auscultador Headphone gain - + Ganho dos auscultadores @@ -2231,12 +2231,12 @@ trace - Above + Profiling messages One-time beat sync tempo (and phase with quantize enabled) - + Tempo de sincronização de batida única (e fase com quantização ativada) Playback Speed - + Velocidade da Reprodução @@ -2251,17 +2251,17 @@ trace - Above + Profiling messages Increase Speed - + Aumentar a Velocidade Adjust speed faster (coarse) - + Aumentar a velocidade (grosso) Increase Speed (Fine) - + Aumentar Velocidade (Fino) @@ -2276,7 +2276,7 @@ trace - Above + Profiling messages Adjust speed slower (coarse) - + Diminuir a velocidade (grosso) @@ -2291,7 +2291,7 @@ trace - Above + Profiling messages Temporarily increase speed (coarse) - + Temporariamente aumentar a velocidade (grosso) @@ -2306,22 +2306,22 @@ trace - Above + Profiling messages Temporarily Decrease Speed - + Temporariamente Diminuir a Velocidade Temporarily decrease speed (coarse) - + Diminuir a velocidade temporariamente (grosseiro) Temporarily Decrease Speed (Fine) - + Temporariamente Diminuir a Velocidade (Fino) Temporarily decrease speed (fine) - + Temporariamente diminuir a velocidade (fino) @@ -2372,7 +2372,7 @@ trace - Above + Profiling messages Headphone - + Auscultador @@ -2570,7 +2570,7 @@ trace - Above + Profiling messages Speed - + Velocidade @@ -2778,22 +2778,22 @@ trace - Above + Profiling messages Loop Selected Beats - + Loop de Batidas Selecionadas Create a beat loop of selected beat size - + Criar um loop de batida do tamanho de batida selecionada Loop Roll Selected Beats - + Batidas Selecionadas da Lista de Loop Create a rolling beat loop of selected beat size - + Criar um loop rolado de batidas do tamanho selecionado @@ -2848,37 +2848,37 @@ trace - Above + Profiling messages Toggle loop on/off and jump to Loop In point if loop is behind play position - + Alterna entre ligar/desligar o loop e salta para o ponto Início de Loop, se o loop estiver atrás da posição de leitura Reloop And Stop - + Reloop e Parar Enable loop, jump to Loop In point, and stop - + Ativa o loop, salta para o ponto de Início de Loop, e pára. Halve the loop length - + Reduzir o loop pela metade Double the loop length - + Duplica o comprimento do loop Beat Jump / Loop Move - + Saltar Batidas / Mover Loop Jump / Move Loop Forward %1 Beats - + Mover o loop para frente %1 batidas @@ -2888,32 +2888,32 @@ trace - Above + Profiling messages Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Saltar para a frente %1 batidas, ou se o loop estiver ativado, mover o loop para a frente %1 batidas Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Saltar para trás %1 batidas, ou se o loop estiver ativado, mover o loop para trás %1 batidas Beat Jump / Loop Move Forward Selected Beats - + Saltar Batidas / Mover Loop Frente Batidas Selecionadas Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Saltar para a frente do número de batidas selecionadas, ou se o loop estiver ativado, mover o loop para a frente o número de batidas selecionadas Beat Jump / Loop Move Backward Selected Beats - + Saltar Batida / Mover Loop Atraso Batidas Selecionadas Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Saltar para trás o número de batidas selecionadas, ou se o loop estiver ativado, mover o loop para trás o número de batidas selecionadas @@ -2998,7 +2998,7 @@ trace - Above + Profiling messages Equivalent to pressing the PAGE UP key on the keyboard - + Equivalente a pressionar a tecla PAGE UP no teclado @@ -3023,7 +3023,7 @@ trace - Above + Profiling messages Move left - + Mover à esquerda @@ -3033,7 +3033,7 @@ trace - Above + Profiling messages Move right - + Mover direita @@ -3058,22 +3058,22 @@ trace - Above + Profiling messages Equivalent to pressing the TAB key on the keyboard - + Equivalente a pressionar a tecla TAB no teclado Move focus to left pane - Move o foco ao painel da esquerda + Mover o foco para o painel da esquerda Equivalent to pressing the SHIFT+TAB key on the keyboard - + Equivalente a pressionar SHIFT+TAB no teclado Move focus to right/left pane - + Mover o foco para o painel direita/esquerda @@ -3093,12 +3093,12 @@ trace - Above + Profiling messages Go to the currently selected item - + Ir para o item seleccionado correntemente Choose the currently selected item and advance forward one pane if appropriate - + Escolher o item seleccionado correntemente e avançar um para a frente @@ -3108,12 +3108,12 @@ trace - Above + Profiling messages Add to Auto DJ Queue (replace) - + Adicionar à Fila Auto DJ (Substituir) Replace Auto DJ Queue with selected tracks - + Substituir Fila Auto DJ com as faixas selecionadas @@ -3180,12 +3180,12 @@ trace - Above + Profiling messages Deck %1 Quick Effect Enable Button - + Botão de Ativar Efeito Rápido no Leitor %1 Quick Effect Enable Button - + Botão de Ativar Efeito Rápido @@ -3195,22 +3195,22 @@ trace - Above + Profiling messages Super Knob (control effects' Meta Knobs) - + Super Botão (controla os efeitos dos Meta Botões) Mix Mode Toggle - + Alternar Modo Mistura Toggle effect unit between D/W and D+W modes - + Alternar unidade de efeito entre os modos S/M e S+M Next chain preset - + Próxima cadeia predefinida @@ -3225,7 +3225,7 @@ trace - Above + Profiling messages Next/Previous Chain - + Corrente Seguinte/Anterior @@ -3236,7 +3236,7 @@ trace - Above + Profiling messages Show Effect Parameters - + Mostrar Parâmetros dos Efeitos @@ -3246,32 +3246,32 @@ trace - Above + Profiling messages Meta Knob - + Botão Meta Effect Meta Knob (control linked effect parameters) - + Meta Botão Efeitos (controla os parâmetros dos efeitos a que está ligado) Meta Knob Mode - + Modo Meta Botão Set how linked effect parameters change when turning the Meta Knob. - + Define como mudam os efeitos a que está ligado, quando se roda o Meta Botão. Meta Knob Mode Invert - + Inverter Modo Meta Botão Invert how linked effect parameters change when turning the Meta Knob. - + Inverter como mudam os efeitos a que está ligado, quando se roda o Meta Botão. @@ -3282,7 +3282,7 @@ trace - Above + Profiling messages Microphone / Auxiliary - + Microfone / Auxiliar @@ -3307,7 +3307,7 @@ trace - Above + Profiling messages Auxiliary on/off - + Ligar/Desligar Auxiliar @@ -3317,12 +3317,12 @@ trace - Above + Profiling messages Auto DJ Shuffle - + Embaralhar o Auto DJ Auto DJ Skip Next - + Pular a Próxima no Auto DJ @@ -3337,7 +3337,7 @@ trace - Above + Profiling messages Auto DJ Fade To Next - + Trocar Para a Próxima no Auto DJ @@ -3352,7 +3352,7 @@ trace - Above + Profiling messages Samplers Show/Hide - + Samplers Mostrar/Ocultar @@ -3419,7 +3419,7 @@ trace - Above + Profiling messages Vinyl Control Show/Hide - + Mostrar/Ocultar Controle por Vinil @@ -3429,7 +3429,7 @@ trace - Above + Profiling messages Preview Deck Show/Hide - + Leitor de Antevisão Mostrar/Ocultar @@ -3439,7 +3439,7 @@ trace - Above + Profiling messages Toggle 4 Decks - + Ligar/Desligar 4 Decks @@ -3484,7 +3484,7 @@ trace - Above + Profiling messages Show/hide the scrolling waveforms. - + Mostrar/esconder as ondas. @@ -3499,7 +3499,7 @@ trace - Above + Profiling messages Zoom waveform in - + Ampliar a forma de onda @@ -3509,7 +3509,7 @@ trace - Above + Profiling messages Zoom waveform out - + Reduzir a forma de onda @@ -3560,12 +3560,12 @@ trace - Above + Profiling messages Options - + Opções Action - + Ação @@ -3578,7 +3578,7 @@ trace - Above + Profiling messages Channel - + Canal @@ -3593,17 +3593,17 @@ trace - Above + Profiling messages On Value - + Valor On Off Value - + Valor Off Action - + Ação @@ -3613,7 +3613,7 @@ trace - Above + Profiling messages On Range Max - + Alcance Máximo para Ligado @@ -3642,32 +3642,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Tente recuperar reiniciando seu controlador. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. O código do script precisa ser corrigido. @@ -3713,7 +3713,7 @@ trace - Above + Profiling messages Remove - + Remover @@ -3724,7 +3724,7 @@ trace - Above + Profiling messages Rename - + Renomear @@ -3750,17 +3750,17 @@ trace - Above + Profiling messages Analyze entire Crate - + Analisar Toda a Caixa Auto DJ Track Source - + Fonte de Faixas do Auto DJ Enter new name for crate: - + Introduza um novo nome para a caixa: @@ -3813,7 +3813,7 @@ trace - Above + Profiling messages Crate Creation Failed - + Criação da Caixa Falhou @@ -3916,7 +3916,7 @@ trace - Above + Profiling messages Duplicating Crate Failed - + Falha ao duplicar a caixa @@ -4000,7 +4000,7 @@ trace - Above + Profiling messages License - + Licença @@ -4040,7 +4040,7 @@ trace - Above + Profiling messages Selects all tracks in the table below. - + Seleciona todas as faixas da tabela abaixo @@ -4050,7 +4050,7 @@ trace - Above + Profiling messages Runs beatgrid, key, and ReplayGain detection on the selected tracks. Does not generate waveforms for the selected tracks to save disk space. - + Executa a detecção da grade de batidas, do tom e do ReplayGain nas faixas selecionadas. Não gera ondas para as faixas selecionadas para salvar espaço no disco. @@ -4128,12 +4128,12 @@ Shortcut: Shift+F9 Determines the duration of the transition - + Determina a duração da transição. Seconds - + Segundos @@ -4199,7 +4199,7 @@ crossfader, so that the intro starts at full volume. Repeat - + Repetir @@ -4209,7 +4209,7 @@ crossfader, so that the intro starts at full volume. One deck must be stopped to enable Auto DJ mode. - + Um leitor deve ser parado para permitir o modo Auto DJ. @@ -4224,7 +4224,7 @@ crossfader, so that the intro starts at full volume. Displays the duration and number of selected tracks. - + Mostra a duração e número de faixas selecionadas. @@ -4243,7 +4243,8 @@ crossfader, so that the intro starts at full volume. Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. - + Adiciona uma faixa aleatoriamente das fontes de faixas (caixas) à fila Auto DJ. +Se não estão configuradas fontes de faixas, então a faixa é adicionada da biblioteca. @@ -4266,7 +4267,7 @@ If no track sources are configured, the track is added from the library instead. Beat Detection Preferences - + Preferências para a Detecção de Batida @@ -4286,7 +4287,9 @@ This can speed up beat detection on slower computers but may result in lower qua Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Converte batidas detectada pelo analisador em uma grade de batidas de tempo fixo. +Use esta configuração se suas faixas tem um tempo constante (como a maioria das músicas eletrônicas). +Frequentemente resulta em grades de batida de melhor qualidade, e não funciona direito em faixas que tem mudanças de tempo. @@ -4311,12 +4314,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Choose Analyzer - + Escolha o Analisador Analyzer Settings - + Configurações do Analisador @@ -4332,12 +4335,13 @@ Often results in higher quality beatgrids, but will not do well on tracks that h e.g. from 3rd-party programs or Mixxx versions before 1.11. (Not checked: Analyze only, if no beats exist.) - + ex. de programas de terceiros ou versões do Mixxx anteriores a 1.11 +(Não verificado: Analisar apenas, se não existirem batidas) Re-analyze beats when settings change or beat detection data is outdated - + Re-analisar batidas quando as configurações forem alteradas ou quando os dados de detecção de batida estiverem desatualizados @@ -4355,7 +4359,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Close - + Fechar @@ -4365,27 +4369,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Hints: If you're mapping a button or switch, only press or flip it once. For knobs and sliders, move the control in both directions for best results. Make sure to touch one control at a time. - + Dicas: Se você está mapeando um botão ou chave, apenas pressione ou vire uma vez. Para botões de girar e deslizantes, mova o controle em ambas as direções para melhores resultados. Toque apenas um controle de cada vez. Cancel - + Cancelar Advanced MIDI Options - + Opções MIDI Avançadas Switch mode interprets all messages for the control as button presses. - + Modo Switch interpreta todas as mensagens para o controlo como teclas de pressão. Switch Mode - + Modo Switch @@ -4395,27 +4399,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Soft Takeover - + Soft Takeover Reverses the direction of the control. - + Inverte a direção do controlo. Invert - + Inverter For jog wheels or infinite-scroll knobs. Interprets incoming messages in two's complement. - + Para jog wheels ou botões com rolagem infinita. Interpreta as mensagens em um complemento para dois. Jog Wheel / Select Knob - + Jog Wheel / Botão de Seleção @@ -4435,7 +4439,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Click anywhere in Mixxx or choose a control to learn - + Clique em qualquer lugar no Mixxx ou escolha um controle para aprender @@ -4450,22 +4454,22 @@ Often results in higher quality beatgrids, but will not do well on tracks that h If you manipulate the control, you should see the Mixxx user interface respond the way you expect. - + Se você manipular o controle, você deve ver a interface do Mixxx responder da maneira que você espera. Not quite right? - + Ainda não está perfeito? If the mapping is not working try enabling an advanced option below and then try the control again. Or click Retry to redetect the midi control. - + Se o mapeamento não estiver a funcionar tente validar uma opção avançada abaixo e depois tente o controlo de novo. Ou clique repetir para redetetar o controlo midi. Didn't get any midi messages. Please try again. - + Não recebi nenhuma mensagem MIDI. Por favor tente de novo. @@ -4498,7 +4502,10 @@ Often results in higher quality beatgrids, but will not do well on tracks that h This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. You tried to learn: %1,%2 - + O controle que você clicou no Mixxx não pode ser mapeado. +Isso pode ser porque você está usando um tema antigo e esse controle não é mais suportado, ou você clicou em um controle que provê feedback visual e só pode ser mapeado em saídas como LEDs por meio de scripts. + +Você tentou mapear: %1,%2 @@ -4514,7 +4521,7 @@ You tried to learn: %1,%2 Developer Tools - + Ferramentas de Desenvolvedor @@ -4524,27 +4531,27 @@ You tried to learn: %1,%2 Dumps all ControlObject values to a csv-file saved in the settings path (e.g. ~/.mixxx) - + Despeja todos os valores ControlObject para um arquivo csv salvo na pasta de configurações (por exemplo ~/.mixxx) Dump to csv - + Descarga para csv Log - + Registo Search - + Pesquisa Stats - + Estatísticas @@ -4656,12 +4663,12 @@ You tried to learn: %1,%2 Minimum available tracks in Track Source - + Número mínimo de faixas disponíveis na Fonte de Faixas Auto DJ Preferences - + Preferências Auto DJ @@ -4676,13 +4683,13 @@ You tried to learn: %1,%2 % - + % Uncheck, to ignore all played tracks. - + Desmarque para ignorar todas as faixas tocadas. @@ -4692,7 +4699,7 @@ You tried to learn: %1,%2 Suspension period for track selection - + Período de suspensão para a seleção de faixas @@ -4702,7 +4709,7 @@ You tried to learn: %1,%2 Enable random track addition to queue - + Ativar adição de faixa aleatória à fila @@ -4712,7 +4719,7 @@ You tried to learn: %1,%2 Minimum allowed tracks before addition - + Mínimo de faixas permitidas antes da adição @@ -4765,7 +4772,7 @@ You tried to learn: %1,%2 Opus - + Opus @@ -4775,17 +4782,17 @@ You tried to learn: %1,%2 HE-AAC - + HE-AAC HE-AACv2 - + HE-AACv2 Automatic - + Automático @@ -4808,28 +4815,28 @@ You tried to learn: %1,%2 You can't create more than %1 source connections. - + Não pode criar mais de %1 ligações fonte. Source connection %1 - + Ligação fonte %1 At least one source connection is required. - + É necessária pelo menos uma ligação fonte. Are you sure you want to disconnect every active source connection? - + Tem a certeza que quer desligar todas as ligações fonte ativas? Confirmation required - + Confirmação necessária @@ -4840,7 +4847,7 @@ Two source connections to the same server that have the same mountpoint can not Are you sure you want to delete '%1'? - + Tem a certeza que quer apagar '%1'? @@ -4850,12 +4857,12 @@ Two source connections to the same server that have the same mountpoint can not New name for '%1': - + Novo nome para '%1': Can't rename '%1' to '%2': name already in use - + Não pode renomear '%1' para '%2': nome já em uso @@ -4883,7 +4890,7 @@ Two source connections to the same server that have the same mountpoint can not Stream name - + Nome da transmissão @@ -4893,37 +4900,37 @@ Two source connections to the same server that have the same mountpoint can not Live Broadcasting source connections - + Ligações fonte Emissão em Direto Delete selected - + Apagar selecionadas Create new connection - + Criar nova ligação Rename selected - + Renomear selecionadas Disconnect all - + Desligar todas Turn on Live Broadcasting when applying these settings - + Ligar Emissão em Direto quando aplicar estas definições Settings for %1 - + Definições para %1 @@ -4958,7 +4965,7 @@ Two source connections to the same server that have the same mountpoint can not Select a source connection above to edit its settings here - + Selecionar uma ligação fonte acima para editar as suas definições aqui @@ -4968,12 +4975,12 @@ Two source connections to the same server that have the same mountpoint can not Plain text - + Texto simples Secure storage (OS keychain) - + Armazenamento seguro (Porta chaves do SO) @@ -5034,7 +5041,7 @@ Two source connections to the same server that have the same mountpoint can not Mount - + Montar @@ -5044,48 +5051,48 @@ Two source connections to the same server that have the same mountpoint can not Password - + Palavra passe Stream info - + Informações do Fluxo Metadata - + Metadado Use static artist and title. - + Usar artista e título estáticos. Static title - + Título estático Static artist - + Artista estático Automatic reconnect - + Religar automático Time to wait before the first reconnection attempt is made. - + Tempo de espera antes da primeira tentativa de religação. seconds - + segundos @@ -5105,22 +5112,22 @@ Two source connections to the same server that have the same mountpoint can not Limit number of reconnection attempts - + Limitar número de tentativas de reconexão Maximum retries - + Máximo de tentativas Reconnect if the connection to the streaming server is lost. - + Religar se a ligação ao servidor de streaming estiver perdida. Enable automatic reconnect - + Ativar reconexão automática @@ -5129,7 +5136,7 @@ Two source connections to the same server that have the same mountpoint can not By hotcue number - + Por número do hotcue @@ -5163,7 +5170,7 @@ Two source connections to the same server that have the same mountpoint can not Hotcue palette - + Paleta de hotcue @@ -5289,22 +5296,22 @@ Aplicar os parâmetros e continuar? Clear Input Mappings - + Limpar Mapeamentos de Entrada Are you sure you want to clear all input mappings? - + Tem a certeza que deseja limpar todas os mapeamentos de entrada? Clear Output Mappings - + Limpar Mapeamentos de Saída Are you sure you want to clear all output mappings? - + Tem certeza de que deseja limpar todos os mapeamentos de saída? @@ -5415,7 +5422,7 @@ Aplicar os parâmetros e continuar? Remove - + Remover @@ -5440,12 +5447,12 @@ Aplicar os parâmetros e continuar? Author: - + Autor: Name: - + Nome: @@ -5476,7 +5483,7 @@ Aplicar os parâmetros e continuar? Output Mappings - + Mapeamento de Saída @@ -5523,7 +5530,7 @@ Aplicar os parâmetros e continuar? Mixxx did not detect any controllers. If you connected the controller while Mixxx was running you must restart Mixxx first. - + O Mixxx não detectou nenhum controlador. Se você conectou um controlador enquanto o Mixxx estava rodando, você precisa reiniciar o Mixxx primeiro. @@ -5543,12 +5550,12 @@ Aplicar os parâmetros e continuar? Resources - + Recursos Controllers are physical devices that send MIDI or HID signals to your computer over a USB connection. These allow you to control Mixxx in a more hands-on way than a keyboard and mouse. Attached controllers that Mixxx recognizes are shown in the "Controllers" section in the sidebar. - + Controladores são dispositivos físicos que mandam sinais MIDI ou HID para o seu computador em uma conexão USB. Esses permitem que você controle o Mixxx de uma maneira mais tátil do que um teclado ou mouse. Controladores ligados que o Mixxx reconhece são mostrados na seção "Controladores" na barra lateral. @@ -5571,17 +5578,17 @@ Aplicar os parâmetros e continuar? Select from different color schemes of a skin if available. - + Selecione diferentes esquemas de cor de uma skin se disponível. Color scheme - + Esquema de côr Locales determine country and language specific settings. - + A localização determina as configurações específicas de país e língua. @@ -5591,7 +5598,7 @@ Aplicar os parâmetros e continuar? Interface Preferences - + Preferências do Interface @@ -5606,7 +5613,7 @@ Aplicar os parâmetros e continuar? HiDPI / Retina scaling - + Escala HiDPI / Retina @@ -5633,6 +5640,16 @@ Aplicar os parâmetros e continuar? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -5779,7 +5796,7 @@ Aplicar os parâmetros e continuar? 16% - + 16% @@ -5802,7 +5819,7 @@ Aplicar os parâmetros e continuar? Deck Preferences - + Preferências Leitor @@ -5864,7 +5881,7 @@ Modo CUP: Elapsed - + Decorrido @@ -5879,7 +5896,7 @@ Modo CUP: Time Format - + Formato de tempo @@ -5893,7 +5910,11 @@ it will place it at the main cue point if the main cue point has been set previo This may be helpful for upgrading to Mixxx 2.3 from earlier versions. If this option is disabled, the intro start point is automatically placed at the first sound. - + Quando o analisador coloca automaticamente o ponto de início da introdução, +ele coloca-o no ponto de referência principal se o ponto de referência principal tiver sido definido anteriormente. +Isso pode ser útil para atualizar para o Mixxx 2.3 de versões anteriores. + +Se essa opção estiver desativada, o ponto de início da introdução é colocado automaticamente no primeiro som. @@ -5903,7 +5924,7 @@ If this option is disabled, the intro start point is automatically placed at the Track load point - + Ponto de carga de rastreamento @@ -5924,7 +5945,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Double-press Load button to clone playing track - + Pressione Carregar duas vezes para clonar uma faixa que está tocando @@ -5957,7 +5978,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Current key - + Tom atual @@ -5967,12 +5988,12 @@ You can always drag-and-drop tracks on screen to clone a deck. Permanent - + Permanente Temporary - + Temporário @@ -5987,17 +6008,17 @@ You can always drag-and-drop tracks on screen to clone a deck. Ramping sensitivity - + Sensibilidade da aceleração Pitch bend behavior - + Comportamento do pitch bend Original key - + Tom original @@ -6007,17 +6028,17 @@ You can always drag-and-drop tracks on screen to clone a deck. Speed/Tempo - + Velocidade/Tempo Key/Pitch - + Tom/Pitch Adjustment buttons: - + Ajustamento das teclas: @@ -6032,32 +6053,32 @@ You can always drag-and-drop tracks on screen to clone a deck. Coarse - + Grosso Fine - + Fino Make the speed sliders work like those on DJ turntables and CDJs where moving downward increases the speed - + Fazer os cursores de velocidade funcionar como os dos gira-discos e CDJs em que a movimentação para baixo aumenta a velocidade. Down increases speed - + Pra baixo aumenta a velocidade Slider range - + Extensão do cursor Adjusts the range of the speed (Vinyl "Pitch") slider. - + Ajusta a extensão do cursor de velocidade ("Pitch" do Vinil) @@ -6067,27 +6088,27 @@ You can always drag-and-drop tracks on screen to clone a deck. Smoothly adjusts deck speed when temporary change buttons are held down - + Suavemente ajusta a velocidade do deck quando os botões de mudança temporário são segurados Smooth ramping - + Rampa Keyunlock mode - + Modo desbloqueio de tecla Reset key - + Reiniciar tom Keep key - + Manter tecla @@ -6105,7 +6126,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Effects Preferences - + Preferências dos Efeitos @@ -6156,7 +6177,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Export - + Exportar @@ -6202,12 +6223,12 @@ You can always drag-and-drop tracks on screen to clone a deck. Keep metaknob position - + Manter posição do metabotão Reset metaknob to effect default - + Reinicia metabotão para efeito padrão @@ -6217,7 +6238,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Version: - + Versão: @@ -6227,78 +6248,78 @@ You can always drag-and-drop tracks on screen to clone a deck. Author: - + Autor: Name: - + Nome: Type: - + Tipo: DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. O tamanho mínimo da skin selecionada é maior do que a sua resolução de tela. - + Allow screensaver to run - + Permitir que o protetor de tela execute - + Prevent screensaver from running - + Prevenir que o protetor de tela execute - + Prevent screensaver while playing - + Prevenir o protetor de tela quando tocando - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Esta Skin não suporta esquemas de cores - + Information Informação - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -6308,7 +6329,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Key Notation Format Settings - + Configurações do Formato da Notação de Tom @@ -6319,7 +6340,7 @@ and allows you to pitch adjust them for harmonic mixing. Enable Key Detection - + Validar Deteção de Tom @@ -6329,7 +6350,7 @@ and allows you to pitch adjust them for harmonic mixing. Choose between different algorithms to detect keys. - + Escolher entre diferentes algoritmos para detetar os tons. @@ -6364,7 +6385,7 @@ and allows you to pitch adjust them for harmonic mixing. Key Notation - + Notação do Tom @@ -6389,17 +6410,17 @@ and allows you to pitch adjust them for harmonic mixing. Traditional - + Tradicional Custom - + Personalizado A - + @@ -6409,17 +6430,17 @@ and allows you to pitch adjust them for harmonic mixing. B - + Si C - + C Db - + Db @@ -6429,92 +6450,92 @@ and allows you to pitch adjust them for harmonic mixing. Eb - + Mib E - + E F - + F F# - + Fá# G - + Sol Ab - + Ab Am - + Lám Bbm - + Bbm Bm - + Bm Cm - + Dóm C#m - + C#m Dm - + Dm Ebm - + Ebm Em - + Em Fm - + Fám F#m - + F#m Gm - + Gm G#m - + Sol#m @@ -6537,7 +6558,7 @@ and allows you to pitch adjust them for harmonic mixing. Scan - + Examinar @@ -6557,27 +6578,27 @@ and allows you to pitch adjust them for harmonic mixing. Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + O Mixxx não vai mais procurar por novas faixas neste diretório. O que você gostaria de fazer com as faixas deste diretório e subdiretório?<ul><li>Ocultar todas as faixas deste diretório e subdiretórios.</li><li>Excluir todos os metadados para estas faixas do Mixxx permanentemente</li><li>Deixar as faixas inalteradas na sua biblioteca.</li></ul>As faixas ocultas continuarão com os metadados, no caso de você readicioná-las no futuro. Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Os metadados referem-se a todos os detalhes das faixas (artista, título, género, etc.) bem como as grelhas de batidas, hotcues e loops. Esta escolha afeta apenas a biblioteca do Mixxx. Nenhumas faixas do disco serão alteradas ou apagadas. Hide Tracks - + Ocultar Faixas Delete Track Metadata - + Apagar Metadados das Faixas Leave Tracks Unchanged - + Deixar Faixas Inalteradas @@ -6595,17 +6616,17 @@ and allows you to pitch adjust them for harmonic mixing. If removed, Mixxx will no longer watch this directory and its subdirectories for new tracks. - + Se removido, o Mixxx não vai mais poder procurar por novas faixas neste diretório e subdiretórios. Remove - + Remover Add a directory where your music is stored. Mixxx will watch this directory and its subdirectories for new tracks. - + Adicione um diretório onde sua música está guardada. O Mixxx vai procurar por novas faixas neste diretório e seus subdiretórios. @@ -6626,7 +6647,7 @@ and allows you to pitch adjust them for harmonic mixing. Relink This will re-establish the links to the audio files in the Mixxx database if you move an music directory to a new location. - + Religar @@ -6681,7 +6702,7 @@ and allows you to pitch adjust them for harmonic mixing. Library Font: - + Fonte da Biblioteca: @@ -6746,7 +6767,7 @@ and allows you to pitch adjust them for harmonic mixing. 250 px - + 250 px @@ -6771,7 +6792,7 @@ and allows you to pitch adjust them for harmonic mixing. Library Row Height: - + Altura da Linha da Biblioteca: @@ -6781,12 +6802,12 @@ and allows you to pitch adjust them for harmonic mixing. ... - + ... px - + px @@ -6811,12 +6832,12 @@ and allows you to pitch adjust them for harmonic mixing. Edit metadata after clicking selected track - + Editar metadados após clicar faixa seleccionada Search-as-you-type timeout: - + Tempo limite de procura ao escrever: @@ -6826,12 +6847,12 @@ and allows you to pitch adjust them for harmonic mixing. Load track to next available deck - + Carregar a faixa no próximo deck disponível External Libraries - + Bibliotecas Externas @@ -6866,12 +6887,12 @@ and allows you to pitch adjust them for harmonic mixing. Show Banshee Library - + Mostrar Biblioteca Banshee Show iTunes Library - + Mostrar a biblioteca iTunes @@ -6891,7 +6912,7 @@ and allows you to pitch adjust them for harmonic mixing. All external libraries shown are write protected. - + Todas as bibliotecas externas mostradas são protegidas contra escrita. @@ -6899,7 +6920,7 @@ and allows you to pitch adjust them for harmonic mixing. Crossfader Preferences - + Preferências do Crossfader @@ -6909,7 +6930,7 @@ and allows you to pitch adjust them for harmonic mixing. Slow fade/Fast cut (additive) - + Atenuação lenta/Corte rápido (aditivo) @@ -6924,7 +6945,7 @@ and allows you to pitch adjust them for harmonic mixing. Scratching - + Scratching @@ -6939,7 +6960,7 @@ and allows you to pitch adjust them for harmonic mixing. Reverse crossfader (Hamster Style) - + Crossfader Invertido (Estilo Hamster) @@ -6949,12 +6970,12 @@ and allows you to pitch adjust them for harmonic mixing. Only allow EQ knobs to control EQ-specific effects - + Apenas deixar botões de EQ controlarem efeitos de EQ Uncheck to allow any effect to be loaded into the EQ knobs. - + Desmarque para deixar qualquer efeito ser carregado para os botões de EQ @@ -6964,7 +6985,7 @@ and allows you to pitch adjust them for harmonic mixing. Uncheck to allow different decks to use different EQ effects. - + Desmarque para deixar decks usarem diferentes efeitos de EQ @@ -6984,17 +7005,17 @@ and allows you to pitch adjust them for harmonic mixing. When checked, EQs are not processed, improving performance on slower computers. - + Quando marcado, os EQs não são processados, melhorando a performance em computadores lentos. Resets the equalizers to their default values when loading a track. - + Redefine os equalizadores para os seus valores padrão ao carregar uma faixa. Reset equalizers on track load - + Redefinir os equalizadores ao carregar uma faixa @@ -7025,13 +7046,13 @@ and allows you to pitch adjust them for harmonic mixing. 16 Hz - + 16 Hz 20.05 kHz - + 20.05 kHz @@ -7054,7 +7075,7 @@ and allows you to pitch adjust them for harmonic mixing. Modplug Preferences - + Preferências Modplug @@ -7064,7 +7085,7 @@ and allows you to pitch adjust them for harmonic mixing. Show Advanced Settings - + Mostrar Configurações Avançadas @@ -7093,12 +7114,12 @@ and allows you to pitch adjust them for harmonic mixing. Bass Expansion - + Expansão de Baixos Bass Range: - + Alcance dos Graves: @@ -7138,12 +7159,12 @@ and allows you to pitch adjust them for harmonic mixing. 10ms - + 10ms 256 - + 256 @@ -7153,12 +7174,12 @@ and allows you to pitch adjust them for harmonic mixing. 100Hz - + 100Hz 250ms - + 250ms @@ -7242,7 +7263,7 @@ and allows you to pitch adjust them for harmonic mixing. Recordings directory invalid - + Diretório de gravações inválido @@ -7301,7 +7322,7 @@ and allows you to pitch adjust them for harmonic mixing. Album - + Album @@ -7492,12 +7513,12 @@ The loudness target is approximate and assumes track pregain and main output lev Network Clock - + Relógio da Rede Direct monitor (recording and broadcasting only) - + Monição direta (apenas gravação e emissão) @@ -7587,27 +7608,27 @@ The loudness target is approximate and assumes track pregain and main output lev Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + As entradas de microfone estão fora de tempo no sinal gravar e emitir comparado com o que ouve. Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Medir a latência de ida e volta e introduza-a acima para Compensação da Latência do Microfone de maneira a alinhar o tempo do microfone. Refer to the Mixxx User Manual for details. - + Consulte o Manual do Utilizador do Mixxx para detalhes. Configured latency has changed. - + A latência configurada foi alterada. Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Volta a medir a latência de ida e volta e introduza-a acima para Compensação da Latência do Microfone de maneira a alinhar o tempo do microfone. @@ -7650,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev Sample Rate - + Frequência de Amostragem @@ -7660,12 +7681,12 @@ The loudness target is approximate and assumes track pregain and main output lev Engine Clock - + Relógio Motor Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Use o relógio da placa de som para montagens com audiência ao vivo e a menor latência.<br>Use o relógio de rede para emissões sem audiência ao vivo. @@ -7680,12 +7701,12 @@ The loudness target is approximate and assumes track pregain and main output lev Microphone Monitor Mode - + Modo Monição Microfone Microphone Latency Compensation - + Compensação da Latência do Microfone @@ -7694,7 +7715,7 @@ The loudness target is approximate and assumes track pregain and main output lev ms milliseconds - + ms @@ -7709,7 +7730,7 @@ The loudness target is approximate and assumes track pregain and main output lev 0 - + 0 @@ -7841,7 +7862,7 @@ The loudness target is approximate and assumes track pregain and main output lev Vinyl Type - + Tipo do Vinil @@ -7871,7 +7892,7 @@ The loudness target is approximate and assumes track pregain and main output lev Signal Quality - + Qualidade do Sinal @@ -7904,12 +7925,12 @@ The loudness target is approximate and assumes track pregain and main output lev HSV - + HSV RGB - + RGB @@ -7978,12 +7999,12 @@ The loudness target is approximate and assumes track pregain and main output lev Normalize waveform overview - + Normaliza a visualizção da forma de onda Average frame rate - + Taxa média de fotogramas @@ -8009,7 +8030,7 @@ The loudness target is approximate and assumes track pregain and main output lev End of track warning - + Aviso de faixa acabando @@ -8019,12 +8040,12 @@ The loudness target is approximate and assumes track pregain and main output lev Highlight the waveforms when the last seconds of a track remains. - + Realçar as formas de onda quando faltam os últimos segundos da faixa. seconds - + segundos @@ -8049,7 +8070,7 @@ The loudness target is approximate and assumes track pregain and main output lev Middle - + Médios @@ -8080,7 +8101,8 @@ The loudness target is approximate and assumes track pregain and main output lev The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + A forma de onda mostra o envoltório da onda na faixa inteira. +Selecione entre tipos diferentes de visualizações da forma de onda, o que difere principalmente no nível de detalhe mostrado na forma de onda. @@ -8091,12 +8113,13 @@ Select from different types of displays for the waveform overview, which differ The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - + A forma de onda mostra o envoltório da onda na faixa junto à posição corrente de leitura. +Selecione entre tipos diferentes de visualizações da forma de onda, o que difere principalmente no nível de detalhe mostrado na forma de onda. fps - + fps @@ -8146,7 +8169,7 @@ Select from different types of displays for the waveform, which differ primarily Caching - + Caching @@ -8156,7 +8179,7 @@ Select from different types of displays for the waveform, which differ primarily Enable waveform caching - + Ativa o caching das Waveforms @@ -8166,7 +8189,7 @@ Select from different types of displays for the waveform, which differ primarily Beat grid opacity - + Opacidade da grelha de batidas @@ -8187,7 +8210,7 @@ Select from different types of displays for the waveform, which differ primarily Set amount of opacity on beat grid lines. - + Define a quantidade de opacidade das linhas da grelha de batida. @@ -8197,12 +8220,12 @@ Select from different types of displays for the waveform, which differ primarily Play marker position - + Marcador da posição de reprodução Moves the play marker position on the waveforms to the left, right or center (default). - + Move o marcador da posição de reprodução nas formas de onda para a esquerda, direita ou centro (padrão). @@ -8212,7 +8235,7 @@ Select from different types of displays for the waveform, which differ primarily Clear Cached Waveforms - + Limpar Ondas no Cache @@ -8225,7 +8248,7 @@ Select from different types of displays for the waveform, which differ primarily Controllers - + Controladores @@ -8240,22 +8263,22 @@ Select from different types of displays for the waveform, which differ primarily Waveforms - + Formas de Onda Mixer - + Mixer Auto DJ - + Auto DJ Decks - + Leitores @@ -8290,7 +8313,7 @@ Select from different types of displays for the waveform, which differ primarily &Ok Preferences standard buttons: consider the other buttons to choose a unique Alt hotkey (&) - + &Ok @@ -8310,7 +8333,7 @@ Select from different types of displays for the waveform, which differ primarily Key Detection - + Detecção de Tom @@ -8335,7 +8358,7 @@ Select from different types of displays for the waveform, which differ primarily Modplug Decoder - + Decodificador do Modplug @@ -8418,7 +8441,7 @@ Select from different types of displays for the waveform, which differ primarily Current cue color - + Cor da pista atual @@ -8466,7 +8489,7 @@ Select from different types of displays for the waveform, which differ primarily MusicBrainz - + MusicBrainz @@ -8477,13 +8500,13 @@ Select from different types of displays for the waveform, which differ primarily Track - + Faixa Year - + Ano @@ -8516,13 +8539,13 @@ Select from different types of displays for the waveform, which differ primarily Get API-Key To be able to submit audio fingerprints to the MusicBrainz database, a free application programming interface key (API key) is required. - + Obter API-Key Submit Submits audio fingerprints to the MusicBrainz database. - + Enviar @@ -8537,7 +8560,7 @@ Select from different types of displays for the waveform, which differ primarily Current Cover Art - + Capa de Álbum Atual @@ -8552,7 +8575,7 @@ Select from different types of displays for the waveform, which differ primarily Retry - + Tentar de novo @@ -8562,7 +8585,7 @@ Select from different types of displays for the waveform, which differ primarily &Next - + Segui&nte @@ -8582,12 +8605,12 @@ Select from different types of displays for the waveform, which differ primarily &Close - + &Fechar Original tags - + Etiquetas originais @@ -8602,7 +8625,7 @@ Select from different types of displays for the waveform, which differ primarily Suggested tags - + Etiquetas sugeridas @@ -8658,12 +8681,12 @@ This can not be undone! Export Tracks - + Exportar Faixas Exporting Tracks - + Exportando Faixas @@ -8711,7 +8734,7 @@ This can not be undone! Comments - + Comentários @@ -8721,7 +8744,7 @@ This can not be undone! Sets the BPM to 75% of the current value. - + Define o BPM para 75% do valor presente. @@ -8731,12 +8754,12 @@ This can not be undone! Sets the BPM to 50% of the current value. - + Define o BPM para 50% do valor atual. Displays the BPM of the selected track. - + Exibe o BPM da faixa selecionada. @@ -8751,7 +8774,7 @@ This can not be undone! Composer - + Compositor @@ -8796,7 +8819,7 @@ This can not be undone! Sets the BPM to 200% of the current value. - + Define o BPM para 200% do valor atual. @@ -8828,7 +8851,7 @@ This can not be undone! Move to the next item. "Next" button - + Move para o próximo item. @@ -8843,7 +8866,7 @@ This can not be undone! Import Metadata from MusicBrainz - + Importar Metadados de MusicBrainz @@ -8885,12 +8908,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Assume constant tempo - + Assumir tempo constante Sets the BPM to 66% of the current value. - + Define o BPM para 66% do valor atual. @@ -8900,7 +8923,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Sets the BPM to 150% of the current value. - + Define o BPM para 150% do valor atual. @@ -8910,7 +8933,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Sets the BPM to 133% of the current value. - + Define o BPM para 133% do valor atual. @@ -8947,18 +8970,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Discard changes and close the window. "Cancel" button - + Rejeita as alterações e fecha a janela. Save changes and keep the window open. "Apply" button - + Salvar as alterações e deixar a janela aberta. &Apply - + &Aplicar @@ -9327,7 +9350,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Soundtouch (faster) - + Soundtouch (mais rápido) @@ -9375,7 +9398,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Question - + Questão @@ -9383,7 +9406,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Artist - + Artista @@ -9431,7 +9454,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Album - Álbum + Album @@ -9564,7 +9587,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Safe Mode Enabled Shown when Mixxx is running in safe mode. - + Modo Segurança Ativado @@ -9580,57 +9603,57 @@ Shown when VuMeter can not be displayed. Please keep para OpenGL. - + activate activar - + toggle alternar - + right direita - + left esquerda - + right small direita (curto) - + left small esquerda (curto) - + up - + cima - + down baixo - + up small cima (curto) - + down small baixo (curto) - + Shortcut Atalho @@ -9703,22 +9726,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist - + Importar Playlist - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Listas de reprodução (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9834,7 +9857,7 @@ Do you really want to overwrite it? Your mixxxdb.sqlite file was created by a newer version of Mixxx and is incompatible. - + O seu arquivo mixxxdb.sqlite foi criado por uma versão nova do Mixxx e é incompatível. @@ -9862,7 +9885,7 @@ Do you really want to overwrite it? Tracks - + Faixas @@ -9949,18 +9972,18 @@ Do you really want to overwrite it? Exit - + Sair Mixxx was unable to open all the configured sound devices. - + Mixxx não foi capaz de abrir todos os dispositivos de som configurados. Sound Device Error - + Erro Dispositivo de Som @@ -9988,129 +10011,131 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Carregar a faixa no leitor %1 - + Deck %1 is currently playing a track. O leitor %1 está actualmente a ler uma faixa. - + Are you sure you want to load a new track? Tem a certeza de querer carregar uma nova faixa? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + Não existe nenhum dispositivo selecionado para este controlo do vinil. +Por favor, selecione primeiro um dispositivo de entrada, nas preferências de hardware de som. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + Não tem nenhum dispositivo de entrada selecionado para este controle atravessador. +Por favor selecione um dispositivo de entrada nas preferências do hardware de som primeiro. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Erro no ficheiro de tema - + The selected skin cannot be loaded. O tema seleccionado não pode ser carregado - + OpenGL Direct Rendering Processamento Direct OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Confirmar saída - + A deck is currently playing. Exit Mixxx? Um leitor está actualmente a tocar. Sair do Mixxx? - + A sampler is currently playing. Exit Mixxx? Uma amostra está actualmente a tocar. Sair do Mixxx? - + The preferences window is still open. A janela de preferências ainda está aberta. - + Discard any changes and exit Mixxx? Rejeitar quaisquer alterações e sair do Mixxx? @@ -10132,7 +10157,7 @@ Do you want to select an input device? - + Playlists Listas de reprodução @@ -10173,27 +10198,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Alguns DJs preparam listas de reprodução antes das suas actuações, mas outros preferem construi-las na altura em que estão a actuar. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Quando usa listas de reprodução durante uma actuação de DJ ao vivo, lembre-se de prestar uma atenção particular à forma como o seu público reage à música que escolheu para tocar. - + Create New Playlist Criar nova lista de reprodução @@ -10294,33 +10319,34 @@ Do you want to select an input device? Upgrading Mixxx - + Atualização Mixxx Mixxx now supports displaying cover art. Do you want to scan your library for cover files now? - + O Mixxx agora permite mostrar a capa do disco. +Deseja examinar a sua biblioteca para encontrar ficheiros de capa de disco, agora? Scan - + Examinar Later - + Depois Upgrading Mixxx from v1.9.x/1.10.x. - + Atualização do Mixxx a partir de V1.9.x/1.10.x. Mixxx has a new and improved beat detector. - + O Mixx possui um detetor de batidas novo e aperfeiçoado. @@ -10330,7 +10356,7 @@ Do you want to scan your library for cover files now? This does not affect saved cues, hotcues, playlists, or crates. - + Isto não afeta os pontos cue salvos, hotcues, listas de reprodução ou caixas. @@ -10379,7 +10405,7 @@ Do you want to scan your library for cover files now? Unknown (0x%1) - + Desconhecido (0x%1) @@ -10389,12 +10415,12 @@ Do you want to scan your library for cover files now? Invert - + Inverter Rot64 - + Rot64 @@ -10419,7 +10445,7 @@ Do you want to scan your library for cover files now? Switch - + Comutador @@ -10434,7 +10460,7 @@ Do you want to scan your library for cover files now? SelectKnob - + SelectKnob @@ -10444,7 +10470,7 @@ Do you want to scan your library for cover files now? Script - + Script @@ -10464,7 +10490,7 @@ Do you want to scan your library for cover files now? Booth - + Cabine @@ -10474,7 +10500,7 @@ Do you want to scan your library for cover files now? Left Bus - + Barramento Esquerdo @@ -10489,7 +10515,7 @@ Do you want to scan your library for cover files now? Invalid Bus - + Barramento Inválido @@ -10499,7 +10525,7 @@ Do you want to scan your library for cover files now? Record/Broadcast - + Gravar/Emitir @@ -10535,7 +10561,7 @@ Do you want to scan your library for cover files now? Mixxx Needs Access to: %1 - + Mixxx Precisa Acessar: %1 @@ -10569,7 +10595,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Bit Depth - + Profundidade de Bit @@ -10580,17 +10606,17 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Adds noise by the reducing the bit depth and sample rate - + Adiciona ruído pela redução da Profundidade de Bit e taxa de amostragem The bit depth of the samples - + A profundidade de bit das amostras Downsampling - + Decimação @@ -10600,13 +10626,13 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx The sample rate to which the signal is downsampled - + A taxa de amostragem para a qual este sinal será reduzida Echo - + Eco @@ -10614,13 +10640,13 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Time - + Tempo Ping Pong - + Pingue Pongue @@ -10628,12 +10654,12 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Send - + Enviar How much of the signal to send into the delay buffer - + Quantidade de sinal a enviar para o buffer de atraso @@ -10641,12 +10667,12 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Feedback - + Retorno Stores the input signal in a temporary buffer and outputs it after a short time - + Guarda o sinal de entrada num buffer temporário e fá-lo sair após um pequeno tempo. @@ -10654,17 +10680,19 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Delay time 1/8 - 2 beats if tempo is detected 1/8 - 2 seconds if no tempo is detected - + Tempo de atraso +1/8 - 2 batidas se o BPM tiver sido detetado +1/8 - 2 segundos se o BPM não tiver sido detetado Amount the echo fades each time it loops - + Quantidade de eco que desaparece cada vez que loopa How much the echoed sound bounces between the left and right sides of the stereo field - + Quanto do sinal ecoado ressalta entre os os lados esquerdo e direito do campo estéreo @@ -10679,7 +10707,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Round the Time parameter to the nearest 1/4 beat. - + Arredonda o parâmetro Tempo para o 1/4 de batida mais próxima. @@ -10692,28 +10720,28 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Triplets - + Triplets When the Quantize parameter is enabled, divide rounded 1/4 beats of Time parameter by 3. - + Quando o parâmetro Quantização está ativo, divide o parâmetro Tempo arredondado a 1/4 de batida, por 3. Filter - + Filtro Allows only high or low frequencies to play. - + Permite tocar apenas as altas ou baixas frequências. Low Pass Filter Cutoff - + Corte Filtro Passa Baixo @@ -10725,7 +10753,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Corner frequency ratio of the low pass filter - + Frequência de corte do filtro passa baixo @@ -10736,12 +10764,13 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Resonance of the filters Default: flat top - + Ressonancia dos filtros +Padrão: Topo plano High Pass Filter Cutoff - + Corte Filtro Passa Alto @@ -10753,7 +10782,7 @@ Default: flat top Corner frequency ratio of the high pass filter - + Frequência de corte do filtro passa alto @@ -10761,7 +10790,7 @@ Default: flat top Depth - + Profundidade @@ -10773,7 +10802,7 @@ Default: flat top Speed - + Velocidade @@ -10784,58 +10813,61 @@ Default: flat top Mixes the input with a delayed, pitch modulated copy of itself to create comb filtering - + Mistura a entrada com uma cópia de si mesma, atrasada e modulada em tonalidade para criar uma filtragem pente Speed of the LFO (low frequency oscillator) 32 - 1/4 beats rounded to 1/2 beat per LFO cycle if tempo is detected 1/32 - 4 Hz if no tempo is detected - + Velocidade do LFO (oscilador de baixa frequência) +32 - 1/4 batidas arredondadas para 1/2 batida por ciclo LFO se o BPM tiver sido detetado +1/32 - 4 Hz se o BPM não tiver sido detetado Delay amplitude of the LFO (low frequency oscillator) - + Amplitude do atraso do LFO (oscilador de baixa frequência). Delay offset of the LFO (low frequency oscillator). With width at zero, this allows for manually sweeping over the entire delay range. - + Alinhamento do atraso do LFO (oscilador de baixa frequência). +Com a largura a zero, permite o varrimento manual ao longo de toda a extensão do atraso. Regeneration - + Regeneração Regen - + Regerar How much of the delay output is feed back into the input - + Quantidade da saída atrasada que é retornada para a entrada Intensity of the effect - + Intensidade do efeito Divide rounded 1/2 beats of the Period parameter by 3. - + Divide o parâmetro Período, arredondado a 1/2 batidas, por 3. Mix - + Mistura @@ -10845,12 +10877,12 @@ With width at zero, this allows for manually sweeping over the entire delay rang Width - + Largura Metronome - + Metrónomo @@ -10860,7 +10892,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Adds a metronome click sound to the stream - + Adiciona o som dum clique de metrónomo à stream @@ -10870,7 +10902,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Set the beats per minute value of the click sound - + Define o valor do bpm do som do clique @@ -10880,7 +10912,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Synchronizes the BPM with the track if it can be retrieved - + Sincroniza o BPM com a faixa, se este puder ser obtido @@ -10898,7 +10930,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Period - + Período @@ -10909,34 +10941,36 @@ With width at zero, this allows for manually sweeping over the entire delay rang Bounce the sound left and right across the stereo field - + Balança o som entre a esquerda e direita ao longo do campo estéreo How fast the sound goes from one side to another 1/4 - 4 beats rounded to 1/2 beat if tempo is detected 1/4 - 4 seconds if no tempo is detected - + Velocidade com que o sinal vai dum lado para o outro +1/4 - 4 batidas arredondado para 1/2 batidas se o BPM tiver sido detetado +1/4 - 4 segundos se o BPM não tiver sido detetado Smoothing - + Suavização Smooth - + Suave How smoothly the signal goes from one side to the other - + Suavidade com que o sinal vai de um lado para o outro How far the signal goes to each side - + Até onde o sinal vai em cada lado @@ -10946,34 +10980,35 @@ With width at zero, this allows for manually sweeping over the entire delay rang Emulates the sound of the signal bouncing off the walls of a room - + Simula o som do sinal sendo refletido nas paredes duma sala Decay - + Declínio Lower decay values cause reverberations to fade out more quickly. - + Valores de declínio baixos causam o desvanecimento das reverberações mais rápido. Bandwidth of the low pass filter at the input. Higher values result in less attenuation of high frequencies. - + Largura de banda do filtro passa baixo na entrada. +Valores mais altos resultam em menos atenuação das altas frequências. How much of the signal to send in to the effect - + Quantidade do sinal a enviar para o efeito Bandwidth - + Largura de Banda @@ -10984,12 +11019,12 @@ Higher values result in less attenuation of high frequencies. Damping - + Amortecimento Higher damping values cause high frequencies to decay more quickly than low frequencies. - + Valores maiores de amortecimento fazem com que frequências altas morram mais rápido do que frequências baixas. @@ -11018,7 +11053,7 @@ Higher values result in less attenuation of high frequencies. Mid - + Médios @@ -11038,7 +11073,7 @@ Higher values result in less attenuation of high frequencies. Gain for Mid Filter - + Ganho para Filtro Médio @@ -11069,7 +11104,7 @@ Higher values result in less attenuation of high frequencies. Kill the High Filter - + Matar o Filtro Agudo @@ -11084,32 +11119,32 @@ Higher values result in less attenuation of high frequencies. Graphic EQ - + EQ Gráfico An 8-band graphic equalizer based on biquad filters - + Um equalizador gráfico de 8 bandas baseado em filtros biquad Gain for Band Filter %1 - + Ganho para o Filtro de Banda %1 Moog Ladder 4 Filter - + Filtro Moog Ladder 4 Moog Filter - + Filtro Moog A 4-pole Moog ladder filter, based on Antti Houvilainen's non linear digital implementation - + Um filtro Moog ladder de 4 polos, baseado na implementação digital não linear de Antti Houvilainen @@ -11120,17 +11155,17 @@ Higher values result in less attenuation of high frequencies. Resonance - + Ressonância Resonance of the filters. 4 = self oscillating - + Ressonância dos filtros. 4 = auto oscilante Gain for Low Filter (neutral at 1.0) - + Ganho para Filtro de Baixos (neutro a 1.0) @@ -11153,24 +11188,26 @@ Higher values result in less attenuation of high frequencies. Stages - + Estágios Mixes the input signal with a copy passed through a series of all-pass filters to create comb filtering - + Mistura o sinal de entrada com uma cópia passada através de uma série de filtros para criar uma filtragem em pente Period of the LFO (low frequency oscillator) 1/4 - 4 beats rounded to 1/2 beat if tempo is detected 1/4 - 4 seconds if no tempo is detected - + Período do LFO (oscilador de baixa frequência) +1/4 - 4 batidas arrendondadas a 1/2 batida se o BPM tiver sido detetado +1/4 - 4 segundos se o BPM não tiver sido detetado Controls how much of the output signal is looped - + Controla o quanto do sinal da saída é repetido @@ -11178,27 +11215,27 @@ Higher values result in less attenuation of high frequencies. Range - + Extensão Controls the frequency range across which the notches sweep. - + Controla a faixa de frequências que o filtro elimina banda vai atuar. Number of stages - + Número de estágios Sets the LFOs (low frequency oscillators) for the left and right channels out of phase with each others - + Define os LFOs (osciladores de baixa frequência) para os canais esquerdo e direito, desfasados uns com os outros %1 minutes - + %1 minutos @@ -11218,12 +11255,12 @@ Higher values result in less attenuation of high frequencies. Ctrl+u - + Ctrl+u Ctrl+i - + Ctrl+i @@ -11233,7 +11270,7 @@ Higher values result in less attenuation of high frequencies. Ctrl+Shift+O - + Ctrl+Shift+O @@ -11258,12 +11295,12 @@ Higher values result in less attenuation of high frequencies. A Bessel 8th-order filter isolator with Lipshitz and Vanderkooy mix (bit perfect unity, roll-off -48 dB/octave). - + Um filtro isolador Bessel de 8ª ordem com mixagem Lipshitz e Vanderkooy (unidade perfeita bit a bit, com roll-off de -48db/oitava). LinkwitzRiley8 Isolator - + LinkwitzRiley8 Isolator @@ -11273,7 +11310,7 @@ Higher values result in less attenuation of high frequencies. A Linkwitz-Riley 8th-order filter isolator (optimized crossover, constant phase shift, roll-off -48 dB/octave). - + Um filtro isolador Linkwitz-Riley de 8ª order (crossover otimizado, mudança de fase constante, com roll-off de -48 dB/oitava). @@ -11283,7 +11320,7 @@ Higher values result in less attenuation of high frequencies. BQ EQ - + BQ EQ @@ -11293,7 +11330,7 @@ Higher values result in less attenuation of high frequencies. Device not found - + Dispositivo não encontrado @@ -11303,7 +11340,7 @@ Higher values result in less attenuation of high frequencies. BQ EQ/ISO - + BQ EQ/ISO @@ -11313,7 +11350,7 @@ Higher values result in less attenuation of high frequencies. Loudness Contour - + Curva de Loudness @@ -11325,33 +11362,33 @@ Higher values result in less attenuation of high frequencies. Amplifies low and high frequencies at low volumes to compensate for reduced sensitivity of the human ear. - + Amplifica frequências altas e baixas em volumes baixos para compensar pela sensitividade reduzida do ouvido humano. Set the gain of the applied loudness contour - + Define o ganho da curva de loudness aplicada Use Gain - + Usar Ganho Follow Gain Knob - + Seguir Botão de Ganho This stream is online for testing purposes! - + Esta stream está online para teste! Live Mix - + Mixagem Ao Vivo @@ -11369,18 +11406,18 @@ Higher values result in less attenuation of high frequencies. Bit depth - + Profundidade de bit Bitrate Mode - + Modo da Taxa de Bits 32 bits float - + 32 bits flutuante @@ -11392,33 +11429,33 @@ Higher values result in less attenuation of high frequencies. Adjust the left/right balance and stereo width - + Ajusta o balanço esquerda/direita e a largura estéreo Adjust balance between left and right channels - + Ajusta o balanço entre os canais esquerdo e direito Mid/Side - + Centro/Lado Bypass Fr. - + Ignorar Fr. Bypass Frequency - + Ignorar Frequência Stereo Balance - + Balanço Estéreo @@ -11426,22 +11463,25 @@ Higher values result in less attenuation of high frequencies. Fully left: mono Fully right: only side ambiance Center: does not change the original signal. - + Ajusta a amplitude estéreo alterando o balanço do sinal entre centro e lado. +Tudo esquerda: mono +Tudo direita: apenas o lado ambiente +Centro: não altera o sinal original. Frequencies below this cutoff are not adjusted in the stereo field - + As frequências abaixo deste ponto de corte não são ajustadas no campo estéreo Parametric Equalizer - + Equalizador Paramétrico Param EQ - + EQ Param @@ -11453,71 +11493,75 @@ It is designed as a complement to the steep mixing equalizers. Gain 1 - + Ganho 1 Gain for Filter 1 - + Ganho para o Filtro 1 Q 1 - + Q 1 Controls the bandwidth of Filter 1. A lower Q affects a wider band of frequencies, a higher Q affects a narrower band of frequencies. - + Controla a largura de banda do Filtro 1. +Um Q mais baixo afecta uma banda mais larga de frequências, +um Q mais alto afecta uma banda mais estreita de frequências. Center 1 - + Centro 1 Center frequency for Filter 1, from 100 Hz to 14 kHz - + Frequência central para o Filtro 1, de 100 Hz a 14 kHz Gain 2 - + Ganho 2 Gain for Filter 2 - + Ganho para o Filtro 2 Q 2 - + Q 2 Controls the bandwidth of Filter 2. A lower Q affects a wider band of frequencies, a higher Q affects a narrower band of frequencies. - + Controla a largura de banda do Filtro 2. +Um Q mais baixo afecta uma banda mais larga de frequências, +um Q mais alto afecta uma banda mais estreita de frequências. Center 2 - + Centro 2 Center frequency for Filter 2, from 100 Hz to 14 kHz - + Frequência central para o Filtro 2, de 100 Hz a 14 kHz @@ -11528,72 +11572,79 @@ a higher Q affects a narrower band of frequencies. Cycles the volume up and down - + Sobe e desce o volume num ciclo How much the effect changes the volume - + Até que ponto o efeito altera o volume Rate - + Taxa Rate of the volume changes 4 beats - 1/8 beat if tempo is detected 1/4 Hz - 8 Hz if no tempo is detected - + Taxa das alterações do volume +4 batidas - 1/8 batida se o BPM tiver sido detetado +1/4 Hz - 8 Hz se o BPM não tiver sido detetado Width of the volume peak 10% - 90% of the effect period - + Largura do pico de volume +10% - 90% do período do efeito Shape of the volume modulation wave Fully left: Square wave Fully right: Sine wave - + Forma da onda de modulação do volume +Tudo esquerda: Onda quadrada +Tudo direita: Onda sinusoidal When the Quantize parameter is enabled, divide the effect period by 3. - + Quando o parâmetro Quantização está ativo, divide o período do efeito por 3. Waveform - + Forma de Onda Phase - + Fase Shifts the position of the volume peak within the period Fully left: beginning of the effect period Fully right: end of the effect period - + Desloca a posição do pico de volume dentro do período +Tudo esquerda: início do período do efeito +Tudo direita: fim do período do efeito Round the Rate parameter to the nearest whole division of a beat. - + Aproxima o parâmetro Taxa à divisão inteira mais próxima de uma batida. Triplet - + Terceto @@ -11817,7 +11868,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Passagem @@ -12074,7 +12125,7 @@ may introduce a 'pumping' effect and/or distortion. Low Disk Space Warning - + Aviso de Pouco Espaço em Disco @@ -12089,17 +12140,17 @@ may introduce a 'pumping' effect and/or distortion. Could not create audio file for recording! - + Não foi possível criar o arquivo de áudio para a gravação! Ensure there is enough free disk space and you have write permission for the Recordings folder. - + Certifique-se de que há espaço livre suficiente em disco e que você tem permissão para salvar arquivos na sua pasta de gravações. You can change the location of the Recordings folder in Preferences -> Recording. - + Pode alterar o local da pasta Gravações em Preferências -> Gravação. @@ -12158,7 +12209,7 @@ may introduce a 'pumping' effect and/or distortion. Memory cues - + Cues de memória @@ -12390,22 +12441,22 @@ may introduce a 'pumping' effect and/or distortion. Error setting stream IRC! - + Erro a definir a stream IRC! Error setting stream AIM! - + Erro a definir a stream AIM! Error setting stream ICQ! - + Erro a definir a stream ICQ! Error setting stream public! - + Erro ao tornar a stream pública! @@ -12460,27 +12511,27 @@ may introduce a 'pumping' effect and/or distortion. Network cache overflow - + Overflow do cache da rede Connection error - + Erro de ligação One of the Live Broadcasting connections raised this error:<br><b>Error with connection '%1':</b><br> - + Uma das ligações de Emissão em Direto apresentou este erro:<br><b>Erro com a ligação '%1':</b><br> Connection message - + Mensagem da ligação <b>Message from Live Broadcasting connection '%1':</b><br> - + <b>Mensagem da ligação Emissão em Direto '%1':</b><br> @@ -12490,17 +12541,17 @@ may introduce a 'pumping' effect and/or distortion. Lost connection to streaming server. - + A conexão com o servidor de streaming foi perdida. Please check your connection to the Internet. - + Por favor, verifique a sua conecção à internet. Can't connect to streaming server - + Não se consegue ligar ao servidor de streaming. @@ -12513,7 +12564,7 @@ may introduce a 'pumping' effect and/or distortion. Filtered - + Filtrado @@ -12532,12 +12583,12 @@ may introduce a 'pumping' effect and/or distortion. Two outputs cannot share channels on "%1" - + Duas saídas não podem compartilhar o canal "%1" Error opening "%1" - + Erro abrindo "%1" @@ -12550,7 +12601,7 @@ may introduce a 'pumping' effect and/or distortion. Count - + Contagem @@ -12565,7 +12616,7 @@ may introduce a 'pumping' effect and/or distortion. Sum - + Soma @@ -12590,7 +12641,7 @@ may introduce a 'pumping' effect and/or distortion. Standard Deviation - + Desvio Padrão @@ -12661,7 +12712,7 @@ may introduce a 'pumping' effect and/or distortion. loop active - + loop ativo @@ -12671,7 +12722,7 @@ may introduce a 'pumping' effect and/or distortion. Effects within the chain must be enabled to hear them. - + Os efeitos dentro da cadeia devem estar ativados para serem ouvidos. @@ -12701,12 +12752,12 @@ may introduce a 'pumping' effect and/or distortion. Scroll to change the waveform zoom level. - + Role para modificar o zoom das ondas. Waveform Zoom Out - + Reduzir Forma de Onda @@ -12732,7 +12783,7 @@ may introduce a 'pumping' effect and/or distortion. Right click to show cover art of loaded track. - + Clique direito para mostrar a capa do disco da faixa carregada. @@ -12747,7 +12798,7 @@ may introduce a 'pumping' effect and/or distortion. (too loud for the hardware and is being distorted). - + (Muito forte para o hardware e a ser distorcido) @@ -12792,7 +12843,7 @@ may introduce a 'pumping' effect and/or distortion. Indicates when the signal on the auxiliary is clipping, - + Indica quando o sinal auxiliar está clipando. @@ -12802,22 +12853,22 @@ may introduce a 'pumping' effect and/or distortion. Adjusts the volume of the selected channel. - + Ajusta o volume do canal seleccionado. Booth Gain - + Ganho Cabine Adjusts the booth output gain. - + Ajusta o ganho de saída para a cabine. Crossfader - + Crossfader @@ -12837,12 +12888,12 @@ may introduce a 'pumping' effect and/or distortion. Headphone Gain - + Ganho do Fone Adjusts the headphone output gain. - + Ajusta o ganho da saída do fone. @@ -12857,12 +12908,12 @@ may introduce a 'pumping' effect and/or distortion. Adjust the Headphone Mix so in the left channel is not the pure cueing signal. - + Ajusta a Mistura do Auscultador de maneira que no canal esquerdo não está só o sinal puro de escuta. Microphone - + Microfone @@ -12882,7 +12933,7 @@ may introduce a 'pumping' effect and/or distortion. Vinyl Control - + Controlo Vinilo @@ -12909,12 +12960,12 @@ may introduce a 'pumping' effect and/or distortion. Show/hide Cover Art. - + Mostrar/ocultar Capa de Disco Toggle 4 Decks - + Ligar/Desligar 4 Decks @@ -12924,32 +12975,32 @@ may introduce a 'pumping' effect and/or distortion. Show Library - + Mostrar Biblioteca Show or hide the track library. - + Mostra ou oculta a biblioteca da faixa. Show Effects - + Mostrar Efeitos Show or hide the effects. - + Mostra ou oculta os efeitos. Toggle Mixer - + Alternar Misturador Show or hide the mixer. - + Mostra ou oculta o misturador. @@ -12974,7 +13025,7 @@ may introduce a 'pumping' effect and/or distortion. Adjusts the pre-fader microphone gain. - + Ajusta o ganho do microfone antes do controlador de transições. @@ -12999,27 +13050,27 @@ may introduce a 'pumping' effect and/or distortion. Microphone Talkover Mode - + Microfone Modo Talkover Off: Do not reduce music volume - + Desligado: Não reduza o volume da música Manual: Reduce music volume by a fixed amount set by the Strength knob. - + Manual: Reduz o volume de música de um valor fixo definido pelo botão Strenght. Behavior depends on Microphone Talkover Mode: - + O comportamento depende do Modo Talkover Microfone: Off: Does nothing - + Desligado: Faz nada @@ -13099,7 +13150,7 @@ may introduce a 'pumping' effect and/or distortion. Tempo - + Tempo @@ -13125,7 +13176,7 @@ may introduce a 'pumping' effect and/or distortion. When tapped, adjusts the average BPM down by a small amount. - + Quando pressionado, diminui um pouco o BPM médio. @@ -13135,12 +13186,12 @@ may introduce a 'pumping' effect and/or distortion. When tapped, adjusts the average BPM up by a small amount. - + Quando pressionado, aumenta um pouco o BPM médio. Adjust Beats Earlier - + Ajustar Batidas Cedo @@ -13150,12 +13201,12 @@ may introduce a 'pumping' effect and/or distortion. Adjust Beats Later - + Adiantar Grade de Batidas When tapped, moves the beatgrid right by a small amount. - + Quando batido, move a grelha de batidas para a direita, uma pequena quantidade. @@ -13165,7 +13216,7 @@ may introduce a 'pumping' effect and/or distortion. Show/hide the spinning vinyl section. - + Mostrar/ocultar a secção do Vinilo em Rotação @@ -13190,7 +13241,7 @@ may introduce a 'pumping' effect and/or distortion. Toggle visibility of Rate Control - + Alterna a visibilidade do Controlo da Taxa @@ -13210,7 +13261,7 @@ may introduce a 'pumping' effect and/or distortion. Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Pára a faixa no CUE Point, OU vai para o CUE Point e reproduz a faixa após soltar o botão (CUP mode). @@ -13235,7 +13286,7 @@ may introduce a 'pumping' effect and/or distortion. Plays track from the cue point. - + Toca a faixa a partir do ponto de marcação. @@ -13275,7 +13326,7 @@ may introduce a 'pumping' effect and/or distortion. Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Altera a velocidade da faixa (afeta o tempo e o pitch). Se o keylock estiver ativo, apenas o tempo é alterado. @@ -13285,7 +13336,7 @@ may introduce a 'pumping' effect and/or distortion. Displays the current range of the tempo slider. - + Mostra o alcance atual do deslizante de tempo. @@ -13330,7 +13381,7 @@ may introduce a 'pumping' effect and/or distortion. Recording Duration - + Duração da Gravação @@ -13478,7 +13529,7 @@ may introduce a 'pumping' effect and/or distortion. Auto: Sets how much to reduce the music volume when the volume of active microphones rises above threshold. - + Auto: Define o quanto reduzir o volume da música quando o volume de microfones ativos passa de um determinado limite. @@ -13708,32 +13759,32 @@ tracks with constant tempo. Sets the track Loop-In Marker to the current play position. - + Define o marcador Início Loop da faixa para a atual posição de reprodução. Press and hold to move Loop-In Marker. - + Pressione e mantenha para mover o marcador Início Loop. Jump to Loop-In Marker. - + Saltar para o marcador Início Loop. Sets the track Loop-Out Marker to the current play position. - + Define o marcador Fim Loop para a atual posição de reprodução. Press and hold to move Loop-Out Marker. - + Pressione e mantenha para mover o marcador Fim Loop. Jump to Loop-Out Marker. - + Saltar para o marcador Fim Loop. @@ -13743,37 +13794,37 @@ tracks with constant tempo. Beatloop Size - + Tamanho do Loop de Batidas Select the size of the loop in beats to set with the Beatloop button. - + Escolher o tamanho do loop em batidas estabelecer com o botão Loop. Changing this resizes the loop if the loop already matches this size. - + Alterando isto redimensiona o loop se o loop já coincide com este tamanho. Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Reduz a metade o tamanho dum loop existente, ou reduz a metade o tamanho do próximo loop definido com o botão Loop. Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Duplica o tamanho dum loop existente, ou duplica o tamanho do próximo loop definido com o botão Loop. Start a loop over the set number of beats. - + Iniciar um loop com o número de batidas prédefinidas. Temporarily enable a rolling loop over the set number of beats. - + Ativa temporariamente um loop de rolamento sobre o número de batidas selecionado. @@ -13788,87 +13839,87 @@ tracks with constant tempo. Beatjump/Loop Move Size - + Beatjump/Loop Tamanho Movimento Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Selecione o número de batidas a saltar ou a deslocar o loop com os botões Beatjump Frente/Atrás. Beatjump Forward - + Beatjump Frente Jump forward by the set number of beats. - + Salta para a frente o número de batidas predefinidas. Move the loop forward by the set number of beats. - + Move o loop para a frente o número de batidas prédefinidas. Jump forward by 1 beat. - + Salta para a frente 1 batida. Move the loop forward by 1 beat. - + Move o loop para a frente 1 batida. Beatjump Backward - + Beatjump Atrás Jump backward by the set number of beats. - + Salta para trás o número de batidas prédefinidas. Move the loop backward by the set number of beats. - + Move o loop para trás o número de batidas prédefinidas. Jump backward by 1 beat. - + Salta para trás 1 batida. Move the loop backward by 1 beat. - + Move o loop para trás 1 batida. Reloop - + Reloop If the loop is ahead of the current position, looping will start when the loop is reached. - + Se o loop estiver à frente da posição atual de reprodução, o ciclo de looping começará quando o loop for atingido. Works only if Loop-In and Loop-Out Marker are set. - + Funciona apenas se os marcadores de Início Loop e Fim Loop estiverem definidos. Enable loop, jump to Loop-In Marker, and stop playback. - + Ativar loop, saltar para o marcador Início Loop, e parar a reprodução. Displays the elapsed and/or remaining time of the track loaded. - + Mostra o tempo executado e/ou restante da faixa carregada. @@ -13932,44 +13983,46 @@ tracks with constant tempo. Mix - + Mistura Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + Ajustar a mistura do sinal seco (entrada) com o molhado (saída) da unidade de efeito D/W mode: Crossfade between dry and wet - + Modo S/M: crossfade entre seco e molhado D+W mode: Add wet to dry - + Modo S/M: adicionar molhado ao seco Mix Mode - + Modo Mistura Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Ajustar a mistura do sinal seco (entrada) com o sinal molhado (saída) da unidade de efeito Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Modo Seco/Molhado (linhas cruzadas): o botão de Mistura faz a transição entre seco e molhado. +Usar isto para alterar o som da faixa com EQ e filtros de efeitos. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Modo Seco+Molhado (linha seca plana): o botão de Mistura adiciona o molhado ao seco. +Usar isto para alterar apenas o sinal já com os efeitos (molhado) de EQ e filtros de efeitos. @@ -13979,17 +14032,17 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Route the left crossfader bus through this effect unit. - + Envia o bus esquerdo do crossfader através desta unidade de efeito. Route the right crossfader bus through this effect unit. - + Envia o bus direito do crossfader através desta unidade de efeito. Right side active: parameter moves with right half of Meta Knob turn - + Lado direito ativo: o parâmetro muda com meia volta para a direita do Botão Meta @@ -14034,22 +14087,22 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Skin Settings Menu - + Menu Definições Skin Show/hide skin settings menu - + Mostra/Oculta menu de definições. Save Sampler Bank - + Guardar o Banco do Sampler Save the collection of samples loaded in the samplers. - + Guarda a colecção de samples carregadas nos samplers. @@ -14059,7 +14112,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Load a previously saved collection of samples into the samplers. - + Carrega uma colecção de samples guardada previamente nos samplers. @@ -14069,32 +14122,32 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Enable Effect - + Ativar Efeito Meta Knob Link - + Ligação Botão Meta Set how this parameter is linked to the effect's Meta Knob. - + Definir como este parâmetro está ligado ao botão de efeitos Meta. Meta Knob Link Inversion - + Vínculo inverso do Botão Meta Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Inverte a direção que este parâmetro se move quando rodando o efeito do Botão Meta Super Knob - + Super Botão @@ -14104,32 +14157,32 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Previous Chain - + Cadeia Anterior Next/Previous Chain - + Corrente Seguinte/Anterior Clear - + Limpar Clear the current effect. - + Limpa o efeito atual. Toggle - + Ligar/Desligar Toggle the current effect. - + Liga/Desliga o efeito atual. @@ -14139,7 +14192,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Clear Unit - + Limpar Unidade @@ -14149,37 +14202,37 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Show/hide parameters for effects in this unit. - + Mostra/Oculta parâmetros para efeitos nesta unidade. Toggle Unit - + Ligar/Desligar Unidade Enable or disable this whole effect unit. - + Ativa ou desativa esta unidade completa de efeito. Controls the Meta Knob of all effects in this unit together. - + Controla o Meta Botão de todos os efeitos conjuntamente nesta unidade. Load next effect chain preset into this effect unit. - + Carrega a próxima cadeia de efeitos prédefinida nesta unidade de efeito. Load previous effect chain preset into this effect unit. - + Carrega a anterior cadeia de efeitos prédefinida nesta unidade de efeito. Load next or previous effect chain preset into this effect unit. - + Carrega a próxima ou anterior cadeia de efeitos prédefinida nesta unidade de efeito. @@ -14192,47 +14245,47 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Assign Effect Unit - + Atribuir Unidade de Efeito Assign this effect unit to the channel output. - + Atribuir esta unidade de efeito ao canal de saída. Route the headphone channel through this effect unit. - + Encaminha o canal de auscultadores através desta unidade de efeito. Route this deck through the indicated effect unit. - + Encaminha este deck através da unidade de efeito indicada. Route this sampler through the indicated effect unit. - + Encaminha este sampler através da unidade de efeito indicada. Route this microphone through the indicated effect unit. - + Encaminha este microfone através da unidade de efeito indicada. Route this auxiliary input through the indicated effect unit. - + Encaminha esta entrada auxiliar através da unidade de efeito indicada. The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Esta unidade de efeito deve também ser atribuída a um leitor ou a outra fonte sonora para ouvir o efeito. Switch to the next effect. - + Troca para o próximo efeito. @@ -14247,27 +14300,27 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Next or Previous - + Próximo ou Anterior Switch to either the next or previous effect. - + Troca para o efeito seguinte ou anterior. Meta Knob - + Botão Meta Controls linked parameters of this effect - + Controla os parâmetros deste efeito aqui ligado. Effect Focus Button - + Botão de Foco do Efeito @@ -14277,42 +14330,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Unfocuses this effect. - + Anula o realce deste efeito. Refer to the web page on the Mixxx wiki for your controller for more information. - + Acesse a página web do seu controlador na wiki do Mixxx para mais informações. Effect Parameter - + Parâmetro Efeito Adjusts a parameter of the effect. - + Ajusta um parâmetro do efeito. Inactive: parameter not linked - + Inativo: parâmetro não ligado Active: parameter moves with Meta Knob - + Activo: o parâmetro move-se com o Botão Meta Left side active: parameter moves with left half of Meta Knob turn - + Lado esquerdo ativo: o parâmetro move-se com meia volta para a esquerda do Botão Meta Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - + Lado esquerdo e direito ativo: o parâmetro desloca-se ao longo da sua extensão com meia volta do Botão Meta e para trás com a outra meia volta. @@ -14324,7 +14377,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Holds the gain of the EQ to zero while active. - + Mantem o ganho do equalizador em zero quanto ativo. @@ -14334,22 +14387,22 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Quick Effect Super Knob (control linked effect parameters). - + Super Botão de Efeito Rápido (controla parâmetros de efeitos conectados). Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Sugestão: Alterar o modo Efeito Rápido padrão em Preferências -> Equalizadores. Equalizer Parameter - + Parâmetro do Equalizador Adjusts the gain of the EQ filter. - + Ajusta o ganho do filtro EQ. @@ -14365,13 +14418,13 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Adjust beatgrid so the closest beat is aligned with the current play position. - + Ajustar a grelha ritmica para que o tempo mais próximo seja alinhado com a posição corrente do cursor. Adjust beatgrid to match another playing deck. - + Ajusta a grade de batidas para combinar com outro deck tocando. @@ -14411,19 +14464,19 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Playback continues where the track would have been if it had not been temporarily reversed. - + A reprodução continua onde a faixa estaria se ela não estivesse sido temporariamente invertida. Play/Pause - + Leitura/Pausa Jumps to the beginning of the track. - + Salta para o início da faixa @@ -14433,17 +14486,17 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sincroniza o tempo (BPM) com o da outra faixa, se o BPM for detetado em ambas. Sync and Reset Key - + Sincronizar e Reiniciar Tom Increases the pitch by one semitone. - + Aumenta a tonalidade de um meio tom. @@ -14453,12 +14506,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Enable Vinyl Control - + Ativar Controle por Vini When disabled, the track is controlled by Mixxx playback controls. - + Quando desativado, a faixa é controlada pelos controles de reprodução do Mixxx. @@ -14468,7 +14521,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Enable Passthrough - + Ativar Passthrough @@ -14478,27 +14531,27 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Displays cover artwork of the loaded track. - + Mostra a arte da capa da faixa carregada. Displays options for editing cover artwork. - + Mostra as opções para edição da capa do disco. Star Rating - + Classificação de Estrela Assign ratings to individual tracks by clicking the stars. - + Atribui classificações a faixas individuais clicando nas estrelas. Channel Peak Indicator - + Indicador de Pico de Canal @@ -14538,7 +14591,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Channel R Peak Indicator - + Indicador de Pico do Canal D @@ -14548,12 +14601,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Channel L Volume Meter - + Volume do Canal E Shows the current channel volume for the left channel. - + Mostra o volume atual do canal para o lado esquerdo. @@ -14568,7 +14621,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Microphone Peak Indicator - + Indicador de Pico do Microfone @@ -14608,7 +14661,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Preview Deck Peak Indicator - + Indicador de Pico do Leitor de Antevisão @@ -14618,22 +14671,22 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Maximize Library - + Maximizar Biblioteca Microphone Talkover Ducking Strength - + Amplitude da Redução no Talkover Prevents the pitch from changing when the rate changes. - + Previne que o tom mude com as mudanças na taxa do pitch. Changes the number of hotcue buttons displayed in the deck - + Altera o número de botões hotcue mostrados no leitor @@ -14694,7 +14747,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Old Synchronize - + Sincronização Antiga @@ -14714,39 +14767,39 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Hold for at least a second to enable sync lock for this deck. - + Manter premido, por pelo menos um segundo, para ativar o bloqueio de sincronização para este leitor. Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Decks com trava de sincronização vão tocar no mesmo tempo, e os decks que também tem quantização ativada vão sempre ter suas batidas alinhadas. Resets the key to the original track key. - + Reinicia o tom, para o tom original da faixa. Speed Control - + Controle de Velocidade Changes the track pitch independent of the tempo. - + Muda o pitch da faixa independentemente do tempo. Increases the pitch by 10 cents. - + Aumenta o pitch por 10 cents. Decreases the pitch by 10 cents. - + Diminui o pitch por 10 cents. @@ -14756,7 +14809,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Adjust the pitch in addition to the speed slider pitch. - + Ajusta o pitch junto com o deslizante de velocidade pitch. @@ -14781,17 +14834,17 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Toggle mix recording. - + Ativa/Desativa gravação da mixagem. Enable Live Broadcasting - + Ativar Emissão em Direto Stream your mix over the Internet. - + Transmite sua mixagem pela Internet. @@ -14806,7 +14859,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. When enabled, the deck directly plays the audio arriving on the vinyl input. - + Quando ativada, o leitor toca o audio que chega diretamente à entrada do vinil. @@ -14847,7 +14900,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Displays the musical key of the loaded track. - + Mostra o tom musical da faixa carregada. @@ -14862,27 +14915,27 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Audio Latency Usage Meter - + Uso da Latência de Áudio Displays the fraction of latency used for audio processing. - + Mostra a fração da latência usada no processamento de audio. A high value indicates that audible glitches are likely. - + Um valor alto indica que ruídos no áudio são prováveis. Do not enable keylock, effects or additional decks in this situation. - + Não ative a trava de tom, efeitos ou decks adicionais nessa situação. Audio Latency Overload Indicator - + Indicador de Sobrecarga de Latência Audio @@ -14892,7 +14945,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Drop tracks from library, external file manager, or other decks/samplers here. - + Largar faixas da biblioteca, gestor de ficheiros exterior, ou outros leitores/samplers aqui. @@ -14902,17 +14955,17 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Crossfader Orientation - + Orientação Crossfader Set the channel's crossfader orientation. - + Define a orientação do crossfader entre canais. Either to the left side of crossfader, to the right side or to the center (unaffected by crossfader) - + Quer para o lado esquerdo do crossfader, ou para o lado direito, ou para o centro (não afetada pelo crossfader) @@ -14922,7 +14975,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Displays the current musical key of the loaded track after pitch shifting. - + Mostra o tom musical corrente da faixa carregada, após movimentação do cursor de velocidade/tom. @@ -14952,7 +15005,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - + Define a tonalidade para um tom que permita uma transição harmónica para outra faixa. Requer ter sido detetado um tom em ambos os leitores envolvidos. @@ -15182,12 +15235,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Hiding tracks - + Ocultar faixas The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? - + As faixas selecionadas estão na seguintes playlists: %1 Ocultando-as serão removidas destas playlists. Continuar? @@ -15195,7 +15248,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Export finished - + Exportação terminada @@ -15225,12 +15278,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. &Skip - + P&ular Export Error - + Erro de Exportação @@ -15238,7 +15291,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Export Track Files To - + Exportar Faixas Para @@ -15252,17 +15305,17 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Error removing file %1: %2. Stopping. - + Erro na remoção do ficheiro %1: %2. Paragem. Error exporting track %1 to %2: %3. Stopping. - + Erro ao exportar faixa %1 para %2: %3. Parando. Error exporting tracks - + Erro ao exportar as faixas @@ -15294,7 +15347,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Timer (Fallback) - + Cronômetro (Retirada) @@ -15304,12 +15357,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Wait for Video sync - + Aguardar pela sincronização Video Sync Control - + Controle de Sincronização @@ -15327,7 +15380,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Time until charged: %1 - + Tempo até carregada: %1 @@ -15337,7 +15390,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Battery fully charged. - + Bateria carregada completamente. @@ -15359,29 +15412,29 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Choose new cover change cover art location - + Escolher nova capa Clear cover clears the set cover art -- does not touch files on disk - + Limpar capa do disco Reload from file/folder reload cover art from file metadata or folder - + Recarregar do arquivo/pasta Image Files - + Arquivos de Imagem Change Cover Art - + Mudar Arte da Capa @@ -15565,323 +15618,353 @@ This can not be undone! - Create &New Playlist + Search in Current View... - Create a new playlist + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F - + + Create &New Playlist + Criar &Playlist Nova + + + + Create a new playlist + Criar uma nova playlist + + + Ctrl+n Ctrl+n - + Create New &Crate - + Criar Nova &Caixa - + Create a new crate Criar uma Caixa nova - + Ctrl+Shift+N - + Ctrl+Shift+N - - + + &View &Ver - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Pode não ser compatível com todos os temas - + Show Skin Settings Menu - + Mostrar Menu de Configurações do Tema - + Show the Skin Settings Menu of the currently selected Skin - + Mostra o menu das configurações do tema do tema atualmente selecionado - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar a Secção do Microfone - + Show the microphone section of the Mixxx interface. Mostrar a secção microfone do interface Mixxx - + Ctrl+2 Menubar|View|Show Microphone Section - + Ctrl+2 - + Show Vinyl Control Section Mostrar a Secção de Controle de Vinyl - + Show the vinyl control section of the Mixxx interface. Mostrar a secção Controlo Vinilo do interface Mixxx - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Ctrl+3 - + Show Preview Deck Mostrar o Deck de Pré-visualização - + Show the preview deck in the Mixxx interface. Mostrar o Deck de Pré-visualização no interface do Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck - + Ctrl+4 - + Show Cover Art Mostrar Arte da Capa - + Show cover art in the Mixxx interface. - + Mostrar as capas dos discos no interface Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art - + Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. - + Maximiza a biblioteca de faixas para ocupar todo o espaço disponível do ecrã. - + Space Menubar|View|Maximize Library Espaço - + &Full Screen &Ecrã completo - + Display Mixxx using the full screen Mostrar o Mixxx em ecrã completo - + &Options &Opções - + &Vinyl Control Controlo Vinilo - + Use timecoded vinyls on external turntables to control Mixxx Utilizar discos de vinilo codificados num leitor externo para controlar o Mixxx - + Enable Vinyl Control &%1 - + Ativar Controle por Vinil &%1 - + &Record Mix Gravar a mistura - + Record your mix to a file Gravar a sua mistura num ficheiro - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activar a difusão em directo - + Stream your mixes to a shoutcast or icecast server Difunda as suas misturas via um servidor de "shoutcast" ou "icecast" - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activar atalhos de teclado - + Toggles keyboard shortcuts on or off Activar/desactivar atalhos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferências - + Change Mixxx settings (e.g. playback, MIDI, controls) Modificar os parâmetros do Mixxx (ex. difusão, MIDI, controladores) - + &Developer &Desenvolvedor - + &Reload Skin &Recarregar Skin - + Reload the skin Recarregar a skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools - + &Ferramentas do Desenvolvedor - + Opens the developer tools dialog Abre o diálogo das ferramentas de desenvolvedor - + Ctrl+Shift+T - + Ctrl+Shift+T - + Stats: &Experiment Bucket Dados: Balde de &Experimento - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ativa o modo Experiências. Coleta estatísticas no balde de rastreio EXPERIÊNCIAS. - + Ctrl+Shift+E - + Ctrl+Shift+E - + Stats: &Base Bucket - + Estatísticas: &Balde Base - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ativa o modo base. Coleta dados no balde de localização BASE. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled - + Deb&ugger Ativado - + Enables the debugger during skin parsing - + Ativa o debugger enquanto a skin estiver sendo analisada - + Ctrl+Shift+D - + Ctrl+Shift+D - + &Help &Ajuda - + Show Keywheel menu title @@ -15898,74 +15981,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + F12 - + &Community Support Suporte da comunidade - + Get help with Mixxx Obter ajuda sobre o Mixxx - + &User Manual Manual do utilizador - + Read the Mixxx user manual. Ler o manual de utilizador do Mixxx - + &Keyboard Shortcuts - + &Atalhos de Teclado - + Speed up your workflow with keyboard shortcuts. Acelere seu fluxo de trabalho com atalhos de teclado. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Traduzir esta Aplicação - + Help translate this application into your language. Ajude a traduzir esta aplicação na sua linguagem - + &About &Sobre - + About the application Sobre a aplicação @@ -16000,25 +16083,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Limpar entrada - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Pesquisa - + Clear input Limpar a entrada @@ -16029,92 +16100,86 @@ This can not be undone! Procurar... - + Clear the search bar input field - - Enter a string to search for - + + Return + Enter - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Atalho + See User Manual > Mixxx Library for more information. + - - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return - Enter + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - - - - - Exit search - Exit search bar and leave focus + + Delete query from history @@ -16178,7 +16243,7 @@ This can not be undone! Year - + Ano @@ -16241,7 +16306,7 @@ This can not be undone! Adjust BPM - + Ajustar BPM @@ -16273,7 +16338,7 @@ This can not be undone! Add to Auto DJ Queue (replace) - + Adicionar à Fila Auto DJ (Substituir) @@ -16283,17 +16348,17 @@ This can not be undone! Remove - + Remover Remove from Playlist - + Remover da Playlist Remove from Crate - + Remover da Caixa @@ -16343,22 +16408,22 @@ This can not be undone! Import From MusicBrainz - + Importar do MusicBrainz Export To File Tags - + Exportar Para Tags Ficheiros BPM and Beatgrid - + BPM e Grelha de Batidas Play Count - + Contador de Leitura @@ -16368,7 +16433,7 @@ This can not be undone! Cue Point - + Ponto de Marcação @@ -16399,7 +16464,7 @@ This can not be undone! Waveform - + Forma de Onda @@ -16454,7 +16519,7 @@ This can not be undone! 4/3 BPM - + 4/3 BPM @@ -16522,7 +16587,7 @@ This can not be undone! Playlist Creation Failed - + A criação da Lista de reprodução falhou @@ -16532,7 +16597,7 @@ This can not be undone! A playlist cannot have a blank name. - + A Playlist não pode ter um nome vazio @@ -16922,52 +16987,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Escolha a pasta da biblioteca musical - + controllers - + Cannot open database Não é possível abrir a base de dados - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -17003,7 +17068,7 @@ Clique em OK para sair. Browse - + Procurar @@ -17023,7 +17088,7 @@ Clique em OK para sair. Cancel - + Cancelar @@ -17062,12 +17127,12 @@ Clique em OK para sair. Export Modified Track Metadata - + Exportar Metadados Modificados da Faixa Mixxx may wait to modify files until they are not loaded to any decks or samplers. If you do not see changed metadata in other programs immediately, eject the track from all decks and samplers or shutdown Mixxx. - + O Mixxx poderá esperar para modificar ficheiros até que não estejam carregados em quaisquer leitores ou samplers. Se não vir os metadados alterados noutros programas imediatamente, ejecte a faixa de todos os leitores e samplers ou encerre o Mixxx. @@ -17116,7 +17181,7 @@ Clique em OK para sair. No network access - + Sem acesso a rede diff --git a/res/translations/mixxx_pt_BR.qm b/res/translations/mixxx_pt_BR.qm index 936019ee300d..4c172df81737 100644 Binary files a/res/translations/mixxx_pt_BR.qm and b/res/translations/mixxx_pt_BR.qm differ diff --git a/res/translations/mixxx_pt_BR.ts b/res/translations/mixxx_pt_BR.ts index 3c57eab380d0..65f6f2adbc28 100644 --- a/res/translations/mixxx_pt_BR.ts +++ b/res/translations/mixxx_pt_BR.ts @@ -599,7 +599,7 @@ Music Directory Added - + Pasta de Música Adicionada @@ -609,7 +609,7 @@ Scan - + Examinar @@ -692,7 +692,7 @@ Key - + Nota @@ -727,17 +727,17 @@ File Modified - + Ficheiro Modificado File Created - + Ficheiro Criado Mixxx Library - + Biblioteca Mixxx @@ -750,7 +750,7 @@ The file '%1' could not be found. - + O arquivo '%1' não pôde ser encontrado. @@ -912,7 +912,7 @@ trace - Above + Profiling messages Remove Palette - + Remover Paleta @@ -940,7 +940,7 @@ trace - Above + Profiling messages No control chosen. - + Nenhum controlo escolhido. @@ -1008,7 +1008,7 @@ trace - Above + Profiling messages Auxiliary %1 - + Auxiliar %1 @@ -1018,7 +1018,7 @@ trace - Above + Profiling messages Effect Rack %1 - + Rack de Efeitos %1 @@ -1049,7 +1049,7 @@ trace - Above + Profiling messages Headphone delay - + Atraso Auscultador @@ -1070,13 +1070,13 @@ trace - Above + Profiling messages Set to full volume - + Volume Máximo Set to zero volume - + Ajustar para o volume zero @@ -1107,7 +1107,7 @@ trace - Above + Profiling messages Mute button - + Tecla de Silêncio @@ -1118,7 +1118,7 @@ trace - Above + Profiling messages Mix orientation (e.g. left, right, center) - + Orientação da mistura (ex. esquerda, direita, centro) @@ -1152,12 +1152,12 @@ trace - Above + Profiling messages Increase BPM by 1 - + Aumentar BPM em 1 Decrease BPM by 1 - + Diminuir BPM em 1 @@ -1182,17 +1182,17 @@ trace - Above + Profiling messages One-time beat sync (tempo only) - + Sincronização pontual da batida (só tempo) One-time beat sync (phase only) - + Sincronização pontual da batida (só fase) Toggle keylock mode - + Activar/desactivar o modo de bloqueio @@ -1202,7 +1202,7 @@ trace - Above + Profiling messages Vinyl Control - + Controlo Vinilo @@ -1222,7 +1222,7 @@ trace - Above + Profiling messages Cues - + Pontos de marcação @@ -1252,7 +1252,7 @@ trace - Above + Profiling messages Preview from cue point - + Antevisão a partir do ponto de marcação @@ -1262,12 +1262,12 @@ trace - Above + Profiling messages Stutter cue - + Marcação Stutter Hotcues - + Hotcues @@ -1282,7 +1282,7 @@ trace - Above + Profiling messages Set hotcue %1 - + Definir a Hot Cue %1 @@ -1302,13 +1302,13 @@ trace - Above + Profiling messages Preview from hotcue %1 - + Antevisão a partir da Hot Cue %1 Hotcue %1 - + Hot Cue %1 @@ -1323,12 +1323,12 @@ trace - Above + Profiling messages Loop Out button - + Tecla de Final de Loop Loop Exit button - + Botão de saída de ciclo @@ -1383,7 +1383,7 @@ trace - Above + Profiling messages Create %1-beat loop - + Criar um loop de %1-batidas @@ -1398,27 +1398,27 @@ trace - Above + Profiling messages Slot %1 - + Compartimento %1 Headphone Mix - + Mistura do auscultador Headphone Split Cue - + Escuta Dividida no Auscultador Headphone Delay - + Atraso Auscultador Play - + Tocar @@ -1517,12 +1517,12 @@ trace - Above + Profiling messages Zero Volume - + Volume Zero Track Gain - + Ganho da Faixa @@ -1533,7 +1533,7 @@ trace - Above + Profiling messages Mute - + Mutar @@ -1544,22 +1544,22 @@ trace - Above + Profiling messages Headphone Listen - + Escuta de Auscultador Headphone listen (pfl) button - + Botão de escuta de auscultador (PFL) Repeat Mode - + Modo Repetir Slip Mode - + Modo Escorregar @@ -1571,19 +1571,19 @@ trace - Above + Profiling messages Orient Left - + Orientar Esquerda Orient Center - + Orientar Centro Orient Right - + Orientação à Direita @@ -1608,12 +1608,12 @@ trace - Above + Profiling messages BPM Tap - + Bater BPM Adjust Beatgrid Faster +.01 - + Ajustar Grelha de Batidas Mais Rápido +.01 @@ -1633,7 +1633,7 @@ trace - Above + Profiling messages Move Beatgrid Earlier - + Mover Grelha de Batidas Cedo @@ -1643,7 +1643,7 @@ trace - Above + Profiling messages Move Beatgrid Later - + Mover Grelha de Batidas Tarde @@ -1653,7 +1653,7 @@ trace - Above + Profiling messages Adjust Beatgrid - + Ajustar a grelha ritmica @@ -1668,17 +1668,17 @@ trace - Above + Profiling messages Adjust beatgrid to match another playing deck. - + Ajusta a grelha de batidas para corresponder um outro leitor em reprodução. Quantize Mode - + Modo Quantização Sync - + Sincronizar @@ -1834,12 +1834,12 @@ trace - Above + Profiling messages Cue (CDJ Mode) - + Cue (Modo CDJ) Stutter Cue - + Marcação Stutter @@ -1889,7 +1889,7 @@ trace - Above + Profiling messages Loop Exit - + Saída do Loop @@ -1954,7 +1954,7 @@ trace - Above + Profiling messages Append the selected track to the Auto DJ Queue - + Coloca a faixa selecionada no final da fila Auto DJ @@ -2101,7 +2101,7 @@ trace - Above + Profiling messages Next or Previous - + Próximo ou Anterior @@ -2344,7 +2344,7 @@ trace - Above + Profiling messages Skin - + Skin @@ -2572,7 +2572,7 @@ trace - Above + Profiling messages Speed - + Velocidade @@ -2855,7 +2855,7 @@ trace - Above + Profiling messages Reloop And Stop - + Reloop e Parar @@ -2890,32 +2890,32 @@ trace - Above + Profiling messages Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Saltar para a frente %1 batidas, ou se o loop estiver ativado, mover o loop para a frente %1 batidas Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Saltar para trás %1 batidas, ou se o loop estiver ativado, mover o loop para trás %1 batidas Beat Jump / Loop Move Forward Selected Beats - + Saltar Batidas / Mover Loop Frente Batidas Selecionadas Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Saltar para a frente do número de batidas selecionadas, ou se o loop estiver ativado, mover o loop para a frente o número de batidas selecionadas Beat Jump / Loop Move Backward Selected Beats - + Saltar Batida / Mover Loop Atraso Batidas Selecionadas Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Saltar para trás o número de batidas selecionadas, ou se o loop estiver ativado, mover o loop para trás o número de batidas selecionadas @@ -3095,12 +3095,12 @@ trace - Above + Profiling messages Go to the currently selected item - + Ir para o item seleccionado correntemente Choose the currently selected item and advance forward one pane if appropriate - + Escolher o item seleccionado correntemente e avançar um para a frente @@ -3110,12 +3110,12 @@ trace - Above + Profiling messages Add to Auto DJ Queue (replace) - + Adicionar à Fila Auto DJ (Substituir) Replace Auto DJ Queue with selected tracks - + Substituir Fila Auto DJ com as faixas selecionadas @@ -3182,12 +3182,12 @@ trace - Above + Profiling messages Deck %1 Quick Effect Enable Button - + Botão de Ativar Efeito Rápido no Leitor %1 Quick Effect Enable Button - + Botão de Ativar Efeito Rápido @@ -3197,17 +3197,17 @@ trace - Above + Profiling messages Super Knob (control effects' Meta Knobs) - + Super Botão (controla os efeitos dos Meta Botões) Mix Mode Toggle - + Alternar Modo Mistura Toggle effect unit between D/W and D+W modes - + Alternar unidade de efeito entre os modos S/M e S+M @@ -3253,27 +3253,27 @@ trace - Above + Profiling messages Effect Meta Knob (control linked effect parameters) - + Meta Botão Efeitos (controla os parâmetros dos efeitos a que está ligado) Meta Knob Mode - + Modo Meta Botão Set how linked effect parameters change when turning the Meta Knob. - + Define como mudam os efeitos a que está ligado, quando se roda o Meta Botão. Meta Knob Mode Invert - + Inverter Modo Meta Botão Invert how linked effect parameters change when turning the Meta Knob. - + Inverter como mudam os efeitos a que está ligado, quando se roda o Meta Botão. @@ -3486,7 +3486,7 @@ trace - Above + Profiling messages Show/hide the scrolling waveforms. - + Mostrar/esconder as ondas. @@ -3511,7 +3511,7 @@ trace - Above + Profiling messages Zoom waveform out - + Reduzir a forma de onda @@ -3547,7 +3547,7 @@ trace - Above + Profiling messages Channel - + Canal @@ -3644,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Tente recuperar reiniciando seu controlador. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. O código do script precisa ser corrigido. @@ -4002,7 +4002,7 @@ trace - Above + Profiling messages License - + Licença @@ -4130,7 +4130,7 @@ Shortcut: Shift+F9 Determines the duration of the transition - + Determina a duração da transição. @@ -4226,7 +4226,7 @@ crossfader, so that the intro starts at full volume. Displays the duration and number of selected tracks. - + Mostra a duração e número de faixas selecionadas. @@ -4245,7 +4245,8 @@ crossfader, so that the intro starts at full volume. Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. - + Adiciona uma faixa aleatoriamente das fontes de faixas (caixas) à fila Auto DJ. +Se não estão configuradas fontes de faixas, então a faixa é adicionada da biblioteca. @@ -4288,7 +4289,9 @@ This can speed up beat detection on slower computers but may result in lower qua Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Converte batidas detectada pelo analisador em uma grade de batidas de tempo fixo. +Use esta configuração se suas faixas tem um tempo constante (como a maioria das músicas eletrônicas). +Frequentemente resulta em grades de batida de melhor qualidade, e não funciona direito em faixas que tem mudanças de tempo. @@ -4501,7 +4504,10 @@ Often results in higher quality beatgrids, but will not do well on tracks that h This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. You tried to learn: %1,%2 - + O controle que você clicou no Mixxx não pode ser mapeado. +Isso pode ser porque você está usando um tema antigo e esse controle não é mais suportado, ou você clicou em um controle que provê feedback visual e só pode ser mapeado em saídas como LEDs por meio de scripts. + +Você tentou mapear: %1,%2 @@ -4811,28 +4817,28 @@ You tried to learn: %1,%2 You can't create more than %1 source connections. - + Não pode criar mais de %1 ligações fonte. Source connection %1 - + Ligação fonte %1 At least one source connection is required. - + É necessária pelo menos uma ligação fonte. Are you sure you want to disconnect every active source connection? - + Tem a certeza que quer desligar todas as ligações fonte ativas? Confirmation required - + Confirmação necessária @@ -4843,7 +4849,7 @@ Two source connections to the same server that have the same mountpoint can not Are you sure you want to delete '%1'? - + Tem a certeza que quer apagar '%1'? @@ -4853,12 +4859,12 @@ Two source connections to the same server that have the same mountpoint can not New name for '%1': - + Novo nome para '%1': Can't rename '%1' to '%2': name already in use - + Não pode renomear '%1' para '%2': nome já em uso @@ -4896,37 +4902,37 @@ Two source connections to the same server that have the same mountpoint can not Live Broadcasting source connections - + Conexões para Transmissão Ao Vivo Delete selected - + Apagar selecionadas Create new connection - + Criar nova ligação Rename selected - + Renomear selecionadas Disconnect all - + Desligar todas Turn on Live Broadcasting when applying these settings - + Iniciar transmissão ao vivo quando aplicar estas configurações Settings for %1 - + Definições para %1 @@ -4941,7 +4947,7 @@ Two source connections to the same server that have the same mountpoint can not AIM - + AIM @@ -4961,12 +4967,12 @@ Two source connections to the same server that have the same mountpoint can not Select a source connection above to edit its settings here - + Selecionar uma ligação fonte acima para editar as suas definições aqui Password storage - + Armazenamento Palavra Passe @@ -4976,7 +4982,7 @@ Two source connections to the same server that have the same mountpoint can not Secure storage (OS keychain) - + Armazenamento seguro (Porta chaves do SO) @@ -5027,12 +5033,12 @@ Two source connections to the same server that have the same mountpoint can not Host - Anfitrião (host) + Host Login - + Login @@ -5132,7 +5138,7 @@ Two source connections to the same server that have the same mountpoint can not By hotcue number - + Por número do hotcue @@ -5166,7 +5172,7 @@ Two source connections to the same server that have the same mountpoint can not Hotcue palette - + Paleta de hotcue @@ -5443,7 +5449,7 @@ Aplicar as configurações e continuar? Author: - + Autor: @@ -5564,7 +5570,7 @@ Aplicar as configurações e continuar? Skin - + Skin @@ -5636,6 +5642,16 @@ Aplicar as configurações e continuar? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -5805,7 +5821,7 @@ Aplicar as configurações e continuar? Deck Preferences - + Preferências Leitor @@ -5882,7 +5898,7 @@ Modo CUP: Time Format - + Formato de tempo @@ -5896,7 +5912,11 @@ it will place it at the main cue point if the main cue point has been set previo This may be helpful for upgrading to Mixxx 2.3 from earlier versions. If this option is disabled, the intro start point is automatically placed at the first sound. - + Quando o analisador coloca automaticamente o ponto de início da introdução, +ele coloca-o no ponto de referência principal se o ponto de referência principal tiver sido definido anteriormente. +Isso pode ser útil para atualizar para o Mixxx 2.3 de versões anteriores. + +Se essa opção estiver desativada, o ponto de início da introdução é colocado automaticamente no primeiro som. @@ -5906,7 +5926,7 @@ If this option is disabled, the intro start point is automatically placed at the Track load point - + Ponto de carga de rastreamento @@ -5927,7 +5947,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Double-press Load button to clone playing track - + Pressione Carregar duas vezes para clonar uma faixa que está tocando @@ -6205,12 +6225,12 @@ You can always drag-and-drop tracks on screen to clone a deck. Keep metaknob position - + Manter posição do metabotão Reset metaknob to effect default - + Reinicia metabotão para efeito padrão @@ -6246,62 +6266,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. O tamanho mínimo da skin selecionada é maior do que a sua resolução de tela. - + Allow screensaver to run Permitir que o protetor de tela execute - + Prevent screensaver from running Prevenir que o protetor de tela execute - + Prevent screensaver while playing Prevenir o protetor de tela quando tocando - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Esta skin não suporta esquemas de cor - + Information Informação - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -6382,7 +6402,7 @@ and allows you to pitch adjust them for harmonic mixing. OpenKey - + OpenKey @@ -6814,12 +6834,12 @@ and allows you to pitch adjust them for harmonic mixing. Edit metadata after clicking selected track - + Editar metadados após clicar faixa seleccionada Search-as-you-type timeout: - + Tempo limite de procura ao escrever: @@ -6927,7 +6947,7 @@ and allows you to pitch adjust them for harmonic mixing. Scratching - + Scratching @@ -7245,7 +7265,7 @@ and allows you to pitch adjust them for harmonic mixing. Recordings directory invalid - + Diretório de gravações inválido @@ -7495,12 +7515,12 @@ The loudness target is approximate and assumes track pregain and main output lev Network Clock - + Relógio da Rede Direct monitor (recording and broadcasting only) - + Monição direta (apenas gravação e emissão) @@ -7590,27 +7610,27 @@ The loudness target is approximate and assumes track pregain and main output lev Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + As entradas de microfone estão fora de tempo no sinal gravar e emitir comparado com o que ouve. Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Medir a latência de ida e volta e introduza-a acima para Compensação da Latência do Microfone de maneira a alinhar o tempo do microfone. Refer to the Mixxx User Manual for details. - + Consulte o Manual do Utilizador do Mixxx para detalhes. Configured latency has changed. - + A latência configurada foi alterada. Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Volta a medir a latência de ida e volta e introduza-a acima para Compensação da Latência do Microfone de maneira a alinhar o tempo do microfone. @@ -7663,12 +7683,12 @@ The loudness target is approximate and assumes track pregain and main output lev Engine Clock - + Relógio Motor Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Use o relógio da placa de som para montagens com audiência ao vivo e a menor latência.<br>Use o relógio de rede para emissões sem audiência ao vivo. @@ -7683,12 +7703,12 @@ The loudness target is approximate and assumes track pregain and main output lev Microphone Monitor Mode - + Modo Monição Microfone Microphone Latency Compensation - + Compensação da Latência do Microfone @@ -7844,7 +7864,7 @@ The loudness target is approximate and assumes track pregain and main output lev Vinyl Type - + Tipo do Vinil @@ -8083,7 +8103,8 @@ The loudness target is approximate and assumes track pregain and main output lev The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + A forma de onda mostra o envoltório da onda na faixa inteira. +Selecione entre tipos diferentes de visualizações da forma de onda, o que difere principalmente no nível de detalhe mostrado na forma de onda. @@ -8094,12 +8115,13 @@ Select from different types of displays for the waveform overview, which differ The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - + A forma de onda mostra o envoltório da onda na faixa junto à posição corrente de leitura. +Selecione entre tipos diferentes de visualizações da forma de onda, o que difere principalmente no nível de detalhe mostrado na forma de onda. fps - + fps @@ -8169,7 +8191,7 @@ Select from different types of displays for the waveform, which differ primarily Beat grid opacity - + Opacidade da grelha de batidas @@ -8190,7 +8212,7 @@ Select from different types of displays for the waveform, which differ primarily Set amount of opacity on beat grid lines. - + Define a quantidade de opacidade das linhas da grelha de batida. @@ -8200,12 +8222,12 @@ Select from different types of displays for the waveform, which differ primarily Play marker position - + Marcador da posição de reprodução Moves the play marker position on the waveforms to the left, right or center (default). - + Move o marcador da posição de reprodução nas formas de onda para a esquerda, direita ou centro (padrão). @@ -8223,7 +8245,7 @@ Select from different types of displays for the waveform, which differ primarily Sound Hardware - + Hardware de Som @@ -8248,17 +8270,17 @@ Select from different types of displays for the waveform, which differ primarily Mixer - + Mixer Auto DJ - + Auto DJ Decks - + Leitores @@ -8293,7 +8315,7 @@ Select from different types of displays for the waveform, which differ primarily &Ok Preferences standard buttons: consider the other buttons to choose a unique Alt hotkey (&) - + &Ok @@ -8357,7 +8379,7 @@ Select from different types of displays for the waveform, which differ primarily TextLabel - + TextLabel @@ -8421,7 +8443,7 @@ Select from different types of displays for the waveform, which differ primarily Current cue color - + Cor da pista atual @@ -8846,7 +8868,7 @@ This can not be undone! Import Metadata from MusicBrainz - + Importar Metadados de MusicBrainz @@ -9579,60 +9601,61 @@ support. ---------- Shown when VuMeter can not be displayed. Please keep unchanged - + Sem suporte +OpenGL - + activate ativar - + toggle alternar - + right direito - + left esquerdo - + right small direito pequeno - + left small esquerdo pequeno - + up acima - + down abaixo - + up small acima pequeno - + down small abaixo pequeno - + Shortcut Atalho @@ -9705,22 +9728,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Importar Lista de Reprodução - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Arquivos de Lista de Reprodução (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9854,7 +9877,7 @@ Do you really want to overwrite it? Hidden Tracks - + Músicas Ocultadas @@ -9990,131 +10013,131 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Carregar faixa no Deck %1 - + Deck %1 is currently playing a track. O deck %1 está tocando uma faixa neste momento. - + Are you sure you want to load a new track? Tem certeza de que deseja carregar uma nova faixa? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Não há nenhum dispositivo de entrada selecionado para o controle por vinil. Por favor, selecione um dispositivo de entrada nas preferências do hardware de som. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Não tem nenhum dispositivo de entrada selecionado para este controle atravessador. Por favor selecione um dispositivo de entrada nas preferências do hardware de som primeiro. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Erro no arquivo de skin - + The selected skin cannot be loaded. A skin selecionada não pôde ser carregada. - + OpenGL Direct Rendering Renderização Direta OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Confirmar a Saída - + A deck is currently playing. Exit Mixxx? - + Um leitor está presentemente em reprodução. Sair do Mixxx? - + A sampler is currently playing. Exit Mixxx? Um sampler está tocando neste momento. Sair do Mixxx? - + The preferences window is still open. A janela de preferências ainda está aberta. - + Discard any changes and exit Mixxx? Descartar quaisquer mudanças e sair do Mixxx? @@ -10136,7 +10159,7 @@ Do you want to select an input device? - + Playlists Listas de Reprodução @@ -10177,27 +10200,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Alguns DJs constroem listas de reprodução antes de apresentações ao vivo, mas outros preferem construí-las na hora. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Ao utilizar uma lista de reprodução durante uma apresentação ao vivo, lembre-se de sempre prestar atenção em como o público reage à música que você escolheu tocar. - + Create New Playlist Criar Nova Lista de Reprodução @@ -10424,7 +10447,7 @@ Você quer examinar a sua biblioteca procurando por arquivos de capa agora? Switch - + Comutador @@ -10449,7 +10472,7 @@ Você quer examinar a sua biblioteca procurando por arquivos de capa agora? Script - + Script @@ -10469,12 +10492,12 @@ Você quer examinar a sua biblioteca procurando por arquivos de capa agora? Booth - + Cabine Headphones - + Fones @@ -10499,17 +10522,17 @@ Você quer examinar a sua biblioteca procurando por arquivos de capa agora? Deck - + Leitor Record/Broadcast - + Gravar/Emitir Vinyl Control - + Controlo Vinilo @@ -10585,12 +10608,12 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Adds noise by the reducing the bit depth and sample rate - + Adiciona ruído pela redução da Profundidade de Bit e taxa de amostragem The bit depth of the samples - + A profundidade de bit das amostras @@ -10605,7 +10628,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx The sample rate to which the signal is downsampled - + A taxa de amostragem para a qual este sinal será reduzida @@ -10619,13 +10642,13 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Time - + Tempo Ping Pong - + Pingue Pongue @@ -10651,7 +10674,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Stores the input signal in a temporary buffer and outputs it after a short time - + Guarda o sinal de entrada num buffer temporário e fá-lo sair após um pequeno tempo. @@ -10659,7 +10682,9 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Delay time 1/8 - 2 beats if tempo is detected 1/8 - 2 seconds if no tempo is detected - + Tempo de atraso +1/8 - 2 batidas se o BPM tiver sido detetado +1/8 - 2 segundos se o BPM não tiver sido detetado @@ -10669,7 +10694,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx How much the echoed sound bounces between the left and right sides of the stereo field - + Quanto do sinal ecoado ressalta entre os os lados esquerdo e direito do campo estéreo @@ -10684,7 +10709,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Round the Time parameter to the nearest 1/4 beat. - + Arredonda o parâmetro Tempo para o 1/4 de batida mais próxima. @@ -10697,12 +10722,12 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Triplets - + Triplets When the Quantize parameter is enabled, divide rounded 1/4 beats of Time parameter by 3. - + Quando o parâmetro Quantização está ativo, divide o parâmetro Tempo arredondado a 1/4 de batida, por 3. @@ -10713,12 +10738,12 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Allows only high or low frequencies to play. - + Permite tocar apenas as altas ou baixas frequências. Low Pass Filter Cutoff - + Corte Filtro Passa Baixo @@ -10741,12 +10766,13 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Resonance of the filters Default: flat top - + Ressonancia dos filtros +Padrão: Topo plano High Pass Filter Cutoff - + Corte Filtro Passa Alto @@ -10778,7 +10804,7 @@ Default: flat top Speed - + Velocidade @@ -10789,58 +10815,61 @@ Default: flat top Mixes the input with a delayed, pitch modulated copy of itself to create comb filtering - + Mistura a entrada com uma cópia de si mesma, atrasada e modulada em tonalidade para criar uma filtragem pente Speed of the LFO (low frequency oscillator) 32 - 1/4 beats rounded to 1/2 beat per LFO cycle if tempo is detected 1/32 - 4 Hz if no tempo is detected - + Velocidade do LFO (oscilador de baixa frequência) +32 - 1/4 batidas arredondadas para 1/2 batida por ciclo LFO se o BPM tiver sido detetado +1/32 - 4 Hz se o BPM não tiver sido detetado Delay amplitude of the LFO (low frequency oscillator) - + Amplitude do atraso do LFO (oscilador de baixa frequência). Delay offset of the LFO (low frequency oscillator). With width at zero, this allows for manually sweeping over the entire delay range. - + Alinhamento do atraso do LFO (oscilador de baixa frequência). +Com a largura a zero, permite o varrimento manual ao longo de toda a extensão do atraso. Regeneration - + Regeneração Regen - + Regen How much of the delay output is feed back into the input - + Quantidade da saída atrasada que é retornada para a entrada Intensity of the effect - + Intensidade do efeito Divide rounded 1/2 beats of the Period parameter by 3. - + Divide o parâmetro Período, arredondado a 1/2 batidas, por 3. Mix - + Mistura @@ -10855,7 +10884,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Metronome - + Metrónomo @@ -10865,7 +10894,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Adds a metronome click sound to the stream - + Adiciona o som dum clique de metrónomo à stream @@ -10875,7 +10904,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Set the beats per minute value of the click sound - + Define o valor do bpm do som do clique @@ -10885,7 +10914,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Synchronizes the BPM with the track if it can be retrieved - + Sincroniza o BPM com a faixa, se este puder ser obtido @@ -10914,14 +10943,16 @@ With width at zero, this allows for manually sweeping over the entire delay rang Bounce the sound left and right across the stereo field - + Balança o som entre a esquerda e direita ao longo do campo estéreo How fast the sound goes from one side to another 1/4 - 4 beats rounded to 1/2 beat if tempo is detected 1/4 - 4 seconds if no tempo is detected - + Velocidade com que o sinal vai dum lado para o outro +1/4 - 4 batidas arredondado para 1/2 batidas se o BPM tiver sido detetado +1/4 - 4 segundos se o BPM não tiver sido detetado @@ -10936,12 +10967,12 @@ With width at zero, this allows for manually sweeping over the entire delay rang How smoothly the signal goes from one side to the other - + Suavidade com que o sinal vai de um lado para o outro How far the signal goes to each side - + Até onde o sinal vai em cada lado @@ -10951,7 +10982,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Emulates the sound of the signal bouncing off the walls of a room - + Simula o som do sinal sendo refletido nas paredes duma sala @@ -10962,18 +10993,19 @@ With width at zero, this allows for manually sweeping over the entire delay rang Lower decay values cause reverberations to fade out more quickly. - + Valores de declínio baixos causam o desvanecimento das reverberações mais rápido. Bandwidth of the low pass filter at the input. Higher values result in less attenuation of high frequencies. - + Largura de banda do filtro passa baixo na entrada. +Valores mais altos resultam em menos atenuação das altas frequências. How much of the signal to send in to the effect - + Quantidade do sinal a enviar para o efeito @@ -11163,14 +11195,16 @@ Higher values result in less attenuation of high frequencies. Mixes the input signal with a copy passed through a series of all-pass filters to create comb filtering - + Mistura o sinal de entrada com uma cópia passada através de uma série de filtros para criar uma filtragem em pente Period of the LFO (low frequency oscillator) 1/4 - 4 beats rounded to 1/2 beat if tempo is detected 1/4 - 4 seconds if no tempo is detected - + Período do LFO (oscilador de baixa frequência) +1/4 - 4 batidas arrendondadas a 1/2 batida se o BPM tiver sido detetado +1/4 - 4 segundos se o BPM não tiver sido detetado @@ -11193,12 +11227,12 @@ Higher values result in less attenuation of high frequencies. Number of stages - + Número de estágios Sets the LFOs (low frequency oscillators) for the left and right channels out of phase with each others - + Define os LFOs (osciladores de baixa frequência) para os canais esquerdo e direito, desfasados uns com os outros @@ -11268,7 +11302,7 @@ Higher values result in less attenuation of high frequencies. LinkwitzRiley8 Isolator - + Isolador LinkwitzRiley8 @@ -11283,12 +11317,12 @@ Higher values result in less attenuation of high frequencies. Biquad Equalizer - + Equalizador Biquad BQ EQ - + EQ BQ @@ -11303,12 +11337,12 @@ Higher values result in less attenuation of high frequencies. Biquad Full Kill Equalizer - + Equalizador Biquado Full Kill BQ EQ/ISO - + EQ/ISO BQ @@ -11397,33 +11431,33 @@ Higher values result in less attenuation of high frequencies. Adjust the left/right balance and stereo width - + Ajusta o balanço esquerdo/direito e a largura estéreo Adjust balance between left and right channels - + Ajusta o balanço entre os canais esquerdo e direito Mid/Side - + Centro/Lado Bypass Fr. - + Ignorar Fr. Bypass Frequency - + Ignorar Frequência Stereo Balance - + Balanço Estéreo @@ -11431,22 +11465,25 @@ Higher values result in less attenuation of high frequencies. Fully left: mono Fully right: only side ambiance Center: does not change the original signal. - + Ajusta a largura estéreo mudando o balanço entre o meio e o lado do canal. +Totalmente à esquerda: mono +Totalmente à direita: apenas ambiente do lado +Centro: não muda o sinal original. Frequencies below this cutoff are not adjusted in the stereo field - + As frequências abaixo deste ponto de corte não são ajustadas no campo estéreo Parametric Equalizer - + Equalizador Paramétrico Param EQ - + EQ Param @@ -11458,71 +11495,75 @@ It is designed as a complement to the steep mixing equalizers. Gain 1 - + Ganho 1 Gain for Filter 1 - + Ganho para o Filtro 1 Q 1 - + Q 1 Controls the bandwidth of Filter 1. A lower Q affects a wider band of frequencies, a higher Q affects a narrower band of frequencies. - + Controla a largura de banda do Filtro 1. +Um Q mais baixo afecta uma banda mais larga de frequências, +um Q mais alto afecta uma banda mais estreita de frequências. Center 1 - + Centro 1 Center frequency for Filter 1, from 100 Hz to 14 kHz - + Frequência central para o Filtro 1, de 100 Hz a 14 kHz Gain 2 - + Ganho 2 Gain for Filter 2 - + Ganho para o Filtro 2 Q 2 - + Q 2 Controls the bandwidth of Filter 2. A lower Q affects a wider band of frequencies, a higher Q affects a narrower band of frequencies. - + Controla a largura de banda do Filtro 2. +Um Q mais baixo afecta uma banda mais larga de frequências, +um Q mais alto afecta uma banda mais estreita de frequências. Center 2 - + Centro 2 Center frequency for Filter 2, from 100 Hz to 14 kHz - + Frequência central para o Filtro 2, de 100 Hz a 14 kHz @@ -11533,12 +11574,12 @@ a higher Q affects a narrower band of frequencies. Cycles the volume up and down - + Sobe e desce o volume num ciclo How much the effect changes the volume - + Até que ponto o efeito altera o volume @@ -11551,54 +11592,61 @@ a higher Q affects a narrower band of frequencies. Rate of the volume changes 4 beats - 1/8 beat if tempo is detected 1/4 Hz - 8 Hz if no tempo is detected - + Taxa das alterações do volume +4 batidas - 1/8 batida se o BPM tiver sido detetado +1/4 Hz - 8 Hz se o BPM não tiver sido detetado Width of the volume peak 10% - 90% of the effect period - + Largura do pico de volume +10% - 90% do período do efeito Shape of the volume modulation wave Fully left: Square wave Fully right: Sine wave - + Forma da onda de modulação do volume +Tudo esquerda: Onda quadrada +Tudo direita: Onda sinusoidal When the Quantize parameter is enabled, divide the effect period by 3. - + Quando o parâmetro Quantização está ativo, divide o período do efeito por 3. Waveform - + Forma de Onda Phase - + Fase Shifts the position of the volume peak within the period Fully left: beginning of the effect period Fully right: end of the effect period - + Desloca a posição do pico de volume dentro do período +Tudo esquerda: início do período do efeito +Tudo direita: fim do período do efeito Round the Rate parameter to the nearest whole division of a beat. - + Aproxima o parâmetro Taxa à divisão inteira mais próxima de uma batida. Triplet - + Terceto @@ -11822,7 +11870,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Transpassar @@ -12079,7 +12127,7 @@ may introduce a 'pumping' effect and/or distortion. Low Disk Space Warning - + Aviso de Pouco Espaço em Disco @@ -12104,7 +12152,7 @@ may introduce a 'pumping' effect and/or distortion. You can change the location of the Recordings folder in Preferences -> Recording. - + Pode alterar o local da pasta Gravações em Preferências -> Gravação. @@ -12163,7 +12211,7 @@ may introduce a 'pumping' effect and/or distortion. Memory cues - + Cues de memória @@ -12395,17 +12443,17 @@ may introduce a 'pumping' effect and/or distortion. Error setting stream IRC! - + Erro a definir a stream IRC! Error setting stream AIM! - + Erro a definir a stream AIM! Error setting stream ICQ! - + Erro a definir a stream ICQ! @@ -12470,22 +12518,22 @@ may introduce a 'pumping' effect and/or distortion. Connection error - + Erro de ligação One of the Live Broadcasting connections raised this error:<br><b>Error with connection '%1':</b><br> - + Uma das ligações de Emissão em Direto apresentou este erro:<br><b>Erro com a ligação '%1':</b><br> Connection message - + Mensagem da ligação <b>Message from Live Broadcasting connection '%1':</b><br> - + <b>Mensagem da ligação Emissão em Direto '%1':</b><br> @@ -12676,7 +12724,7 @@ may introduce a 'pumping' effect and/or distortion. Effects within the chain must be enabled to hear them. - + Os efeitos dentro da cadeia devem estar ativados para serem ouvidos. @@ -12691,7 +12739,7 @@ may introduce a 'pumping' effect and/or distortion. Waveform Display - + Formato da onda de exibição @@ -12737,7 +12785,7 @@ may introduce a 'pumping' effect and/or distortion. Right click to show cover art of loaded track. - + Clique direito para mostrar a capa do disco da faixa carregada. @@ -12797,7 +12845,7 @@ may introduce a 'pumping' effect and/or distortion. Indicates when the signal on the auxiliary is clipping, - + Indica quando o sinal auxiliar está clipando. @@ -12812,22 +12860,22 @@ may introduce a 'pumping' effect and/or distortion. Booth Gain - + Ganho Cabine Adjusts the booth output gain. - + Ajusta o ganho de saída para a cabine. Crossfader - + Crossfader Balance - + Balanço @@ -12897,7 +12945,7 @@ may introduce a 'pumping' effect and/or distortion. Preview Deck - + Deck de Prá-visualização @@ -13004,7 +13052,7 @@ may introduce a 'pumping' effect and/or distortion. Microphone Talkover Mode - + Microfone Modo Talkover @@ -13014,12 +13062,12 @@ may introduce a 'pumping' effect and/or distortion. Manual: Reduce music volume by a fixed amount set by the Strength knob. - + Manual: Reduz o volume de música de um valor fixo definido pelo botão Strenght. Behavior depends on Microphone Talkover Mode: - + O comportamento depende do Modo Talkover Microfone: @@ -13104,7 +13152,7 @@ may introduce a 'pumping' effect and/or distortion. Tempo - + Tempo @@ -13195,7 +13243,7 @@ may introduce a 'pumping' effect and/or distortion. Toggle visibility of Rate Control - + Alterna a visibilidade do Controlo da Taxa @@ -13220,7 +13268,7 @@ may introduce a 'pumping' effect and/or distortion. Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Define o CUE point (em modo Pioneer/Mixxx/Numark), define o CUE point e toca após largar a tecla (modo CUP) OU escuta o preview (modo Denon). @@ -13240,7 +13288,7 @@ may introduce a 'pumping' effect and/or distortion. Plays track from the cue point. - + Toca a faixa a partir do ponto de marcação. @@ -13290,7 +13338,7 @@ may introduce a 'pumping' effect and/or distortion. Displays the current range of the tempo slider. - + Mostra o alcance atual do deslizante de tempo. @@ -13483,7 +13531,7 @@ may introduce a 'pumping' effect and/or distortion. Auto: Sets how much to reduce the music volume when the volume of active microphones rises above threshold. - + Auto: Define o quanto reduzir o volume da música quando o volume de microfones ativos passa de um determinado limite. @@ -13713,32 +13761,32 @@ tracks with constant tempo. Sets the track Loop-In Marker to the current play position. - + Define o marcador Início Loop da faixa para a atual posição de reprodução. Press and hold to move Loop-In Marker. - + Pressione e mantenha para mover o marcador Início Loop. Jump to Loop-In Marker. - + Saltar para o marcador Início Loop. Sets the track Loop-Out Marker to the current play position. - + Define o marcador Fim Loop para a atual posição de reprodução. Press and hold to move Loop-Out Marker. - + Pressione e segure para mover o Marcador de Fim de Loop Jump to Loop-Out Marker. - + Saltar para o marcador Fim Loop. @@ -13753,22 +13801,22 @@ tracks with constant tempo. Select the size of the loop in beats to set with the Beatloop button. - + Escolher o tamanho do loop em batidas estabelecer com o botão Loop. Changing this resizes the loop if the loop already matches this size. - + Alterando isto redimensiona o loop se o loop já coincide com este tamanho. Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Reduz a metade o tamanho dum loop existente, ou reduz a metade o tamanho do próximo loop definido com o botão Loop. Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Duplica o tamanho dum loop existente, ou duplica o tamanho do próximo loop definido com o botão Loop. @@ -13793,82 +13841,82 @@ tracks with constant tempo. Beatjump/Loop Move Size - + Beatjump/Loop Tamanho Movimento Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Selecione o número de batidas a saltar ou a deslocar o loop com os botões Beatjump Frente/Atrás. Beatjump Forward - + Beatjump Frente Jump forward by the set number of beats. - + Salta para a frente o número de batidas predefinidas. Move the loop forward by the set number of beats. - + Move o loop para a frente o número de batidas prédefinidas. Jump forward by 1 beat. - + Salta para a frente 1 batida. Move the loop forward by 1 beat. - + Move o loop para a frente 1 batida. Beatjump Backward - + Beatjump Atrás Jump backward by the set number of beats. - + Salta para trás o número de batidas prédefinidas. Move the loop backward by the set number of beats. - + Move o loop para trás o número de batidas prédefinidas. Jump backward by 1 beat. - + Salta para trás 1 batida. Move the loop backward by 1 beat. - + Move o loop para trás 1 batida. Reloop - + Reloop If the loop is ahead of the current position, looping will start when the loop is reached. - + Se o loop estiver à frente da posição atual de reprodução, o ciclo de looping começará quando o loop for atingido. Works only if Loop-In and Loop-Out Marker are set. - + Funciona apenas se os marcadores de Início Loop e Fim Loop estiverem definidos. Enable loop, jump to Loop-In Marker, and stop playback. - + Ativar loop, saltar para o marcador Início Loop, e parar a reprodução. @@ -13937,44 +13985,46 @@ tracks with constant tempo. Mix - + Mistura Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + Ajustar a mistura do sinal seco (entrada) com o molhado (saída) da unidade de efeito D/W mode: Crossfade between dry and wet - + Modo S/M: crossfade entre seco e molhado D+W mode: Add wet to dry - + Modo S/M: adicionar molhado ao seco Mix Mode - + Modo Mistura Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Ajustar a mistura do sinal seco (entrada) com o sinal molhado (saída) da unidade de efeito Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Modo Seco/Molhado (linhas cruzadas): o botão de Mistura faz a transição entre seco e molhado. +Usar isto para alterar o som da faixa com EQ e filtros de efeitos. Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Modo Seco+Molhado (linha seca plana): o botão de Mistura adiciona o molhado ao seco. +Usar isto para alterar apenas o sinal já com os efeitos (molhado) de EQ e filtros de efeitos. @@ -13984,17 +14034,17 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Route the left crossfader bus through this effect unit. - + Envia o bus esquerdo do crossfader através desta unidade de efeito. Route the right crossfader bus through this effect unit. - + Envia o bus direito do crossfader através desta unidade de efeito. Right side active: parameter moves with right half of Meta Knob turn - + Lado direito ativo: o parâmetro muda com meia volta para a direita do Botão Meta @@ -14039,12 +14089,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Skin Settings Menu - + Menu Definições Skin Show/hide skin settings menu - + Mostra/Oculta menu de definições. @@ -14054,7 +14104,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Save the collection of samples loaded in the samplers. - + Guarda a colecção de samples carregadas nos samplers. @@ -14064,7 +14114,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Load a previously saved collection of samples into the samplers. - + Carrega uma colecção de samples guardada previamente nos samplers. @@ -14154,7 +14204,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Show/hide parameters for effects in this unit. - + Mostra/Oculta parâmetros para efeitos nesta unidade. @@ -14164,27 +14214,27 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Enable or disable this whole effect unit. - + Ativa ou desativa esta unidade completa de efeito. Controls the Meta Knob of all effects in this unit together. - + Controla o Meta Botão de todos os efeitos conjuntamente nesta unidade. Load next effect chain preset into this effect unit. - + Carrega a próxima cadeia de efeitos prédefinida nesta unidade de efeito. Load previous effect chain preset into this effect unit. - + Carrega a anterior cadeia de efeitos prédefinida nesta unidade de efeito. Load next or previous effect chain preset into this effect unit. - + Carrega a próxima ou anterior cadeia de efeitos prédefinida nesta unidade de efeito. @@ -14197,42 +14247,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Assign Effect Unit - + Atribuir Unidade de Efeito Assign this effect unit to the channel output. - + Atribuir esta unidade de efeito ao canal de saída. Route the headphone channel through this effect unit. - + Encaminha o canal de auscultadores através desta unidade de efeito. Route this deck through the indicated effect unit. - + Encaminha este leitor através da unidade de efeito indicada. Route this sampler through the indicated effect unit. - + Encaminha este sampler através da unidade de efeito indicada. Route this microphone through the indicated effect unit. - + Encaminha este microfone através da unidade de efeito indicada. Route this auxiliary input through the indicated effect unit. - + Encaminha esta entrada auxiliar através da unidade de efeito indicada. The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Esta unidade de efeito deve também ser atribuída a um leitor ou a outra fonte sonora para ouvir o efeito. @@ -14302,22 +14352,22 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Inactive: parameter not linked - + Inativo: parâmetro não ligado Active: parameter moves with Meta Knob - + Activo: o parâmetro move-se com o Botão Meta Left side active: parameter moves with left half of Meta Knob turn - + Lado esquerdo ativo: o parâmetro move-se com meia volta para a esquerda do Botão Meta Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - + Lado esquerdo e direito ativo: o parâmetro desloca-se ao longo da sua extensão com meia volta do Botão Meta e para trás com a outra meia volta. @@ -14401,7 +14451,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Reverse - + Inverter @@ -14478,7 +14528,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Indicates that the audio buffer is too small to do all audio processing. - + Indica que o buffer de áudio é muito pequeno para fazer todo o processamento de aúdio. @@ -14628,7 +14678,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Microphone Talkover Ducking Strength - + Amplitude da Redução no Talkover @@ -14638,7 +14688,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Changes the number of hotcue buttons displayed in the deck - + Altera o número de botões hotcue mostrados no leitor @@ -14907,17 +14957,17 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Crossfader Orientation - + Orientação do Crossfader Set the channel's crossfader orientation. - + Define a orientação do crossfader entre canais. Either to the left side of crossfader, to the right side or to the center (unaffected by crossfader) - + Quer para o lado esquerdo do crossfader, ou para o lado direito, ou para o centro (não afetada pelo crossfader) @@ -14999,7 +15049,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Hotcue - + Marcação @@ -15370,7 +15420,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Clear cover clears the set cover art -- does not touch files on disk - + Limpar capa do disco @@ -15570,323 +15620,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Criar &Nova Lista de Reprodução - + Create a new playlist Criar uma nova lista de reprodução - + Ctrl+n Ctrl+n - + Create New &Crate Criar Nova &Caixa - + Create a new crate Criar uma nova caixa - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Exibir - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Pode não ser suportado em todas as skins. - + Show Skin Settings Menu - + Mostrar Menu de Configurações do Tema - + Show the Skin Settings Menu of the currently selected Skin - + Mostra o menu das configurações do tema do tema atualmente selecionado - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar Seção do Microfone - + Show the microphone section of the Mixxx interface. Mostra a seção do microfone na interface do Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Mostrar Seção do Controle por Vinil - + Show the vinyl control section of the Mixxx interface. Mostra a seção do controle por vinil na interface do Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Mostrar Deck de Pré-escuta - + Show the preview deck in the Mixxx interface. Mostra o deck de pré-escuta na interface do Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Mostrar Arte da Capa - + Show cover art in the Mixxx interface. Mostra a arte da capa na interface do Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximiza a biblioteca de faixas para ocupar todo o espaço de tela disponível. - + Space Menubar|View|Maximize Library Espaço - + &Full Screen Te&la cheia - + Display Mixxx using the full screen Exibir o Mixxx usando Tela Cheia - + &Options &Opções - + &Vinyl Control Controle por &Vinil - + Use timecoded vinyls on external turntables to control Mixxx Use vinils com timecode em toca-discos externos para controlar o Mixxx - + Enable Vinyl Control &%1 Ativar Controle por Vinil &%1 - + &Record Mix &Gravar Mixagem - + Record your mix to a file Grave sua mixagem para um arquivo - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Ativar Transmissão Ao &Vivo - + Stream your mixes to a shoutcast or icecast server Transmita suas mixagens para um servidor shoutcast ou icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Ativar Atalhos de &Teclado - + Toggles keyboard shortcuts on or off Ativa/Desativa atalhos de teclado - + Ctrl+` Ctrl+` - + &Preferences &Preferências - + Change Mixxx settings (e.g. playback, MIDI, controls) Muda as configurações do Mixxx (ex.: reprodução, MIDI, controles) - + &Developer &Desenvolvedor - + &Reload Skin &Recarregar Skin - + Reload the skin Recarregar a skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Ferramen&tas de Desenvolvedor - + Opens the developer tools dialog Abre o diálogo das ferramentas de desenvolvedor - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Dados: Balde de &Experimento - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Ativa o modo de experimento. Coleta dados no balde de localização EXPERIMENT. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Dados: Balde &Base - + Enables base mode. Collects stats in the BASE tracking bucket. Ativa o modo base. Coleta dados no balde de localização BASE. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Deb&ugger Ativado - + Enables the debugger during skin parsing - + Ativa o debugger enquanto a skin estiver sendo analisada - + Ctrl+Shift+D Ctrl+Shift+D - + &Help A&juda - + Show Keywheel menu title @@ -15903,74 +15983,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel F12 - + &Community Support &Suporte da Comunidade - + Get help with Mixxx Obtenha ajuda com o Mixxx - + &User Manual Manual do &Usuário - + Read the Mixxx user manual. Leia o manual do usuário do Mixxx. - + &Keyboard Shortcuts Atalhos de &Teclado - + Speed up your workflow with keyboard shortcuts. Acelere seu fluxo de trabalho com atalhos de teclado. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Traduzir Este Programa - + Help translate this application into your language. Ajude a traduzir este aplicativo para o seu idioma. - + &About So&bre - + About the application Sobre a aplicação @@ -16005,25 +16085,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Limpar entrada - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Pesquisa - + Clear input Limpar entrada @@ -16034,93 +16102,87 @@ This can not be undone! Pesquisar... - + Clear the search bar input field - - Enter a string to search for - Insira uma palavra para pesquisar + + Return + Enter - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Atalho + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Foco + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return - Enter + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Sair da pesquisa + + Delete query from history + @@ -16206,12 +16268,12 @@ This can not be undone! Load to - + Carregar no Deck - + Deck @@ -16246,7 +16308,7 @@ This can not be undone! Adjust BPM - + Ajustar BPM @@ -16278,7 +16340,7 @@ This can not be undone! Add to Auto DJ Queue (replace) - + Adicionar à Fila Auto DJ (Substituir) @@ -16293,12 +16355,12 @@ This can not be undone! Remove from Playlist - + Remover da Playlist Remove from Crate - + Remover da Caixa @@ -16348,22 +16410,22 @@ This can not be undone! Import From MusicBrainz - + Importar do MusicBrainz Export To File Tags - + Exportar Para Tags Ficheiros BPM and Beatgrid - + BPM e Grelha de Batidas Play Count - + Contador de Leitura @@ -16373,7 +16435,7 @@ This can not be undone! Cue Point - + Ponto de Marcação @@ -16404,7 +16466,7 @@ This can not be undone! Waveform - + Forma de Onda @@ -16927,52 +16989,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Escolha o diretório da biblioteca de música - + controllers - + Cannot open database Não foi possível abrir o banco de dados - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -17067,12 +17129,12 @@ Clique OK para sair. Export Modified Track Metadata - + Exportar Metadados Modificados da Faixa Mixxx may wait to modify files until they are not loaded to any decks or samplers. If you do not see changed metadata in other programs immediately, eject the track from all decks and samplers or shutdown Mixxx. - + O Mixxx poderá esperar para modificar ficheiros até que não estejam carregados em quaisquer leitores ou samplers. Se não vir os metadados alterados noutros programas imediatamente, ejecte a faixa de todos os leitores e samplers ou encerre o Mixxx. @@ -17121,7 +17183,7 @@ Clique OK para sair. No network access - + Sem acesso a rede diff --git a/res/translations/mixxx_pt_PT.qm b/res/translations/mixxx_pt_PT.qm index f81985100433..0128e59693d0 100644 Binary files a/res/translations/mixxx_pt_PT.qm and b/res/translations/mixxx_pt_PT.qm differ diff --git a/res/translations/mixxx_pt_PT.ts b/res/translations/mixxx_pt_PT.ts index 267c8ef558dd..6d3894ab0712 100644 --- a/res/translations/mixxx_pt_PT.ts +++ b/res/translations/mixxx_pt_PT.ts @@ -46,7 +46,7 @@ Auto DJ - + Auto DJ @@ -312,7 +312,7 @@ # - + # @@ -353,7 +353,7 @@ BPM - + BPM @@ -706,7 +706,7 @@ ReplayGain - + ReplayGain @@ -749,7 +749,7 @@ The file '%1' could not be found. - + O arquivo '%1' não pôde ser encontrado. @@ -911,7 +911,7 @@ trace - Above + Profiling messages Remove Palette - + Remover Paleta @@ -1266,7 +1266,7 @@ trace - Above + Profiling messages Hotcues - + Hot Cues @@ -1597,7 +1597,7 @@ trace - Above + Profiling messages BPM +0.1 - + BPM +0.1 @@ -1918,12 +1918,12 @@ trace - Above + Profiling messages 1/8 - + 1/8 1/4 - + 1/4 @@ -3485,7 +3485,7 @@ trace - Above + Profiling messages Show/hide the scrolling waveforms. - + Mostrar/esconder as ondas. @@ -3643,34 +3643,34 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Tente recuperar reiniciando o seu controlador. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. - + O código do script precisa de ser corrigido. @@ -3971,7 +3971,7 @@ trace - Above + Profiling messages Unknown - + Desconhecido @@ -4134,7 +4134,7 @@ Shortcut: Shift+F9 Seconds - + Segundos @@ -4200,7 +4200,7 @@ crossfader, so that the intro starts at full volume. Repeat - + Repetir @@ -4288,7 +4288,9 @@ This can speed up beat detection on slower computers but may result in lower qua Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Converte batidas detectada pelo analisador em uma grade de batidas de tempo fixo. +Use esta configuração se suas faixas tem um tempo constante (como a maioria das músicas eletrônicas). +Frequentemente resulta em grades de batida de melhor qualidade, e não funciona direito em faixas que tem mudanças de tempo. @@ -4408,7 +4410,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Invert - + Inverter @@ -4468,7 +4470,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Didn't get any midi messages. Please try again. - + Não recebi nenhuma mensagem MIDI. Por favor tente de novo. @@ -4501,7 +4503,10 @@ Often results in higher quality beatgrids, but will not do well on tracks that h This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. You tried to learn: %1,%2 - + O controle que você clicou no Mixxx não pode ser mapeado. +Isso pode ser porque você está usando um tema antigo e esse controle não é mais suportado, ou você clicou em um controle que provê feedback visual e só pode ser mapeado em saídas como LEDs por meio de scripts. + +Você tentou mapear: %1,%2 @@ -4517,7 +4522,7 @@ You tried to learn: %1,%2 Developer Tools - + Ferramentas de Desenvolvimento @@ -4679,7 +4684,7 @@ You tried to learn: %1,%2 % - + % @@ -4768,7 +4773,7 @@ You tried to learn: %1,%2 Opus - + Opus @@ -4778,12 +4783,12 @@ You tried to learn: %1,%2 HE-AAC - + HE-AAC HE-AACv2 - + HE-AACv2 @@ -4871,7 +4876,7 @@ Two source connections to the same server that have the same mountpoint can not Mixxx Icecast Testing - + Mixxx Teste Icecast @@ -4941,7 +4946,7 @@ Two source connections to the same server that have the same mountpoint can not AIM - + AIM @@ -5032,7 +5037,7 @@ Two source connections to the same server that have the same mountpoint can not Login - + Login @@ -5132,7 +5137,7 @@ Two source connections to the same server that have the same mountpoint can not By hotcue number - + Por número do hotcue @@ -5166,7 +5171,7 @@ Two source connections to the same server that have the same mountpoint can not Hotcue palette - + Paleta de hotcue @@ -5636,6 +5641,16 @@ Aplicar as configurações e continuar? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -5649,7 +5664,7 @@ Aplicar as configurações e continuar? Off - + Inactivo @@ -5782,7 +5797,7 @@ Aplicar as configurações e continuar? 16% - + 16% @@ -5931,7 +5946,7 @@ You can always drag-and-drop tracks on screen to clone a deck. Double-press Load button to clone playing track - + Pressione Carregar duas vezes para clonar uma faixa que está tocando @@ -6250,62 +6265,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. O tamanho mínimo da skin selecionada é maior do que a sua resolução de tela. - + Allow screensaver to run Permitir correr o protetor de ecrã - + Prevent screensaver from running Impedir correr o protetor de ecrã - + Prevent screensaver while playing Prevenir o protetor de tela quando tocando - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Esta Skin não suporta esquemas de cores - + Information Informação - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -6386,7 +6401,7 @@ and allows you to pitch adjust them for harmonic mixing. OpenKey - + OpenKey @@ -6396,7 +6411,7 @@ and allows you to pitch adjust them for harmonic mixing. Traditional - + Tradicional @@ -6753,7 +6768,7 @@ and allows you to pitch adjust them for harmonic mixing. 250 px - + 250 px @@ -6788,7 +6803,7 @@ and allows you to pitch adjust them for harmonic mixing. ... - + ... @@ -6906,7 +6921,7 @@ and allows you to pitch adjust them for harmonic mixing. Crossfader Preferences - + Preferências do Crossfader @@ -6931,7 +6946,7 @@ and allows you to pitch adjust them for harmonic mixing. Scratching - + Scratching @@ -6946,7 +6961,7 @@ and allows you to pitch adjust them for harmonic mixing. Reverse crossfader (Hamster Style) - + Crossfader Invertido (Estilo Hamster) @@ -6956,12 +6971,12 @@ and allows you to pitch adjust them for harmonic mixing. Only allow EQ knobs to control EQ-specific effects - + Apenas deixar botões de EQ controlarem efeitos de EQ Uncheck to allow any effect to be loaded into the EQ knobs. - + Desmarque para deixar qualquer efeito ser carregado para os botões de EQ @@ -6971,7 +6986,7 @@ and allows you to pitch adjust them for harmonic mixing. Uncheck to allow different decks to use different EQ effects. - + Desmarque para deixar decks usarem diferentes efeitos de EQ @@ -6991,17 +7006,17 @@ and allows you to pitch adjust them for harmonic mixing. When checked, EQs are not processed, improving performance on slower computers. - + Quando marcado, os EQs não são processados, melhorando a performance em computadores lentos. Resets the equalizers to their default values when loading a track. - + Redefine os equalizadores para os seus valores padrão ao carregar uma faixa. Reset equalizers on track load - + Redefinir os equalizadores ao carregar uma faixa @@ -7032,13 +7047,13 @@ and allows you to pitch adjust them for harmonic mixing. 16 Hz - + 16 Hz 20.05 kHz - + 20.05 kHz @@ -7145,12 +7160,12 @@ and allows you to pitch adjust them for harmonic mixing. 10ms - + 10ms 256 - + 256 @@ -7160,12 +7175,12 @@ and allows you to pitch adjust them for harmonic mixing. 100Hz - + 100Hz 250ms - + 250ms @@ -7249,7 +7264,7 @@ and allows you to pitch adjust them for harmonic mixing. Recordings directory invalid - + Diretório de gravações inválido @@ -7277,7 +7292,7 @@ and allows you to pitch adjust them for harmonic mixing. Recording Preferences - + Preferências Gravação @@ -7303,12 +7318,12 @@ and allows you to pitch adjust them for harmonic mixing. Author - + Autor Album - + Album @@ -7716,7 +7731,7 @@ The loudness target is approximate and assumes track pregain and main output lev 0 - + 0 @@ -7848,7 +7863,7 @@ The loudness target is approximate and assumes track pregain and main output lev Vinyl Type - + Tipo do Vinil @@ -7858,12 +7873,12 @@ The loudness target is approximate and assumes track pregain and main output lev Deck 1 - + Deck 1 Deck 2 - + Deck 2 @@ -8254,12 +8269,12 @@ Selecione entre tipos diferentes de visualizações da forma de onda, o que dife Mixer - + Mixer Auto DJ - + Auto DJ @@ -8299,7 +8314,7 @@ Selecione entre tipos diferentes de visualizações da forma de onda, o que dife &Ok Preferences standard buttons: consider the other buttons to choose a unique Alt hotkey (&) - + &Ok @@ -8371,7 +8386,7 @@ Selecione entre tipos diferentes de visualizações da forma de onda, o que dife Recordings - + Gravações @@ -8475,7 +8490,7 @@ Selecione entre tipos diferentes de visualizações da forma de onda, o que dife MusicBrainz - + MusicBrainz @@ -9440,7 +9455,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Album - Álbum + Album @@ -9589,57 +9604,57 @@ Shown when VuMeter can not be displayed. Please keep OpenGL - + activate ativar - + toggle comutar - + right direita - + left esquerda - + right small direita curto - + left small esquerda curto - + up cima - + down abaixo - + up small cima curto - + down small abaixo pequeno - + Shortcut Atalho @@ -9712,22 +9727,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Importar Lista de Reprodução - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Ficheiros Playlist (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9750,12 +9765,12 @@ Do you really want to overwrite it? Cancel - + Cancelar Scanning: - + A Examinar: @@ -9997,131 +10012,131 @@ Do you really want to overwrite it? Continuar - + Load track to Deck %1 Carregar faixa no Deck %1 - + Deck %1 is currently playing a track. O Leitor %1 está presentemente a reproduzir uma faixa. - + Are you sure you want to load a new track? Tem certeza de que deseja carregar uma nova faixa? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Não existe nenhum dispositivo selecionado para este controlo do vinil. Por favor, selecione primeiro um dispositivo de entrada, nas preferências de hardware de som. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Não existe nenhum dispositivo de entrada selecionado para este controlo passthrough. Por favor, selecione primeiro um dispositivo de entrada, nas preferências de hardware de som. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Erro no arquivo de skin - + The selected skin cannot be loaded. A skin selecionada não pôde ser carregada. - + OpenGL Direct Rendering Interpretação Direta de OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Confirmar a Saída - + A deck is currently playing. Exit Mixxx? Um leitor está presentemente em reprodução. Sair do Mixxx? - + A sampler is currently playing. Exit Mixxx? Um sampler está presentemente em reprodução. Sair do Mixxx? - + The preferences window is still open. A janela de preferências ainda está aberta. - + Discard any changes and exit Mixxx? Descartar quaisquer mudanças e sair do Mixxx? @@ -10143,9 +10158,9 @@ Do you want to select an input device? - + Playlists - + Listas de Reprodução @@ -10184,27 +10199,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Alguns DJs constroem listas de reprodução antes de apresentações ao vivo, mas outros preferem construí-las na hora. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Ao utilizar uma lista de reprodução durante uma apresentação ao vivo, lembre-se de sempre prestar atenção em como o público reage à música que você escolheu tocar. - + Create New Playlist Criar uma Playlist Nova @@ -10406,7 +10421,7 @@ Deseja examinar a sua biblioteca para encontrar ficheiros de capa de disco, agor Rot64 - + Rot64 @@ -10456,7 +10471,7 @@ Deseja examinar a sua biblioteca para encontrar ficheiros de capa de disco, agor Script - + Script @@ -10602,7 +10617,7 @@ If you do not want to grant Mixxx access, click Cancel on the file picker. Mixxx Downsampling - + Decimação @@ -10830,7 +10845,7 @@ Com a largura a zero, permite o varrimento manual ao longo de toda a extensão d Regen - + Regen @@ -11241,12 +11256,12 @@ Valores mais altos resultam em menos atenuação das altas frequências. Ctrl+u - + Ctrl+u Ctrl+i - + Ctrl+i @@ -11256,7 +11271,7 @@ Valores mais altos resultam em menos atenuação das altas frequências. Ctrl+Shift+O - + Ctrl+Shift+O @@ -11286,7 +11301,7 @@ Valores mais altos resultam em menos atenuação das altas frequências. LinkwitzRiley8 Isolator - + LinkwitzRiley8 Isolator @@ -11306,7 +11321,7 @@ Valores mais altos resultam em menos atenuação das altas frequências. BQ EQ - + BQ EQ @@ -11326,7 +11341,7 @@ Valores mais altos resultam em menos atenuação das altas frequências. BQ EQ/ISO - + BQ EQ/ISO @@ -11527,7 +11542,7 @@ um Q mais alto afecta uma banda mais estreita de frequências. Q 2 - + Q 2 @@ -11681,7 +11696,7 @@ Tudo direita: fim do período do efeito Dry/Wet - + Seco/Molhado @@ -11854,7 +11869,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Transpassar @@ -12116,7 +12131,7 @@ may introduce a 'pumping' effect and/or distortion. There is less than 1 GiB of usable space in the recording folder - + Há menos de 1 GiB de espaço utilizável na pasta de gravação @@ -12160,7 +12175,7 @@ may introduce a 'pumping' effect and/or distortion. Playlists - + Listas de Reprodução @@ -12195,7 +12210,7 @@ may introduce a 'pumping' effect and/or distortion. Memory cues - + Cues de memória @@ -12267,7 +12282,7 @@ may introduce a 'pumping' effect and/or distortion. Tracks - + Faixas @@ -12607,7 +12622,7 @@ may introduce a 'pumping' effect and/or distortion. Min - + Min @@ -12829,7 +12844,7 @@ may introduce a 'pumping' effect and/or distortion. Indicates when the signal on the auxiliary is clipping, - + Indica quando o sinal auxiliar está clipando. @@ -12854,7 +12869,7 @@ may introduce a 'pumping' effect and/or distortion. Crossfader - + Crossfader @@ -13136,7 +13151,7 @@ may introduce a 'pumping' effect and/or distortion. Tempo - + Tempo @@ -13322,7 +13337,7 @@ may introduce a 'pumping' effect and/or distortion. Displays the current range of the tempo slider. - + Mostra o alcance atual do deslizante de tempo. @@ -13515,7 +13530,7 @@ may introduce a 'pumping' effect and/or distortion. Auto: Sets how much to reduce the music volume when the volume of active microphones rises above threshold. - + Auto: Define o quanto reduzir o volume da música quando o volume de microfones ativos passa de um determinado limite. @@ -15277,7 +15292,7 @@ Usar isto para alterar apenas o sinal já com os efeitos (molhado) de EQ e filtr Export Track Files To - + Exportar Faixas Para @@ -15366,7 +15381,7 @@ Usar isto para alterar apenas o sinal já com os efeitos (molhado) de EQ e filtr Time until charged: %1 - + Tempo até carregada: %1 @@ -15376,7 +15391,7 @@ Usar isto para alterar apenas o sinal já com os efeitos (molhado) de EQ e filtr Battery fully charged. - + Bateria totalmente carregada. @@ -15513,7 +15528,7 @@ This can not be undone! %1: %2 %1 = effect name; %2 = effect description - + %1: %2 @@ -15604,323 +15619,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Criar &Playlist Nova - + Create a new playlist Criar uma nova lista de reprodução - + Ctrl+n Ctrl+n - + Create New &Crate Criar Nova &Caixa - + Create a new crate Criar uma caixa nova - + Ctrl+Shift+N - + Ctrl+Shift+N - - + + &View &Exibir - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Pode não ser suportado em todas as skins. - + Show Skin Settings Menu Mostrar Menu de Configurações do Tema - + Show the Skin Settings Menu of the currently selected Skin Mostra o menu das configurações do tema do tema atualmente selecionado - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Mostrar Seção do Microfone - + Show the microphone section of the Mixxx interface. Mostra a seção microfone do interface Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section - + Ctrl+2 - + Show Vinyl Control Section Mostra Seção Controlo do Vinil - + Show the vinyl control section of the Mixxx interface. Mostra a seção controlo de vinil do interface Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Ctrl+3 - + Show Preview Deck Mostrar Leitor Antevisão - + Show the preview deck in the Mixxx interface. Mostra o leitor de antevisão no interface Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck - + Ctrl+4 - + Show Cover Art Mostrar Capa - + Show cover art in the Mixxx interface. Mostrar as capas dos discos no interface Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art - + Ctrl+6 - + Maximize Library Maximizar Biblioteca - + Maximize the track library to take up all the available screen space. Maximiza a biblioteca de faixas para ocupar todo o espaço disponível do ecrã. - + Space Menubar|View|Maximize Library Espaço - + &Full Screen Te&la cheia - + Display Mixxx using the full screen Mostrar o Mixxx utilizando o ecrã inteiro. - + &Options &Opções - + &Vinyl Control Controlo de &Vinil - + Use timecoded vinyls on external turntables to control Mixxx Use vinils com timecode em toca-discos externos para controlar o Mixxx - + Enable Vinyl Control &%1 Ativar Controlo do Vinil &%1 - + &Record Mix &Gravar Mistura - + Record your mix to a file Grave sua mixagem para um arquivo - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Ativar Transmissão Ao &Vivo - + Stream your mixes to a shoutcast or icecast server Difunda as suas misturas via um servidor de "shoutcast" ou "icecast" - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Ativar Atalhos de Teclado - + Toggles keyboard shortcuts on or off Alterna entre ligar/desligar os atalhos de teclado. - + Ctrl+` Ctrl+` - + &Preferences &Preferências - + Change Mixxx settings (e.g. playback, MIDI, controls) Muda as configurações do Mixxx (ex.: reprodução, MIDI, controles) - + &Developer &Desenvolvedor - + &Reload Skin &Recarregar Skin - + Reload the skin Recarregar a skin - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools &Ferramentas do Desenvolvedor - + Opens the developer tools dialog Abre o diálogo das ferramentas do desenvolvedor - + Ctrl+Shift+T - + Ctrl+Shift+T - + Stats: &Experiment Bucket Dados: Balde de &Experimento - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Ativa o modo Experiências. Coleta estatísticas no balde de rastreio EXPERIÊNCIAS. - + Ctrl+Shift+E - + Ctrl+Shift+E - + Stats: &Base Bucket Estatísticas: &Balde Base - + Enables base mode. Collects stats in the BASE tracking bucket. Ativa o modo Base. Coleta estatísticas no balde de rastreio BASE. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Deb&ugger Ativado - + Enables the debugger during skin parsing Ativa o debugger enquanto a skin estiver sendo analisada - + Ctrl+Shift+D - + Ctrl+Shift+D - + &Help &Ajuda - + Show Keywheel menu title @@ -15937,74 +15982,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + F12 - + &Community Support &Apoio da Comunidade - + Get help with Mixxx Obter ajuda com o Mixxx - + &User Manual Manual do &Utilizador - + Read the Mixxx user manual. Ler o manual do utilizador do Mixxx. - + &Keyboard Shortcuts &Atalhos de Teclado - + Speed up your workflow with keyboard shortcuts. Acelere o seu fluxo de trabalho com os atalhos de teclado. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Traduzir Este Programa - + Help translate this application into your language. Ajude a traduzir esta aplicação na sua língua. - + &About So&bre - + About the application Sobre esta aplicação @@ -16039,25 +16084,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Limpar entrada - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Procurar - + Clear input Limpar a entrada @@ -16068,92 +16101,86 @@ This can not be undone! Procurar... - + Clear the search bar input field - - Enter a string to search for - Digite uma frase para procurar + + Return + Enter - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Atalho + See User Manual > Mixxx Library for more information. + - - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return - Enter + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history - - - - - Esc + + in search history - - Exit search - Exit search bar and leave focus + + Delete query from history @@ -16280,7 +16307,7 @@ This can not be undone! Adjust BPM - + Ajustar BPM @@ -16961,52 +16988,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Escolher a pasta biblioteca musical - + controllers - + Cannot open database Não pode abrir a base de dados. - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -17042,7 +17069,7 @@ Clique OK para sair. Browse - + Navegar @@ -17062,7 +17089,7 @@ Clique OK para sair. Cancel - + Cancelar @@ -17155,7 +17182,7 @@ Clique OK para sair. No network access - + Sem acesso a rede diff --git a/res/translations/mixxx_ro.qm b/res/translations/mixxx_ro.qm index 3a66a052e63a..b64883bf962c 100644 Binary files a/res/translations/mixxx_ro.qm and b/res/translations/mixxx_ro.qm differ diff --git a/res/translations/mixxx_ro.ts b/res/translations/mixxx_ro.ts index d00e953e3f30..f548cfe75a49 100644 --- a/res/translations/mixxx_ro.ts +++ b/res/translations/mixxx_ro.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Elimină colecția ca sursă pistă - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Adaugă colecția ca sursă pistă @@ -148,7 +148,7 @@ BasePlaylistFeature - + New Playlist Listă de redare nouă @@ -159,7 +159,7 @@ - + Create New Playlist Crează listă de redare nouă @@ -189,113 +189,120 @@ Duplică - - + + Import Playlist Importare listă de redare - + Export Track Files - + Analyze entire Playlist Analizează întreaga listă de redare - + Enter new name for playlist: Introduceți noul nume pentru lista de redare: - + Duplicate Playlist Duplicare listă de redare - - + + Enter name for new playlist: Introduceți numele pentru noua listă de redare: - - + + Export Playlist Exportare listă de redare - + Add to Auto DJ Queue (replace) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Redenumește lista de redare - - + + Renaming Playlist Failed Redenumirea listei de redare a eşuat - - - + + + A playlist by that name already exists. Există deja o listă de redare cu acelaşi nume. - - - + + + A playlist cannot have a blank name. O listă de redare nu poate fi nedenumită. - + _copy //: Appendix to default name when duplicating a playlist _copiere - - - - - - + + + + + + Playlist Creation Failed Crearea listei de redare a eşuat - - + + An unknown error occurred while creating playlist: O eroare necunoscută a apărut în timpul creării listei de redare: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) Listă de redare M3U (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Text lizibil (*.txt) @@ -303,12 +310,12 @@ BaseSqlTableModel - + # # - + Timestamp Marcaj temporal @@ -316,7 +323,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Nu se poate încărca pista. @@ -324,137 +331,142 @@ BaseTrackTableModel - + Album Album - + Album Artist Album artist - + Artist Artist - + Bitrate Rată de biți - + BPM BPM - + Channels Canale - + Color - + Comment Comentariu - + Composer Compozitor - + Cover Art Copertă - + Date Added Data adăugării - + Last Played - + Duration Durată - + Type Tip - + Genre Gen - + Grouping Grupare - + Key Tastă - + Location Locație - + + Overview + + + + Preview Previzualizare - + Rating Apreciere - + ReplayGain Înlocuire câștig - + Samplerate - + Played Redat - + Title Titlu - + Track # Pista # - + Year An - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -542,67 +554,77 @@ BrowseFeature - + Add to Quick Links Adaugă la link-uri rapide - + Remove from Quick Links Elimină din link-uri rapide - + Add to Library Adaugă la bibliotecă - + Refresh directory tree - + Quick Links Link-uri rapide - - + + Devices Dispozitive - + Removable Devices Medii amovibile - - + + Computer - + Music Directory Added Directorul Muzică s-a adăugat - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Ați adăugat unul sau mai multe directoare. Pistele din aceste directoare nu vor fi disponibile până ce nu veți rescana biblioteca. Doriți să fie rescanată acum? - + Scan Scanare - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -1045,13 +1067,13 @@ trace - Above + Profiling messages - + Set to full volume Configurează la volum maxim - + Set to zero volume Configurează la volum 0 @@ -1076,13 +1098,13 @@ trace - Above + Profiling messages - + Headphone listen button Buton ascultare în căști - + Mute button Buton amuțire @@ -1093,25 +1115,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Orientare mixer (ex.-stânga,-dreapta,-centru) - + Set mix orientation to left Configurează orientarea mixerului la stânga - + Set mix orientation to center Configurează orientarea mixerului la centru - + Set mix orientation to right Configurează orientarea mixerului la dreapta @@ -1152,22 +1174,22 @@ trace - Above + Profiling messages - + Toggle quantize mode Comută mod cuantificare - + One-time beat sync (tempo only) Sincronizare bătaie o singură dată (numai tempo) - + One-time beat sync (phase only) Sincronizare bătaie o singură dată (numai fază) - + Toggle keylock mode Comută mod keylock @@ -1177,193 +1199,193 @@ trace - Above + Profiling messages Egalizatoare - + Vinyl Control Control disc vinil - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) Comută mod control disc vinil (ABS/REL/CONST) - + Pass through external audio into the internal mixer Trece audio extern în mixerul intern - + Cues Cue - + Cue button Buton cue - + Set cue point Configurare punct cue - + Go to cue point Mergi la punct cue - + Go to cue point and play Mergi la punct cue și redă - + Go to cue point and stop Mergi la punct cue și oprește - + Preview from cue point Previzualizare de la punct cue - + Cue button (CDJ mode) Buton cue (mod CDJ) - + Stutter cue - + Hotcues Hotcue - + Set, preview from or jump to hotcue %1 Configurează, previzualizează de la sau sari la hotcue %1 - + Clear hotcue %1 Curăță hotcue %1 - + Set hotcue %1 Configurează hotcue %1 - + Jump to hotcue %1 Sări la hotcue %1 - + Jump to hotcue %1 and stop Sări la hotcue %1 și oprește - + Jump to hotcue %1 and play Sări la hotcue %1 și redă - + Preview from hotcue %1 Previzualizează hotcue %1 - - + + Hotcue %1 Hotcue %1 - + Looping Repetă în buclă - + Loop In button Buton începere buclă - + Loop Out button Buton terminare buclă - + Loop Exit button Buton ieșire buclă - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats Mută bucla înainte cu %1 bătăi - + Move loop backward by %1 beats Mută bucla înapoi cu %1 bătăi - + Create %1-beat loop Creează buclă de %1 bătăi - + Create temporary %1-beat loop roll Creează o buclă temporară de %1 bătăi @@ -1479,20 +1501,20 @@ trace - Above + Profiling messages - - + + Volume Fader Fader Volume - + Full Volume Volum total - + Zero Volume Volum zero @@ -1508,7 +1530,7 @@ trace - Above + Profiling messages - + Mute Amuțire @@ -1519,7 +1541,7 @@ trace - Above + Profiling messages - + Headphone Listen Ascultare în căști @@ -1540,25 +1562,25 @@ trace - Above + Profiling messages - + Orientation Orientare - + Orient Left Orientare stânga - + Orient Center Orientare centru - + Orient Right Orientare dreapta @@ -1628,82 +1650,82 @@ trace - Above + Profiling messages Ajustează la dreapta grila bătaie - + Adjust Beatgrid Ajustare grilă bătaie - + Align beatgrid to current position Aliniază grila bătaie la poziția curentă - + Adjust Beatgrid - Match Alignment Ajustează grila bătaie - Potrivește aliniament - + Adjust beatgrid to match another playing deck. Ajustează grila bătaie să se potrivească cu alt deck care redă. - + Quantize Mode Mod cuantificare - + Sync Sincronizare - + Beat Sync One-Shot Sincronizează bătaia o singură dată - + Sync Tempo One-Shot Sincronizează tempo o singură dată - + Sync Phase One-Shot Sincronizează faza o singură dată - + Pitch control (does not affect tempo), center is original pitch Control pitch (nu afectează tempo), la centru este pitch original - + Pitch Adjust Ajustare pitch - + Adjust pitch from speed slider pitch - + Match musical key Potrivește cheia muzicală - + Match Key Potrivește cheia - + Reset Key Resetează cheia - + Resets key to original Resetează cheia la original @@ -1744,451 +1766,451 @@ trace - Above + Profiling messages Egalizator joase - + Toggle Vinyl Control Comută controlul disc vinil - + Toggle Vinyl Control (ON/OFF) Comută control disc vinil (Pornit/Oprit) - + Vinyl Control Mode Mod control disc vinil - + Vinyl Control Cueing Mode Control vinil mod cue - + Vinyl Control Passthrough - + Vinyl Control Next Deck Control disc vinil deck-ul următor - + Single deck mode - Switch vinyl control to next deck Mod deck unic - Comută controlul discului vinil la următorul deck - + Cue Cue - + Set Cue Configurare cue - + Go-To Cue Mergi la cue - + Go-To Cue And Play Mergi la cue și redă - + Go-To Cue And Stop Mergi la cue și oprește - + Preview Cue Previzualizare cue - + Cue (CDJ Mode) Cue (mod CDJ) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 Curăță hotcue %1 - + Set Hotcue %1 Configurează hotcue %1 - + Jump To Hotcue %1 Sări la hotcue %1 - + Jump To Hotcue %1 And Stop Sări la hotcue %1 și oprește - + Jump To Hotcue %1 And Play Sări la hotcue %1 și redă - + Preview Hotcue %1 Previzualizare hotcue %1 - + Loop In Intrare buclă - + Loop Out Ieșire buclă - + Loop Exit Ieșire buclă - + Reloop/Exit Loop Reluare/ieșire buclă - + Loop Halve Înjumătățește bucla - + Loop Double Buclă dublă - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats Mută bucla cu +%1 bătăi - + Move Loop -%1 Beats Mută bucla cu -%1 bătăi - + Loop %1 Beats Buclă %1 bătăi - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Adăugaţi în selecţia Auto DJ (jos) - + Append the selected track to the Auto DJ Queue Adaugă pistele selectate la Coada Auto DJ - + Add to Auto DJ Queue (top) Adăugaţi în selecţia Auto DJ (sus) - + Prepend selected track to the Auto DJ Queue - + Load Track Încarcă pista - + Load selected track Încarcă pista selectată - + Load selected track and play Încarcă pista selectată și redă - - + + Record Mix Mixer înregistrare - + Toggle mix recording Comută mixer înregistrare - + Effects Efecte - + Quick Effects Efecte rapide - + Deck %1 Quick Effect Super Knob Super buton efect rapid Deck %1 - + Quick Effect Super Knob (control linked effect parameters) Super buton efect rapid (control parametrii efecte legate) - - + + Quick Effect Efect rapid - + Clear Unit Curăță unitatea - + Clear effect unit Curăță unitatea efectelor - + Toggle Unit Comută unitatea - + Dry/Wet Uscat/umed - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob Super buton - + Next Chain Lanțul următor - + Assign Atribuie - + Clear Curăță - + Clear the current effect Curăță efectul curent - + Toggle Comutare - + Toggle the current effect Comută efectul curent - + Next Următor - + Switch to next effect Comută la efectul următor - + Previous Anterior - + Switch to the previous effect Comută la efectul anterior - + Next or Previous Următor sau anterior - + Switch to either next or previous effect Comută fie la următorul sau anteriorul efect - - + + Parameter Value Valoare parametru - - + + Microphone Ducking Strength Intensitate atenuare microfon - + Microphone Ducking Mode Mod atenuare microfon - + Gain Câștig - + Gain knob Buton câștig - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle Comutare DJ automat - + Toggle Auto DJ On/Off Comută Auto DJ Pornit/Oprit - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. Arată sau ascunde mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore Bibliotecă mărește/restaurează - + Maximize the track library to take up all the available screen space. Mărește spațiul bibliotecii pentru a acoperii tot spațiul disponibil al ecranului. - + Effect Rack Show/Hide Arată/ascunde rack efect - + Show/hide the effect rack Arată/ascunde rack-ul efectului - + Waveform Zoom Out Redu zoom formă de undă @@ -2203,102 +2225,102 @@ trace - Above + Profiling messages Câștig căști - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Viteză redare - + Playback speed control (Vinyl "Pitch" slider) Control viteză redare (Vinyl "Pitch" cursor) - + Pitch (Musical key) Pitch (Cheie muzicală) - + Increase Speed Mărește viteza - + Adjust speed faster (coarse) Ajustează viteza repede (brut) - + Increase Speed (Fine) Mărește viteza (Fin) - + Adjust speed faster (fine) Ajustează viteza rapid (fin) - + Decrease Speed Scade viteza - + Adjust speed slower (coarse) Ajustează viteza lent (brut) - + Adjust speed slower (fine) Ajustează viteza lent (fin) - + Temporarily Increase Speed Mărește viteza temporar - + Temporarily increase speed (coarse) Mărește viteza temporar (brut) - + Temporarily Increase Speed (Fine) Mărește viteza temporar (Fin) - + Temporarily increase speed (fine) Mărește viteza temporar (fin) - + Temporarily Decrease Speed Scade viteza temporar - + Temporarily decrease speed (coarse) Scade vitea temporar (brut) - + Temporarily Decrease Speed (Fine) Scade viteza temporar (Fin) - + Temporarily decrease speed (fine) Scade viteza temporar (fin) @@ -2450,1053 +2472,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - - + + Sort hotcues by position - - + + Sort hotcues by position (remove offsets) - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length Înjumătățește lungimea buclei - + Double the loop length Dublează lungimea buclei - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation Navigare - + Move up Mută în sus - + Equivalent to pressing the UP key on the keyboard Echivalent cu apăsarea tastei UP pe tastatură - + Move down Mută în jos - + Equivalent to pressing the DOWN key on the keyboard Echivalent cu apăsarea tastei DOWN pe tastatură - + Move up/down Mută în sus/jos - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up Derulează în sus - + Equivalent to pressing the PAGE UP key on the keyboard Echivalent cu apăsarea tastei PAGE UP pe tastatură - + Scroll Down Derulează în jos - + Equivalent to pressing the PAGE DOWN key on the keyboard Echivalent cu apăsarea tastei PAGE DOWN pe tastatură - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing Activează sau dezactivează procesarea efectului - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset Preconfigurare lanț următor - + Previous Chain Lanț anterior - + Previous chain preset Anterioara preconfigurare lanț - + Next/Previous Chain Următorul/Anteriorul lanț - + Next or previous chain preset Preconfigurare lanț următoare sau anterioară - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary Microfon / Auxiliar - + Microphone On/Off Microfon pornit/oprit - + Microphone on/off Microfon pornit/oprit - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) Comută mod atenuare microfon (OPRIT, AUTO, MANUAL) - + Auxiliary On/Off Auxiliar pornit/oprit - + Auxiliary on/off Auxiliar pornit/oprit - + Auto DJ Auto DJ - + Auto DJ Shuffle Amestecă Auto DJ - + Auto DJ Skip Next Auto DJ omite următoarea - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next Estompare DJ automat la următoarea - + Trigger the transition to the next track Comută tranziția următoarei piste - + User Interface Interfaţă utilizator - + Samplers Show/Hide Arată/ascunde samplere - + Show/hide the sampler section Arată/ascunde secțiunea sampler - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide Arată/ascunde controlul disc vinil - + Show/hide the vinyl control section Arată/ascunde secțiunea control disc vinil - + Preview Deck Show/Hide Arată/ascunde previzualizare deck - + Show/hide the preview deck Arată/ascunde previzualizarea deck-ului - + Toggle 4 Decks Comută 4 Decuri - + Switches between showing 2 decks and 4 decks. Comută între 2 decuri sau 4 decuri. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide Arată/ascunde rotire disk vinil - + Show/hide spinning vinyl widget Arată/ascunde control rotire disc vinil - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom Zoom formă de undă - + Waveform Zoom Zoom formă de undă - + Zoom waveform in Mărește zoom formă de undă - + Waveform Zoom In Mărește zoom formă de undă - + Zoom waveform out Redu zoom formă de undă - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3611,32 +3643,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Încercați recuperarea resetând controlerul. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. Codul scriptului trebuie să fie reparat. @@ -3744,7 +3776,7 @@ trace - Above + Profiling messages Importă colecție - + Export Crate Exportă colecție @@ -3754,7 +3786,7 @@ trace - Above + Profiling messages Deblochează - + An unknown error occurred while creating crate: A apărut o eroare la crearea colecției: @@ -3763,12 +3795,6 @@ trace - Above + Profiling messages Rename Crate Redenumește colecția - - - - Export to Engine Prime - - Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. @@ -3786,17 +3812,17 @@ trace - Above + Profiling messages Redenumirea colecției a eșuat - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Text lizibil (*.txt) - + M3U Playlist (*.m3u) Listă de redare M3U (*.m3u) @@ -3805,6 +3831,12 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. Colecțiile sunt un mare mod de a ajuta organizarea muzicii dorite cu DJ. + + + + Export to Engine DJ + + Crates let you organize your music however you'd like! @@ -3916,12 +3948,12 @@ trace - Above + Profiling messages Foști contribuitori - + Official Website - + Donate @@ -4433,37 +4465,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Dacă maparea nu funcționează încercați activarea opțiunilor avansate de mai jos iar apoi încercați controlul din nou. Sau apăsați Reâncearcă pentru a detecta din nou controlul midi. - + Didn't get any midi messages. Please try again. Nu s-a primit nici un mesaj midi. Reâncercați. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. Nu se poate detecta o mapare -- încercați din nou. Asigurați-vă că atingeți un singur control odată. - + Successfully mapped control: Control mapat cu succes: - + <i>Ready to learn %1</i> <i>Gata de învățat %1</i> - + Learning: %1. Now move a control on your controller. Se învață: %1. Acum deplasați un control pe controler. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4502,17 +4534,17 @@ You tried to learn: %1,%2 - + Log Jurnal - + Search Căutare - + Stats Stări @@ -5165,114 +5197,114 @@ associated with each key. DlgPrefController - + Apply device settings? Se aplică configurările dispozitivului? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Configurările trebuie aplicate înaintea pornirii asistentului de învățare. Se aplică configurările și se continuă? - + None Niciuna - + %1 by %2 %1 cu %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting Depanarea - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings Curăță mapările de intrare - + Are you sure you want to clear all input mappings? Sigur doriți să curățați toate mapările de intrare? - + Clear Output Mappings Curăță mapări de ieșire - + Are you sure you want to clear all output mappings? Sigur doriți să curățați toate mapările de ieșire? @@ -5290,100 +5322,100 @@ Se aplică configurările și se continuă? Activat - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Descriere: - + Support: Asistență: - + Screens preview - + Input Mappings Mapări de intrare - - + + Search Căutare - - + + Add Adaugă - - + + Remove Elimină @@ -5403,17 +5435,17 @@ Se aplică configurările și se continuă? - + Mapping Info - + Author: Autor: - + Name: Nume: @@ -5423,28 +5455,28 @@ Se aplică configurările și se continuă? Asistent învățare (numai MIDI) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Curăță tot - + Output Mappings Mapări de ieșire @@ -5603,6 +5635,16 @@ Se aplică configurările și se continuă? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6194,62 +6236,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Dimensiunea minimă a aspectului aplicației este mai mare decât rezoluția ecranului. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Acest aspect aplicație nu suportă scheme de culoare - + Information Informație - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7417,173 +7459,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) Implicit (întârziere lungă) - + Experimental (no delay) Experimental (fără întârziere) - + Disabled (short delay) Dezactivat (întârziere scurtă) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled Dezactivat - + Enabled Activat - + Stereo Stereo - + Mono Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Eroare de configurație @@ -7601,131 +7642,131 @@ The loudness target is approximate and assumes track pregain and main output lev API sunet - + Sample Rate Rată eșanționare - + Audio Buffer Buffer audio - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds ms - + 20 ms 20 ms - + Buffer Underflow Count - + 0 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization Sincronizare plăci de sunet - + Output Ieșire - + Input Intrare - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics Sfaturi și diagnosticuri - + Downsize your audio buffer to improve Mixxx's responsiveness. Scădeți dimensiunea tamponului audio pentru a îmbunătății reacția de răspuns Mixxx. - + Query Devices Interogare dispozitive @@ -8171,47 +8212,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Placă de sunet - + Controllers Controlere - + Library Bibliotecă - + Interface Interfață - + Waveforms Forme de undă - + Mixer Mixer - + Auto DJ Auto DJ - + Decks - + Colors @@ -8246,47 +8287,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Efecte - + Recording Înregistrare - + Beat Detection Detectare bătaie - + Key Detection Detecție cheie - + Normalization Normalizare - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Control disc vinil - + Live Broadcasting Transmisie live - + Modplug Decoder Decodor Modplug @@ -8642,284 +8683,284 @@ This can not be undone! Rezumat - + Filetype: Tip fișier: - + BPM: BPM: - + Location: Locație: - + Bitrate: Rata de biți: - + Comments Comentarii - + BPM BPM - + Sets the BPM to 75% of the current value. Configurează BPM la 75% din valoarea actuală. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. Configurează BPM la 50% din valoarea actuală. - + Displays the BPM of the selected track. Arată BPM pentru pista selectată. - + Track # Pista # - + Album Artist Album artist - + Composer Compozitor - + Title Titlu - + Grouping Grupare - + Key Tastă - + Year An - + Artist Artist - + Album Album - + Genre Gen - + ReplayGain: - + Sets the BPM to 200% of the current value. Configurează BPM la 200% față de valoarea actuală. - + Double BPM Dublează BPM - + Halve BPM Înjumătățește BPM - + Clear BPM and Beatgrid Curăță BPM și grila bătaie - + Move to the previous item. "Previous" button Mută la elementul anterior. - + &Previous &Anterior - + Move to the next item. "Next" button Mută la elementul următor. - + &Next &Următor - + Duration: Durată: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser Deschide în navigatorul de fișiere - + Samplerate: - + Track BPM: BPM pistă: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. Configurează BPM la 66% din valoarea actuală. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. Sfat: Utilizați vizualizare Analiză bibliotecă pentru a rula detecția BPM. - + Save changes and close the window. "OK" button Salvează modificările și închide fereastra. - + &OK &OK - + Discard changes and close the window. "Cancel" button Descarcă modificările și închide fereastra. - + Save changes and keep the window open. "Apply" button Salvează modificările și păstrează fereastra deschisă. - + &Apply &Aplică - + &Cancel &Anulare - + (no color) @@ -9076,7 +9117,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9278,27 +9319,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) Soundtouch (rapid) - + Rubberband (better) Rubberband (optim) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9513,15 +9554,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. Este activat modul sigur - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9533,57 +9574,57 @@ Shown when VuMeter can not be displayed. Please keep OpenGL. - + activate activează - + toggle comută - + right dreapta - + left stânga - + right small dreapta mic - + left small stânga mic - + up sus - + down jos - + up small sus mic - + down small jos mic - + Shortcut Scurtătură @@ -9591,62 +9632,62 @@ OpenGL. Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9656,22 +9697,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Importă listă de redare - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Fişiere listă de redare (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9718,27 +9759,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found Controlul(e) Mixxx nu s-au găsit - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. Unele LED-uri sau alte reacții-control este posibil să nu funcționeze corect. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) * Verificați să vedeți dacă denumirile controlului Mixxx sunt scrise corect în fișierul de mapare (.xml) @@ -9798,18 +9839,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Piste lipsă - + Hidden Tracks Piste ascunse - Export to Engine Prime + Export to Engine DJ @@ -9821,209 +9862,250 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Dispozitivul audio este ocupat - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Reâncearcă</b> după închiderea altei aplicații sau reconectarea unui dispozitiv de sunet - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Reconfigurare</b> configurări dispozitivul de sunet al Mixxx. - - + + Get <b>Help</b> from the Mixxx Wiki. Primeşte <b>ajutor</b> de pe Wiki Mixxx. - - - + + + <b>Exit</b> Mixxx. <b>Ieşi</b> din Mixxx. - + Retry Reâncearcă - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Reconfigurează - + Help Ajutor - - + + Exit Ieși - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices Nu sunt dispozitive de ieșire - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Mixxx a fost configurat fără nici un dispozitiv de ieșire. Procesarea audio va fi dezactivată fără un dispozitiv de ieșire configurat. - + <b>Continue</b> without any outputs. <b>Contină</b> fără nici o ieșire. - + Continue Continuă - + Load track to Deck %1 Încarcă pista în Deck-ul %1 - + Deck %1 is currently playing a track. Deck-ul %1 redă actualmente o pistă. - + Are you sure you want to load a new track? Sigur doriți să încărcați o nouă pistă? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Nu este selectat nici un dispozitiv de intrare pentru acest control disc vinil. Selectați întâi un dispozitiv de intrare din preferințele plăcii de sunet. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Eroare în fișier aspect aplicație - + The selected skin cannot be loaded. Aspectul aplicației selectat nu poate fi încărcat. - + OpenGL Direct Rendering Randare directă OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Confirmare ieșire - + A deck is currently playing. Exit Mixxx? Un deck actualmente redă. Se oprește Mixxx? - + A sampler is currently playing. Exit Mixxx? Un sampler redă curent. Iese Mixxx? - + The preferences window is still open. Fereastra preferințe este încă deschisă. - + Discard any changes and exit Mixxx? Se descarcă orice modificări și se închide Mixxx? @@ -10039,13 +10121,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Blochează - - + + Playlists Liste de redare @@ -10055,32 +10137,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Deblochează - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Unii DJ-ei construiesc liste de redare înainte de a se prezenta live, dar alții preferă să le construiască din zbor. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Când utilizați o listă de redare în timpul unei sesiuni DJ live, nu uitați ca întotdeauna să acordați o atenție deosebită cum reacționează ascultătorii la muzica pe care ați ales să o redați. - + Create New Playlist Crează listă de redare nouă @@ -11572,7 +11680,7 @@ Fully right: end of the effect period - + Deck %1 Deck %1 @@ -11705,7 +11813,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11736,7 +11844,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11869,12 +11977,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11909,42 +12017,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12002,54 +12110,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Liste de redare - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12608,7 +12716,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl Învârtire disc vinil @@ -12790,7 +12898,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Copertă @@ -13026,197 +13134,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier Ajustează bătăile mai devreme - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later Ajustează bătăile mai târziu - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. Arată/ascunde secțiunea rotire disc vinil. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play Redare - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13454,926 +13562,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - - + + Drag a Hotcue button here to continue playing after releasing the Hotcue. - + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank Salvează bancă sampler - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank Încarcă bancă sampler - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob Super buton - + Next Chain Lanțul următor - + Previous Chain Lanț anterior - + Next/Previous Chain Următorul/Anteriorul lanț - + Clear Curăță - + Clear the current effect. Curăță efectul curent. - + Toggle Comutare - + Toggle the current effect. - + Next Următor - + Clear Unit Curăță unitatea - + Clear effect unit. Curăță unitatea efectelor - + Show/hide parameters for effects in this unit. - + Toggle Unit Comută unitatea - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. Comută la efectul următor. - + Previous Anterior - + Switch to the previous effect. Comută la efectul anterior. - + Next or Previous Următor sau anterior - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter Parametru efect - + Adjusts a parameter of the effect. Ajustează un parametru al efectului. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter Parametru egalizator - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Ajustare grilă bătaie - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. Ajustează grila bătaie să se potrivească cu alt deck care redă. - + If quantize is enabled, snaps to the nearest beat. Dacă cuantizarea este activată, fixează la cea mai apropiată bătaie. - + Quantize Cuantificare - + Toggles quantization. Comută cuantificare. - + Loops and cues snap to the nearest beat when quantization is enabled. Bucle și cue se fixează la cea mai apropiată bătaie când cuantizarea este activată. - + Reverse Invers - + Reverses track playback during regular playback. Inversează redarea pistei în timpul redării normale. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Redare/Pauză - + Jumps to the beginning of the track. Sări la începutul pistei. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. Crește pitch cu un semiton. - + Decreases the pitch by one semitone. Scade pitch cu un semiton. - + Enable Vinyl Control Activează control disc vinil - + When disabled, the track is controlled by Mixxx playback controls. Când este dezactivat, pista este controlată de controalele de redare Mixxx. - + When enabled, the track responds to external vinyl control. Când este activat, pista răspunde la controlul discului de vinil extern. - + Enable Passthrough Activează trecerea - + Indicates that the audio buffer is too small to do all audio processing. Indică faptul că buffer-ul audio este prea mic pentru a efectua toate procesările audio. - + Displays cover artwork of the loaded track. Arată coperta pistei încărcate. - + Displays options for editing cover artwork. Afișează opțiuni pentru editarea copertei. - + Star Rating Stea evaluare - + Assign ratings to individual tracks by clicking the stars. Atribuie evaluări pistelor individuale apăsând stelele. @@ -14508,33 +14622,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. Pornește redarea de la începutul pistei. - + Jumps to the beginning of the track and stops. Sări la începutul pistei și oprește. - - + + Plays or pauses the track. Redă sau pauzează pista. - + (while playing) (în timp ce se redă) @@ -14554,215 +14668,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (în timp cât este oprit) - + Cue Cue - + Headphone Căști - + Mute Amuțire - + Old Synchronize Sincronizare veche - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. Sincronizează la primul deck (în ordine numerică) care redă o pistă și are un BPM. - + If no deck is playing, syncs to the first deck that has a BPM. Dacă nici un deck nu redă, sincronizează cu primul deck care are un BPM. - + Decks can't sync to samplers and samplers can only sync to decks. Deck-urile nu pot sincroniza samplerele iar samplerele pot doar sincroniza deck-urile. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. Resetează cheia la cheia originală a pistei. - + Speed Control Control viteză - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust Ajustare pitch - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + Drag this button onto a Play button while previewing to continue playback after release. - + Dragging with Shift key pressed will not start previewing the hotcue. - + Record Mix Mixer înregistrare - + Toggle mix recording. - + Enable Live Broadcasting Activare transmisie live - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. Redarea se va relua de unde ar fi trebuit să fie pista dacă nu a intrat în buclă. - + Loop Exit Ieșire buclă - + Turns the current loop off. Oprește bucla curentă. - + Slip Mode Mod adormire - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. Cînd se activează, redarea continuă în fundal fără sunet în timpul unei bucle, inversări, zgârieturi etc. - + Once disabled, the audible playback will resume where the track would have been. Odată dezactivat, redarea auzibilă se va relua de unde pista ar fi fost. - + Track Key The musical key of a track Cheie pistă - + Displays the musical key of the loaded track. Afișează cheia muzicală a pistei încărcate. - + Clock Ceas - + Displays the current time. Afișează ora actuală. - + Audio Latency Usage Meter Contor utilizare latență audio - + Displays the fraction of latency used for audio processing. Afișează fracția latenței utilizată pentru procesare audio. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. Nu activați keylock, efecte sau deck-uri suplimentare în această situație. - + Audio Latency Overload Indicator Indicator suprasarcină latență audio @@ -14807,254 +14921,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind Derulare rapidă înapoi - + Fast rewind through the track. Derulare rapidă înapoi prin pistă. - + Fast Forward Derulare rapidă înainte - + Fast forward through the track. Derulare rapidă înainte prin pistă. - + Jumps to the end of the track. Sări la sfârșitul pistei. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control Control pitch - + Pitch Rate Rată pitch - + Displays the current playback rate of the track. Afișează ritmul de redare curentă a pistei. - + Repeat Repetă - + When active the track will repeat if you go past the end or reverse before the start. - + Eject Scoate - + Ejects track from the player. Scoate pista din player. - + Hotcue Hotcue - + If hotcue is set, jumps to the hotcue. Dacă hotcue este configurat, sări la hotcue. - + If hotcue is not set, sets the hotcue to the current play position. Dacă hotcue nu este configurat, configurează hotcue la poziția curentă de redare. - + Vinyl Control Mode Mod control disc vinil - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status Stare disc vinil - + Provides visual feedback for vinyl control status: - + Green for control enabled. Verde pentru activare control. - + Blinking yellow for when the needle reaches the end of the record. Galben clipitor când acul atinge sfârșitul înregistrării. - + Loop-In Marker Marcaj intrare buclă - + Loop-Out Marker Marcaj ieșire buclă - + Loop Halve Înjumătățește bucla - + Halves the current loop's length by moving the end marker. Înjumătățește lungimea buclei curente prin mutarea marcajului de sfârșit. - + Deck immediately loops if past the new endpoint. - + Loop Double Buclă dublă - + Doubles the current loop's length by moving the end marker. Dublează lungimea buclei curente mutând marcajul de sfârșit. - + Beatloop - + Toggles the current loop on or off. Comută bucla actuală pornit sau oprit. - + Works only if Loop-In and Loop-Out marker are set. Funcționează numai dacă marcajele intrare buclă și ieșire buclă sunt configurate. - + Vinyl Cueing Mode Mod cue disc vinil - + Determines how cue points are treated in vinyl control Relative mode: Determină cum sunt tratate punctele cue în mod control disc vinil relativ: - + Off - Cue points ignored. Închis - Punctele cue ignorate. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time Timp pistă - + Track Duration Durată pistă - + Displays the duration of the loaded track. Afișează durata pistei încărcate. - + Information is loaded from the track's metadata tags. Informația este încărcată din metadata etichetelor pistei. - + Track Artist Artist piesă - + Displays the artist of the loaded track. Afișează artistul pistei încărcate. - + Track Title Titlu piesă - + Displays the title of the loaded track. Afișează titlul pistei încărcate. - + Track Album Album - + Displays the album name of the loaded track. Afișează numele albumului pistei încărcate. - + Track Artist/Title Artist/titlu pistă - + Displays the artist and title of the loaded track. Afișează artistul și titlul pistei încărcate. @@ -15062,12 +15176,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15282,47 +15396,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15447,323 +15561,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Crează Listă de redare &nouă - + Create a new playlist Creează o nouă listă de redare - + Ctrl+n Ctrl+n - + Create New &Crate Creează &Colecție nouă - + Create a new crate Creează o colecţie nouă - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Vizualizare - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Poate să nu fie suportat pe toate aspectele aplicației. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Arată secțiunea microfon - + Show the microphone section of the Mixxx interface. Arată secțiunea microfonului a interfeței Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Arată secțiunea control disc vinil - + Show the vinyl control section of the Mixxx interface. Arată secțiunea control disc vinil a interfeței Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Arată previzualizare Deck - + Show the preview deck in the Mixxx interface. Arată previzualizarea deck-ului în interfața Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Arată coperta - + Show cover art in the Mixxx interface. Arată coperta în interfața Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Mărește biblioteca - + Maximize the track library to take up all the available screen space. Mărește spațiul bibliotecii pentru a acoperii tot spațiul disponibil al ecranului. - + Space Menubar|View|Maximize Library Spațiu - + &Full Screen &Ecran complet - + Display Mixxx using the full screen Afișează Mixxx utilizând tot ecranul - + &Options &Opțiuni - + &Vinyl Control Control disc &vinil - + Use timecoded vinyls on external turntables to control Mixxx Utilizează codarea de timp discuri vinil pe platan extern pentru a controla Mixxx - + Enable Vinyl Control &%1 Activează controlul disc vinil &%1 - + &Record Mix &Înregistrare mixaj - + Record your mix to a file Înregistrează mixajul într-un fişier - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Activează &transmisia live - + Stream your mixes to a shoutcast or icecast server Difuzați mixajul dumneavoastră la un server shoutcast sau icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Activează &scurtăturile de tastatură - + Toggles keyboard shortcuts on or off Comută scurtăturile de tastatură pornit sau oprit - + Ctrl+` Ctrl+` - + &Preferences &Preferințe - + Change Mixxx settings (e.g. playback, MIDI, controls) Schimbă configurările Mixxx (ex. redare, MIDI, controale) - + &Developer &Dezvoltator - + &Reload Skin &Reâncarcă aspect aplicație - + Reload the skin Reâncarcă aspect aplicație - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools &Unelte dezvoltator - + Opens the developer tools dialog Deschide dialogul uneltelor dezvoltatorului - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Dep&anator activat - + Enables the debugger during skin parsing Activează depanatorul în timpul analizării aspectului aplicației - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Ajutor - + Show Keywheel menu title @@ -15780,74 +15924,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support Suport &comunitate - + Get help with Mixxx Obțineți ajutor cu Mixxx - + &User Manual Manual &utilizator - + Read the Mixxx user manual. Citiți manualul utilizatorului Mixxx. - + &Keyboard Shortcuts Scurtături &tastatură - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Tradu această aplicație - + Help translate this application into your language. Ajutați la traducerea acestei aplicații în limba dumneavoastră. - + &About &Despre - + About the application Despre aplicaţie @@ -15855,25 +15999,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15882,25 +16026,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Curăță intrarea - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Căutare - + Clear input Curăță intrarea @@ -15911,169 +16043,163 @@ This can not be undone! Caută... - + Clear the search bar input field - - Enter a string to search for - Introduceți un șir de căutat + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Scurtătură + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Focalizare + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Ieșire căutare + + Delete query from history + WSearchRelatedTracksMenu - + Search related Tracks - + Key Tastă - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Artist - + Album Artist Album artist - + Composer Compozitor - + Title Titlu - + Album Album - + Grouping Grupare - + Year An - + Genre Gen - + Directory - + &Search selected @@ -16081,620 +16207,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck Deck - + Sampler Sampler - + Add to Playlist Adaugă la lista de redare - + Crates Colecții - + Metadata - + Update external collections - + Cover Art Copertă - + Adjust BPM - + Select Color - - + + Analyze Analizează - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Adăugaţi în selecţia Auto DJ (jos) - + Add to Auto DJ Queue (top) Adăugaţi în selecţia Auto DJ (sus) - + Add to Auto DJ Queue (replace) - + Preview Deck Previzualizare Deck - + Remove Elimină - + Remove from Playlist - + Remove from Crate - + Hide from Library Ascunde din bibliotecă - + Unhide from Library Anulează ascunderea din bibliotecă - + Purge from Library Rade din bibliotecă - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Proprietăţi - + Open in File Browser Deschide în navigatorul de fișiere - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Apreciere - + Cue Point - - + + Hotcues Hotcue - + Intro - + Outro - + Key Tastă - + ReplayGain Înlocuire câștig - + Waveform - + Comment Comentariu - + All Toate - + Sort hotcues by position (remove offsets) - + Sort hotcues by position - + Lock BPM Blochează BPM - + Unlock BPM Deblochează BPM - + Double BPM Dublează BPM - + Halve BPM Înjumătățește BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Crează listă de redare nouă - + Enter name for new playlist: Introduceți numele pentru noua listă de redare: - + New Playlist Listă de redare nouă - - - + + + Playlist Creation Failed Crearea listei de redare a eşuat - + A playlist by that name already exists. Există deja o listă de redare cu acelaşi nume. - + A playlist cannot have a blank name. O listă de redare nu poate fi nedenumită. - + An unknown error occurred while creating playlist: O eroare necunoscută a apărut în timpul creării listei de redare: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Sorting hotcues of %n track(s) by position (remove offsets) - + Sorting hotcues of %n track(s) by position - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Renunţă - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Închide - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16710,37 +16841,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16748,37 +16879,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16786,12 +16917,12 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Arată sau ascunde coloane. - + Shuffle Tracks @@ -16799,52 +16930,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Alege directorul bibliotecii de muzică - + controllers - + Cannot open database Baza de date nu poate fi deschisă - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16858,68 +16989,78 @@ Apăsați OK să ieșiți. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates - + + Playlists + + + + + Selected crates/playlists + + + + Browse Răsfoiește - + Export directory - + Database version - + Export Exportă - + Cancel Renunţă - + Export Library to Engine DJ "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16940,7 +17081,7 @@ Apăsați OK să ieșiți. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16950,23 +17091,23 @@ Apăsați OK să ieșiți. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_ru.qm b/res/translations/mixxx_ru.qm index 58aacd74f977..804a8ca549cc 100644 Binary files a/res/translations/mixxx_ru.qm and b/res/translations/mixxx_ru.qm differ diff --git a/res/translations/mixxx_ru.ts b/res/translations/mixxx_ru.ts index 9ac51d1befd8..280f436e0ab4 100644 --- a/res/translations/mixxx_ru.ts +++ b/res/translations/mixxx_ru.ts @@ -3649,32 +3649,32 @@ trace — То, что выше + сообщения профилировани ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. Функционал, предоставляемый этой привязкой контроллера, будет отключён до тех пор, пока проблема не будет решена. - + You can ignore this error for this session but you may experience erratic behavior. В этом сеансе можно игнорировать эту ошибку, но можно столкнуться с некорректным поведением. - + Try to recover by resetting your controller. Попробуйте восстановить путем сброса контроллера. - + Controller Mapping Error Ошибка привязки контроллера - + The mapping for your controller "%1" is not working properly. Привязка контроллера «%1» работает некорректно. - + The script code needs to be fixed. Код сценария должна быть исправлена. @@ -5661,6 +5661,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6275,62 +6285,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Минимальный размер выбранного скина больше, чем разрешение экрана. - + Allow screensaver to run Разрешить запуск хранителя экрана - + Prevent screensaver from running Запретить включение хранителя экрана - + Prevent screensaver while playing Запретить включение хранителя экрана при воспроизведении - + Disabled Отключено - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Этот скин не поддерживает цветовые схемы - + Information Информация - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -8967,7 +8977,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Tap to Beat - + Нажмите чтобы выбрать ритм. @@ -9621,57 +9631,57 @@ Shown when VuMeter can not be displayed. Please keep Отсутствует поддержка OpenGL. - + activate активировать - + toggle переключить - + right вправо - + left влево - + right small немного вправо - + left small немного влево - + up вверх - + down вниз - + up small немного вверх - + down small немного вниз - + Shortcut Комбинация клавиш @@ -9744,22 +9754,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Импортировать список воспроизведения - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Файлы списков воспроизведения (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Заменить файл? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10033,133 +10043,133 @@ Do you really want to overwrite it? Продолжить - + Load track to Deck %1 Загрузить трек в деку %1 - + Deck %1 is currently playing a track. Дека %1 в настоящее время воспроизводит трек. - + Are you sure you want to load a new track? Загрузить новый трек? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Для этой панели управления пластинкой не выбрано входное устройство. Сначала выберите входное устройство в параметрах звукового оборудования. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Для панели сквозного управления не выбрано входное устройство. Сначала выберите входное устройство в параметрах звукового оборудования. - + There is no input device selected for this microphone. Do you want to select an input device? Для этого микрофона не выбрано входное устройство. Хотите выбрать? - + There is no input device selected for this auxiliary. Do you want to select an input device? Для этого вспомогательного устройства не выбрано входное устройство. Хотите выбрать? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Ошибка в файле обложки - + The selected skin cannot be loaded. Не удаётся загрузить выбранную обложку. - + OpenGL Direct Rendering Прямая обработка OpenGL - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Прямой рендеринг не включён на вашем компьютере.<br><br>Это означает, что отображение осциллограммы будет очень<br><b>медленным и может сильно нагрузить процессор</b>. Либо обновите<br>конфигурацию, чтобы включить прямой рендеринг, либо отключите<br>отображение осциллограммы в параметрах Mixxx, выбрав<br>«Пусто» для отображения осциллограммы в разделе «Интерфейс». - - - + + + Confirm Exit Подтвердить выход - + A deck is currently playing. Exit Mixxx? В настоящий момент играет дека. Выйти из Mixxx? - + A sampler is currently playing. Exit Mixxx? В настоящее время играет сэмплер. Выйти из Mixxx? - + The preferences window is still open. Окно параментров остаётся открытым. - + Discard any changes and exit Mixxx? Отменить все изменения и закрыть Mixxx? @@ -10181,7 +10191,7 @@ Do you want to select an input device? - + Playlists Списки воспроизведения @@ -10222,27 +10232,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Списки воспроизведения — это упорядоченные списки треков, позволяющие планировать диджейские выступления. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Возможно, иногда придётся пропустить некоторые треки в подготовленном списке воспроизведения или добавить несколько других треков, чтобы сохранить энергию аудитории. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Некоторые диджеи составляют списки воспроизведений перед выступлением, а некоторые предпочитают составлять их на лету. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. При проигрывании списка воспроизведения во время диджейского сета следите за реакцией публики на воспроизводимую музыку. - + Create New Playlist Создать новый список воспроизведения @@ -11902,7 +11912,7 @@ Hint: compensates "chipmunk" or "growling" voices Величина усиления, применяемая к аудиосигналу. На более высоких уровнях звук будет более искажённым. - + Passthrough Пересылка @@ -15655,323 +15665,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Создать &новый список воспроизведения - + Create a new playlist Создать новый список воспроизведения - + Ctrl+n Ctrl+n - + Create New &Crate Создать новый &контейнер - + Create a new crate Создать новый контейнер - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Вид - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Могут поддерживаться не все скины. - + Show Skin Settings Menu Показать меню параметров скина - + Show the Skin Settings Menu of the currently selected Skin Показать меню параметров текущего скина - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Показать панель микрофона - + Show the microphone section of the Mixxx interface. Показать панель микрофона в интерфейсе Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Показать панель управления пластинками - + Show the vinyl control section of the Mixxx interface. Показать панель управления пластинками в интерфейсе Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Показать предварительный просмотр деки - + Show the preview deck in the Mixxx interface. Показать предпросмотр деки в интерфейсе Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Показать обложку - + Show cover art in the Mixxx interface. Показать обложку в интерфейсе Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Развернуть медиатеку - + Maximize the track library to take up all the available screen space. Развернуть медиатеку, заполнив всё доступное пространство экрана. - + Space Menubar|View|Maximize Library Пространство - + &Full Screen &Полный экран - + Display Mixxx using the full screen Открыть Mixxx в полноэкранном режиме - + &Options &Действия - + &Vinyl Control Управление &пластинками - + Use timecoded vinyls on external turntables to control Mixxx Использовать пластинки с временными метками на внешних проигрывателях для работы с Mixxx - + Enable Vinyl Control &%1 Включить управление пластинкой &%1 - + &Record Mix &Записать микс - + Record your mix to a file Записать микс в файл - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Включить прямую &трансляцию - + Stream your mixes to a shoutcast or icecast server Прямая трансляция миксов на сервер shoutcast или icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Включить &комбинации клавиш - + Toggles keyboard shortcuts on or off Переключает комбинации клавиш - + Ctrl+` Ctrl+` - + &Preferences &Параметры - + Change Mixxx settings (e.g. playback, MIDI, controls) Изменить параметры Mixxx (например, элементы управления воспроизведением, MIDI) - + &Developer &Разработчик - + &Reload Skin &Перезагрузить скин - + Reload the skin Перезагрузить скин - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools &Инструменты разработчика - + Opens the developer tools dialog Открывает диалог инструментов разработчика - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Статистика: Сегмент &Experiment - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Включает экспериментальный режим. Собирает статистику в сегменте отслеживания EXPERIMENT. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Статистика: &Базовый сегмент - + Enables base mode. Collects stats in the BASE tracking bucket. Включает базовый режим. Собирает статистику в сегменте отслеживания BASE. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled От&ладчик включён - + Enables the debugger during skin parsing Включает отладчик при обработке скина - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Справка - + Show Keywheel menu title Колесо тональности @@ -15988,74 +16028,74 @@ This can not be undone! Экспорт медиатеки в формат Engine DJ - + Show keywheel tooltip text Показать колесо тональности - + F12 Menubar|View|Show Keywheel F12 - + &Community Support &Поддержка сообщества - + Get help with Mixxx Получить помощь с Mixxx - + &User Manual &Руководство пользователя - + Read the Mixxx user manual. Открыть руководство пользователя Mixxx. - + &Keyboard Shortcuts &Комбинации клавиш - + Speed up your workflow with keyboard shortcuts. Ускорьте свой рабочий процесс с помощью комбинаций клавиш. - + &Settings directory Каталог &параметров - + Open the Mixxx user settings directory. Открыть катало пользовательских параметров Mixxx. - + &Translate This Application &Перевести это приложение - + Help translate this application into your language. Помогите перевести это приложение на ваш язык. - + &About &О программе - + About the application О приложении @@ -16090,25 +16130,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Очистить ввод - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Поиск - + Clear input Очистить ввод @@ -16119,93 +16147,87 @@ This can not be undone! Поиск... - + Clear the search bar input field Очистить поле ввода для поиска - - Enter a string to search for - Введите строку для поиска + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Использовать операторы наподобие bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Более подробная информация: Руководство пользователя > Медиатека Mixxx + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Комбинация клавиш + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Фокус + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts - Комбинации клавиш + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Инициировать поиск до истечения времени ожидания поиска по мере ввода или перейти к просмотру треков после него + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl+Пробел - + Toggle search history Shows/hides the search history entries Включить/выключить историю поиска - + Delete or Backspace Delete или Backspace - - Delete query from history - Удалить запрос из истории - - - - Esc - ESC + + in search history + - - Exit search - Exit search bar and leave focus - Выйти из поиска + + Delete query from history + Удалить запрос из истории @@ -17012,52 +17034,52 @@ This can not be undone! mixxx::CoreServices - + fonts шрифты - + database база данных - + effects эффекты - + audio interface аудио интерфейс - + decks деки - + library библиотека - + Choose music library directory Выберите каталог библиотеки музыки - + controllers контроллеры - + Cannot open database Не удалось открыть базу данных - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_sl.qm b/res/translations/mixxx_sl.qm index 20b3dec6ff67..4b08bf6b646d 100644 Binary files a/res/translations/mixxx_sl.qm and b/res/translations/mixxx_sl.qm differ diff --git a/res/translations/mixxx_sl.ts b/res/translations/mixxx_sl.ts index 7b13f38cc0e2..b7614a65df59 100644 --- a/res/translations/mixxx_sl.ts +++ b/res/translations/mixxx_sl.ts @@ -3649,32 +3649,32 @@ trace - gornje + profilirna sporočila ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. Funkcionalnost, ki jo ponuja to mapiranje kontrolerja, bo onemogočena, dokler težava ne bo razrešena. - + You can ignore this error for this session but you may experience erratic behavior. To napako lahko ignorirate za čas te seje, vendar lahko to povzroči nepričakovano obnašanje programa. - + Try to recover by resetting your controller. Poskusite odpraviti napako z restiranjem kontrolerja. - + Controller Mapping Error Napaka v mapiranju kontrolerja - + The mapping for your controller "%1" is not working properly. Mapiranje za kontroler "%1" ne deluje pravilno. - + The script code needs to be fixed. Kodo skripte je potrebno popraviti. @@ -5684,6 +5684,16 @@ Potrdim nastavitve in nadaljujem? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6298,62 +6308,62 @@ Vedno lahko skladbe tudi povlečete in sputite, da podvojite nek predvajalnik. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Najmanjša velikost izbrane preobleke je večja od ločljivosti vašega zaslona. - + Allow screensaver to run Dovoli zagon ohranjevalniku zaslona - + Prevent screensaver from running Prepreči delovanje ohranjevalniku zaslona - + Prevent screensaver while playing Prepreči ohranjevalnik zaslona med predvajanjem - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Ta preobleka ne podpira barvnih shem - + Information Informacija - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -9645,57 +9655,57 @@ Shown when VuMeter can not be displayed. Please keep OpenGL. - + activate aktiviraj - + toggle preklopi - + right desno - + left levo - + right small desno malo - + left small levo malo - + up gor - + down dol - + up small gor malo - + down small dol malo - + Shortcut Bližnjica @@ -9768,22 +9778,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Uvozi seznam predvajanja - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Datoteke seznama predvajanja (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Prepišem datoteko? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10057,133 +10067,133 @@ Ali bi jo res radi prepisali? Nadaljuj - + Load track to Deck %1 Naloži skladbo v predvajalnik %1 - + Deck %1 is currently playing a track. Predvajalnik %1 trenutno predvaja skladbo - + Are you sure you want to load a new track? Ali ste prepričani, da želite naložiti novo skladbo? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Za izbrano gramofonsko upravljanje ni izbrane vhodne naprave. Izberite najprej vhodno napravo v nastavitvah strojne opreme za zvok. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Za ta prehod ni izbrana nobena vhodna naprava. Najprej izberite vhodno napravo v nastavitvah strojne opreme za zvok. - + There is no input device selected for this microphone. Do you want to select an input device? Za ta mikrofon ni izbrane vhodne naprave. Ali bi radi izbrali vhodno napravo? - + There is no input device selected for this auxiliary. Do you want to select an input device? Za to pomožnos vodilo ni izbrane vhodne naprave. Ali bi radi izbrali vhodno napravo? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Napaka v probleki - + The selected skin cannot be loaded. Izbrane preobleke ni mogoče naložiti. - + OpenGL Direct Rendering OpenGL neposredno renderiranje - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. Na vašem računalniku ni vklopljeno strojno pospešeno neposredno upodabljanje oz. direct rendering<br><br>To pomeni, da bo prikazovanje valovnih oblik počasno<br><b>in da lahko močno obremenjuje procesor</b>. Posodobite konfiguracijo i<br>n vklopite neposredno upodabljanje ali pa izklopite <br>prikaz valovnih oblik v nastavitvah Mixxx-a, tako da izberete <br>Prazno kot valovno obliko v razdelku Vmesnik. - - - + + + Confirm Exit Zapustim? - + A deck is currently playing. Exit Mixxx? Eden od predvajalnikov trenutno predvaja. Zapustim Mixxx? - + A sampler is currently playing. Exit Mixxx? Eden od vzorčevalnikov trenutno predvaja. Zapustim Mixxx? - + The preferences window is still open. Okno z nastavitvami je še vedno odprto. - + Discard any changes and exit Mixxx? Zavržem vse spremembe in zapustim Mixxx? @@ -10205,7 +10215,7 @@ Ali bi radi izbrali vhodno napravo? - + Playlists Seznami predvajanja @@ -10246,27 +10256,27 @@ Ali bi radi izbrali vhodno napravo? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Seznami predvajanja so urejeni seznami skladb, ki omogočajo načrtovanje DJ setov. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Da bi obdržali energijo publike, bo morda potrebno preskočiti katero od vaših skladb ali dodati kakšno drugo. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Nekateri DJi ustvarijo sezname predvajanja še pred živim nastopom, spet drugi jih ustvarijo sproti. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Če med DJanjem uporabljate seznam predvajanja, bodite pozorni na odziv publike na vaš izbor glasbe. - + Create New Playlist Ustvari nov seznam predvajanja @@ -11926,7 +11936,7 @@ Namig: kompenzira "veveričji" ali "renčeč" glasOjačenje, ki bo dodano zvočnemu signalu. Večja, kot je vrednost, bolj bo zvok popačen. - + Passthrough Prehod @@ -15680,323 +15690,353 @@ Tega ni mogoče razveljaviti! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Ustvari &nov seznam predvajanja - + Create a new playlist Ustvari nov seznam predvajanja - + Ctrl+n Ctrl+n - + Create New &Crate Ustvari nov &zaboj - + Create a new crate Ustvari nov zaboj - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Prikaz - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Morda ni podprto v vseh preoblekah. - + Show Skin Settings Menu Prikaži nastavitve za preobleko - + Show the Skin Settings Menu of the currently selected Skin Prikaže menu z nastavitvami za trenutno preobleko. - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Prikaži mikrofonski razdelek - + Show the microphone section of the Mixxx interface. V vmesniku Mixxx prikaži razdelek za upravlljanje mikrofonov. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Prikaži razdelek za gramofonsko upravljanje - + Show the vinyl control section of the Mixxx interface. V vmesniku Mixxx prikaži razdelek za gramofonsko upravljanje. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Prikaži predvajalnik za predposlušanje - + Show the preview deck in the Mixxx interface. V Mixxx vmesniku prikaže predvajalnik za predposlušanje. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Prikaži naslovnico - + Show cover art in the Mixxx interface. V Mixxx vmesniku prikaže naslovnice. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Povečaj zbirko - + Maximize the track library to take up all the available screen space. Poveča zbirko skladb preko celega zaslona - + Space Menubar|View|Maximize Library - + Prostor - + &Full Screen &Cel zaslon - + Display Mixxx using the full screen Prikaže Mixxx preko celega zaslona - + &Options &Možnosti - + &Vinyl Control &Gramofonsko upravljanje - + Use timecoded vinyls on external turntables to control Mixxx Upravljanje Mixxx z uporabo časovno kodiranih vinilnih plošče na zunanjih gramofonih. - + Enable Vinyl Control &%1 Vklopi gramofonsko upravljanje &%1 - + &Record Mix &Snemaj miks - + Record your mix to a file Snema miks v datoteko. - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Vklopi o&ddajanje v živo - + Stream your mixes to a shoutcast or icecast server Prenašaj svoje mikse na Shoutcast ali Icecast strežnik - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Vklopi &bližnjice na tipkovnici - + Toggles keyboard shortcuts on or off Vklopi ali izklopi bližnjice na tipkovnici. - + Ctrl+` Ctrl+` - + &Preferences &Nastavitve - + Change Mixxx settings (e.g. playback, MIDI, controls) Spremeni Mixxx nastavitve (npr. predvajanje, MIDI, kontrole) - + &Developer &Razvijalec - + &Reload Skin &Naloži preobleko - + Reload the skin Ponovno naloži preobleko - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Razvojna &orodja - + Opens the developer tools dialog Odpre dialog razvojnih orodji - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket Stat.: &Eksperimentalno vedro - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Vklopi eksperimentalni način delovanja. Zbira statistiko v EXPERIMENT vedro za sledenje . - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket Stat.: &Osnovno vedro - + Enables base mode. Collects stats in the BASE tracking bucket. Vklopi bazični način delovanja. Statistiko zbira v osnovno vedro za sledenje. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled Vklopi raz&hroščevalnik - + Enables the debugger during skin parsing Med preverjanjem preobleke vklopi razhroščevalnik. - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Pomoč - + Show Keywheel menu title Prikaži kvintni krog @@ -16013,74 +16053,74 @@ Tega ni mogoče razveljaviti! Izvozi knjižnico v Engine DJ format - + Show keywheel tooltip text Prikaže kvintni krog - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Podpora &skupnosti - + Get help with Mixxx Poiščite pomoč za Mixxx - + &User Manual &Uporabniška navodila - + Read the Mixxx user manual. Preberite navodila za rabo Mixxx - + &Keyboard Shortcuts &Bližnjice na tipkovnici - + Speed up your workflow with keyboard shortcuts. Pohitrite delo z rabo bližnjic. - + &Settings directory Mapa za na&stavitve - + Open the Mixxx user settings directory. Odpre mapo z nastavitvami za Mixxx. - + &Translate This Application Prevedi &to aplikacijo - + Help translate this application into your language. Pomagajte prevesti ta program v svoj jezik. - + &About O progr&amu - + About the application O programu @@ -16115,25 +16155,13 @@ Tega ni mogoče razveljaviti! WSearchLineEdit - - Clear input - Clear the search bar input field - Počisti vhod - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Iskanje - + Clear input Počisti vhod @@ -16144,93 +16172,87 @@ Tega ni mogoče razveljaviti! Iskanje... - + Clear the search bar input field Počisti vnos iskalnika - - Enter a string to search for - Tukaj vnesite iskalni niz + + Return + Vrni se - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Uporabite operatorje, kot so bpm:115-128, atrist:BooFar,-year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Za več informaciji glej Uporabniška navodila>Mixxx zbirka + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Bližnjica + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Fokus + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts - Bližnjice + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - Vrni se + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - Sproži iskanje pre iztekom časa za išči-ko-tipkaš ali po tem skoži na prikaz skladbe + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space - + Toggle search history Shows/hides the search history entries Preklopi zgodovino iskanj - + Delete or Backspace - - Delete query from history - Izbris poizvedbe iz zgodovine - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Zapusti iskanje + + Delete query from history + Izbris poizvedbe iz zgodovine @@ -17037,52 +17059,52 @@ Tega ni mogoče razveljaviti! mixxx::CoreServices - + fonts pisave - + database podatkovna baza - + effects učinki - + audio interface zvočni vmesnik - + decks predvajalnikov - + library knjižnica - + Choose music library directory Izberi mapo glasbene zbirke - + controllers kontroler - + Cannot open database Ni možno odpreti baze podatkov. - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_sq_AL.qm b/res/translations/mixxx_sq_AL.qm index a24dd019d50b..d8bcf44004d3 100644 Binary files a/res/translations/mixxx_sq_AL.qm and b/res/translations/mixxx_sq_AL.qm differ diff --git a/res/translations/mixxx_sq_AL.ts b/res/translations/mixxx_sq_AL.ts index c890c28d6230..2e49f0bd489a 100644 --- a/res/translations/mixxx_sq_AL.ts +++ b/res/translations/mixxx_sq_AL.ts @@ -349,7 +349,7 @@ Bitrate - + Bitrate @@ -439,7 +439,7 @@ ReplayGain - + ReplayGain @@ -449,7 +449,7 @@ Played - + E Luajtur @@ -702,12 +702,12 @@ Bitrate - + Bitrate ReplayGain - + ReplayGain @@ -988,7 +988,7 @@ trace - Above + Profiling messages Deck %1 - + Kuverta %1 @@ -998,7 +998,7 @@ trace - Above + Profiling messages Preview Deck %1 - + Inspekto Kuvertën %1 @@ -1034,7 +1034,7 @@ trace - Above + Profiling messages Crossfader - + Kryqzbehësi @@ -1197,7 +1197,7 @@ trace - Above + Profiling messages Equalizers - + Barazuesit @@ -1222,52 +1222,52 @@ trace - Above + Profiling messages Cues - + Shenjat Cue button - + Butoni i Shenjës Set cue point - + Vë Pikën e Shenjës Go to cue point - + Shko tek Pika e Shenjës Go to cue point and play - + Shko tek Pika e Shenjës edhe Luaje Go to cue point and stop - + Shko tek Pika e Shenjës edhe Ndalo Preview from cue point - + Inspekto nga Pika e Shenjës Cue button (CDJ mode) - + Butoni i Shenjës (Moda CDJ) Stutter cue - + Belbëzo Shenjën Hotcues - + Shenjat e Shpejta @@ -1277,27 +1277,27 @@ trace - Above + Profiling messages Clear hotcue %1 - + Zbraz Shenjën e Shpejte %1 Set hotcue %1 - + Vë Shenjën e Shpejte %1 Jump to hotcue %1 - + Kërce tek Shenja e Shpejtë %1 Jump to hotcue %1 and stop - + Kërce tek Shenja e Shpejte %1 edhe Ndalo Jump to hotcue %1 and play - + Kërce tek Shenja e Shpejtë %1 edhe Luaje @@ -3644,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. Funksionet e dhëna nga ky përshoqërim kontrollori do të çaktivizohen, deri sa të jetë zgjidhur problemi. - + You can ignore this error for this session but you may experience erratic behavior. Mundeni ta shpërfillni këtë gabim për këtë sesion, por mund të hasni sjellje me gabime. - + Try to recover by resetting your controller. Provoni ta zgjidhni duke kthyer te parazgjedhjet kontrollorin tuaj. - + Controller Mapping Error Gabim Përshoqërimi Kontrollori - + The mapping for your controller "%1" is not working properly. Përshoqërimi për kontrollorin tuaj “%1” s’po funksionon si duhet. - + The script code needs to be fixed. Duhet ndrequr kodi i programthit. @@ -5011,7 +5011,7 @@ Two source connections to the same server that have the same mountpoint can not Bitrate - + Bitrate @@ -5646,6 +5646,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6237,62 +6247,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run Lejoje ekrankursyesin të xhirojë - + Prevent screensaver from running Pengoje xhirimin e ekrankursyesit - + Prevent screensaver while playing Pengo ekrankursyesin, teksa luhet - + Disabled I çaktivizuar - + 2x MSAA 2x MSAA - + 4x MSAA 4x MSAA - + 8x MSAA 8x MSAA - + 16x MSAA 16x MSAA - + This skin does not support color schemes Kjo lëkrçe s’mbulon skema ngjyrash - + Information Hollësi - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. Mixxx-i duhet rinisuar, para se të hyjnë në fuqi rregullime për vendore të re, përshkallëzimi apo “multi-sampling”. @@ -9576,57 +9586,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut Shkurtore @@ -9705,22 +9715,22 @@ Po ndërpritet veprimi, për të shmangur mospërputhje fonoteke LibraryFeature - + Import Playlist Importo Luajlistë - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Kartela Luajlistë (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Të mbishkruhet Kartela? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9993,132 +10003,132 @@ Doni vërtet të mbishkruhet? Vazhdo - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? Jeni i sigurt se doni të ngarkohet një pjesë e re? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Për këtë kontroll vinili s’ka të përzgjedhur pajisje në hyrje. Ju lutemi, së pari përzgjidhni një pajisje në hyrje, që nga parapëlqimet për “hardware” tingujsh. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? Për këtë mikrofon s’është përzgjedhur ndonjë pajisje në hyrje. Doni të përzgjidhni një pajisje në hyrje? - + There is no input device selected for this auxiliary. Do you want to select an input device? Për këtë portë ndihmëse s’është përzgjedhur ndonjë pajisje në hyrje. Doni të përzgjidhni një pajisje në hyrje? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Gabim te kartelë lëkurçeje - + The selected skin cannot be loaded. Lëkurçja e përzgjedhur s’mund të ngarkohet. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Ripohoni Mbylljen - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. Dritarja e parapëlqimeve është ende e hapur. - + Discard any changes and exit Mixxx? Të hidhen tej ndryshimet dhe të dilet nga Mixxx-i? @@ -10140,7 +10150,7 @@ Doni të përzgjidhni një pajisje në hyrje? - + Playlists Luajlista @@ -10181,27 +10191,27 @@ Doni të përzgjidhni një pajisje në hyrje? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. Luajlistat janë lista të renditura pjesësh, që ju lejojnë të planifikoni seancat tuaja DJ. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. Që të mund të ruani energjinë e publikut tuaj, mund të jetë e nevojshme të anashkalohen ca pjesë te luajlista juaj e përgatitur, ose të shotni ca pjesë të tjera. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Disa DJ ndërtojnë luajlista para se të luajnë drejtpërsëdrejti, të tjerë parapëlqejnë t’i hartojnë ato aty në vend. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Kur përdoret një luajlistë gjatë një seance DJ drejpërsëdrejti, mos harroni t’i kushtoni përherë vëmendje mënyrës se si reagon publiku juaj ndaj muzikës që keni zgjedhur të luani. - + Create New Playlist Krijo Luajlistë të Re @@ -11825,7 +11835,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -12825,7 +12835,7 @@ may introduce a 'pumping' effect and/or distortion. Crossfader - + Kryqzbehësi @@ -15576,323 +15586,353 @@ Kjo s’mund të zhbëhet! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Krijoni Luajlistë të &Re - + Create a new playlist Krijoni një luajlistë të re - + Ctrl+n Ctrl+n - + Create New &Crate Krijo &Arkë të Re - + Create a new crate Krijoni një arkë të re - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Shihni - + Auto-hide menu bar Vetëfshihe shtyllën e menuve - + Auto-hide the main menu bar when it's not used. Vetëfshih shtyllën e menusë kryesore, kur s’është në përdorim. - + May not be supported on all skins. Mund të mos e mbulojnë krejt lëkurçet. - + Show Skin Settings Menu Shfaq Menu Rregullimesh Lëkurçeje - + Show the Skin Settings Menu of the currently selected Skin Shfaqni Menunë e Rregullimeve për Lëkurçen të Lëkurçes së përzgjedhur aktualsisht - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Shfaq Pjesën e Mikrofonit - + Show the microphone section of the Mixxx interface. Shfaq te ndërfaqja e Mixxx-it pjesën e mikrofonit. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Shfaq Pjesën Kontroll Vinili - + Show the vinyl control section of the Mixxx interface. Shfaq te ndërfaqja e Mixxx-it pjesën “kontrolli vinili”. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Shfaq Kopertinë - + Show cover art in the Mixxx interface. Shfaq kopertinë te ndërfaqja e Mixxx-it. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maksimizo Fonotekën - + Maximize the track library to take up all the available screen space. Maksimizoni fonotekën që të zërë krejt hapësirën e mundshme në ekran. - + Space Menubar|View|Maximize Library Tasti Hapësirë - + &Full Screen Sa &Krejt Ekrani - + Display Mixxx using the full screen Shfaqeni Mixxx-in duke përdorur krejt ekranin - + &Options &Mundësi - + &Vinyl Control &Kontroll Vinili - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 Aktivizo Kontroll Vinili &%1 - + &Record Mix &Incizoni Përzierjen - + Record your mix to a file Incizojeni në një kartelë përzierjen tuaj - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Aktivizo T&ransmetim të Drejtpërdrejtë - + Stream your mixes to a shoutcast or icecast server Transmetojini përzierjet tuaja te një shërbyes Shoutcast ose Icecast - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Aktivizo Shkurtore &Tastiere - + Toggles keyboard shortcuts on or off Aktivizoni ose çaktivizoni shkurtore tastiere - + Ctrl+` Ctrl+` - + &Preferences &Parapëlqime - + Change Mixxx settings (e.g. playback, MIDI, controls) Ndryshoni rregullimet e Mixxx-it (p.sh., për luajtjen, MIDI, kontrolle) - + &Developer &Zhvillues - + &Reload Skin &Ringarko Lëkurçe - + Reload the skin Ringarkoni lëkurçen - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools &Mjete Zhvilluesi - + Opens the developer tools dialog Bën hapjen e dialogut të mjeteve të zhvilluesit - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled &Diagnostikues i Aktivizuar - + Enables the debugger during skin parsing Aktivizon diagnostikuesin gjatë analizimit të lëkurçes - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Ndihmë - + Show Keywheel menu title @@ -15909,74 +15949,74 @@ Kjo s’mund të zhbëhet! Eksportojeni fonotekën në formatin Engine DJ - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel F12 - + &Community Support &Asistencë Nga Bashkësia - + Get help with Mixxx Merrni ndihmë për Mixxx-in - + &User Manual &Doracak Përdoruesi - + Read the Mixxx user manual. Lexoni doracakun e përdoruesit të Mixxx-it. - + &Keyboard Shortcuts Sh&kurtore Tastiere - + Speed up your workflow with keyboard shortcuts. Shpejtoni rrjedhën tuaj të punës përmes shkurtoresh tastiere. - + &Settings directory Drejtori &rregullimesh - + Open the Mixxx user settings directory. Hapni drejtorinë e rregullimeve të përdoruesit të Mixxx-it. - + &Translate This Application &Përktheni Këtë Aplikacion - + Help translate this application into your language. Ndihmoni të përkthehet ky aplikacion në gjuhën tuaj. - + &About &Mbi - + About the application Mbi aplikacionin @@ -16011,25 +16051,13 @@ Kjo s’mund të zhbëhet! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - - - - + Search noun - + Clear input @@ -16040,93 +16068,87 @@ Kjo s’mund të zhbëhet! - + Clear the search bar input field - - Enter a string to search for - Jepni një varg për të cilin të kërkohet + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - Përdorni operatorë të tillë si bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - Për më tepër hollësi, shihni Doracak Përdoruesi > Fonotekë Mixxx-i + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - Shkurtore + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Fokus + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts - Shkurtore + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space Ctrl+Space - + Toggle search history Shows/hides the search history entries Shfaq/fshih historik kërkimesh - + Delete or Backspace Tasti Delete ose Backspace - - Delete query from history - Fshije kërkesën nga historiku - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - Dil nga kërkimi + + Delete query from history + Fshije kërkesën nga historiku @@ -16385,7 +16407,7 @@ Kjo s’mund të zhbëhet! Hotcues - + Shenjat e Shpejta @@ -16405,7 +16427,7 @@ Kjo s’mund të zhbëhet! ReplayGain - + ReplayGain @@ -16500,7 +16522,7 @@ Kjo s’mund të zhbëhet! Deck %1 - + Kuverta %1 @@ -16933,52 +16955,52 @@ Kjo s’mund të zhbëhet! mixxx::CoreServices - + fonts shkronja - + database bazë të dhënash - + effects efekte - + audio interface ndërfaqe audio - + decks - + library fonotekë - + Choose music library directory Zgjidhni drejtori fonoteke - + controllers kontrollorë - + Cannot open database S’hapet dot bazë të dhënash - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_sr.qm b/res/translations/mixxx_sr.qm index 7f2937af05cc..6541cd9d9416 100644 Binary files a/res/translations/mixxx_sr.qm and b/res/translations/mixxx_sr.qm differ diff --git a/res/translations/mixxx_sr.ts b/res/translations/mixxx_sr.ts index 23a45d6ee46c..1c51570fc1f0 100644 --- a/res/translations/mixxx_sr.ts +++ b/res/translations/mixxx_sr.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Уклони гајбицу из извора - + Auto DJ Самостални Диџеј - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Додај сандук у изворе @@ -149,28 +149,28 @@ BasePlaylistFeature - + New Playlist Нови списак нумера - + Add to Auto DJ Queue (bottom) Додајте у ред самосталног диџеја (доле) - + Create New Playlist Састави листу песама - + Add to Auto DJ Queue (top) Додајте у ред самосталног диџеја (горе) - + Remove Уклони @@ -180,12 +180,12 @@ Преименуј - + Lock Закључај - + Duplicate Дуплирај @@ -206,24 +206,24 @@ Анализирај целу листу - + Enter new name for playlist: Ново име за листу песама: - + Duplicate Playlist Удвостручи списак нумера - - + + Enter name for new playlist: Ново име за листу песама: - + Export Playlist Извези списак нумера @@ -233,70 +233,77 @@ Додај на Ауто-Диџеј листу (рокада) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Преименуј списак нумера - - + + Renaming Playlist Failed Преименовање списка нумера није успело - - - + + + A playlist by that name already exists. Већ постоји списак нумера са овим називом. - - - + + + A playlist cannot have a blank name. Назив списка нумера не може бити празан. - + _copy //: Appendix to default name when duplicating a playlist _умножи - - - - - - + + + + + + Playlist Creation Failed Стварање списка нумера није успело - - + + An unknown error occurred while creating playlist: Дошло је до непознате грешке приликом стварања списка нумера: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) М3У листа (*.м3у) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) М3У списак нумера (*.m3u);;М3У8 списак нумера (*.m3u8);;ПЛС списак нумера (*.pls);;Текстуални ЦСВ (*.csv);;Читљив текст (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Временска ознака @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Не могу да учитам нумеру. @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Албум - + Album Artist Извођач - + Artist Извођач - + Bitrate Проток - + BPM ТУМ - + Channels Број канала - + Color - + Comment Примедба - + Composer Састављач - + Cover Art Омот - + Date Added Додата - + Last Played - + Duration Трајање - + Type Врста - + Genre Жанр - + Grouping Груписање - + Key Кључ - + Location Место - + + Overview + + + + Preview Преглед - + Rating Оцена - + ReplayGain Ауто-ниво - + Samplerate - + Played Пуштено - + Title Наслов - + Track # Нумера бр. - + Year Година - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -546,67 +558,77 @@ BrowseFeature - + Add to Quick Links Додајте у брзе везе - + Remove from Quick Links Уклоните из брзих веза - + Add to Library Додај у Базу - + Refresh directory tree - + Quick Links Брзе везе - - + + Devices Уређаји - + Removable Devices Уклоњиви уређаји - - + + Computer Рачунар - + Music Directory Added Фолдер додат - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? Додали сте неке фолдере у Базу. Песме у овим фолдерима нису доступне док не извршите упит у Базу. Да ли желите то сада? - + Scan Скен - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. "Рачунар" је место одакле можете приступити фолдерима на тврдом диску и спољној меморији. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -752,87 +774,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -842,27 +864,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1044,13 +1071,13 @@ trace - Above + Profiling messages - + Set to full volume Макс. ниво - + Set to zero volume Мин. ниво @@ -1075,13 +1102,13 @@ trace - Above + Profiling messages Цензура - + Headphone listen button Дугме за слушање слушалицама - + Mute button Пригуши @@ -1092,25 +1119,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Усмерење мешача (тј. лево, десно, на средини) - + Set mix orientation to left Микс на лево - + Set mix orientation to center Микс пола-пола - + Set mix orientation to right Микс на десно @@ -1151,22 +1178,22 @@ trace - Above + Profiling messages Дугме лупкања ТУМ-а - + Toggle quantize mode Окини режим квантизације - + One-time beat sync (tempo only) Моментално укачи (само) темпо - + One-time beat sync (phase only) Моментално укачи (само) фазу - + Toggle keylock mode Промените режим закључавања тастера @@ -1176,193 +1203,193 @@ trace - Above + Profiling messages Уједначавачи - + Vinyl Control Управљање плочом - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Окини режим наговештаја управљања плочом (ИСКЉ./ЈЕДАН/БИТАН) - + Toggle vinyl-control mode (ABS/REL/CONST) Окини режим управљања плочом (АБС/РЕЛ/КОНСТ) - + Pass through external audio into the internal mixer Екстерни сигнал у миксер - + Cues Наговештаји - + Cue button Дугме наговештаја - + Set cue point Подеси тачку наговештаја - + Go to cue point Скочи на маркер - + Go to cue point and play Пусти од маркера - + Go to cue point and stop Иди до тачке наговештаја и стани - + Preview from cue point Преслушај од маркера - + Cue button (CDJ mode) Маркер-дугме (ЦДЈ) - + Stutter cue "Муцајући" маркер - + Hotcues Битни наговештаји - + Set, preview from or jump to hotcue %1 Забележи/преслушај/скочи на брзи маркер %1 - + Clear hotcue %1 Очисти битни наговештај %1 - + Set hotcue %1 Забележи брзи маркер %1 - + Jump to hotcue %1 Скочи до битног наговештаја %1 - + Jump to hotcue %1 and stop Скочи до битног наговештаја „%1“ и стани - + Jump to hotcue %1 and play Пусти од брзог маркера %1 - + Preview from hotcue %1 Преслушај од брзог маркера %1 - - + + Hotcue %1 Битни наговештај %1 - + Looping Упетљавање - + Loop In button Дугме за упетљавање - + Loop Out button Дугме за распетљавање - + Loop Exit button Дугме за напуштање петље - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats Помакни сегмент унапред за %1 - + Move loop backward by %1 beats Помакни сегмент уназад за %1 - + Create %1-beat loop Направи %1-тактну петљу - + Create temporary %1-beat loop roll Направи привремено %1-тактно правило петље @@ -1478,20 +1505,20 @@ trace - Above + Profiling messages - - + + Volume Fader Клизач нивоа - + Full Volume Макс. ниво - + Zero Volume Мин. ниво @@ -1507,7 +1534,7 @@ trace - Above + Profiling messages - + Mute Пригуши @@ -1518,7 +1545,7 @@ trace - Above + Profiling messages - + Headphone Listen Усмери у слушалице @@ -1539,25 +1566,25 @@ trace - Above + Profiling messages - + Orientation Панорама - + Orient Left Баци на лево - + Orient Center Стави у центар - + Orient Right Баци на десно @@ -1627,83 +1654,83 @@ trace - Above + Profiling messages Намести Битгрид ка десно - + Adjust Beatgrid Дотерај тактну мрежу - + Align beatgrid to current position Уклопи Битгрид са тренутном позицијом - + Adjust Beatgrid - Match Alignment Намести Битгрид - усклади позицију - + Adjust beatgrid to match another playing deck. Намести Битгрид да прати други дек - + Quantize Mode Магнетни режим - + Sync Синхро - + Beat Sync One-Shot Синхро. ритма моментално - + Sync Tempo One-Shot Синхро. темпа моментално - + Sync Phase One-Shot Синхро. фазе моментално - + Pitch control (does not affect tempo), center is original pitch Контрола фреквенције (без темпа), центар = оригинал - + Pitch Adjust Подеси фреквенцију - + Adjust pitch from speed slider pitch Фреквенција по клизачу за брзину - + Match musical key Паметно усклади тоналитет - + Match Key Усклади тоналитет - + Reset Key Основни тоналитет - + Resets key to original = Оригинални тоналитет @@ -1744,459 +1771,459 @@ trace - Above + Profiling messages Уједначавач ниских - + Toggle Vinyl Control Активна аналогна контрола - + Toggle Vinyl Control (ON/OFF) Прекидач аналогне контроле (укљ.-искљ.) - + Vinyl Control Mode Режим управљања плочом - + Vinyl Control Cueing Mode Режим аналогне припреме - + Vinyl Control Passthrough Бајпас аналогне контроле - + Vinyl Control Next Deck Аналогна контрола сл. дек - + Single deck mode - Switch vinyl control to next deck Јединствени дек - пребаци аналогну контролу на сл. дек - + Cue Наговештај - + Set Cue Маркер припреме - + Go-To Cue Иди на маркер - + Go-To Cue And Play Иди на маркер и пусти - + Go-To Cue And Stop Иди на маркер и стани - + Preview Cue Провери маркер - + Cue (CDJ Mode) Припрема (CDJ режим) - + Stutter Cue - + Go to cue point and play after release Иди на маркер и пусти по отпуштању - + Clear Hotcue %1 Ослободи брзи маркер %1 - + Set Hotcue %1 Постави брзи маркер %1 - + Jump To Hotcue %1 Скочи на брзи маркер %1 - + Jump To Hotcue %1 And Stop Скочи на брзи маркер %1 и стани - + Jump To Hotcue %1 And Play Скочи на брзи маркер %1 и пусти - + Preview Hotcue %1 Провери брзи маркер %1 - + Loop In Почетак понављања - + Loop Out Крај понављања - + Loop Exit Напусти петљу - + Reloop/Exit Loop Понављај/Настави - + Loop Halve Преполовљавање петље - + Loop Double Удвостручавање петље - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats Макни понављ. +%1 откуцај/а - + Move Loop -%1 Beats Макни понављ. -%1 откуцај/а - + Loop %1 Beats Понављај %1 откуцај/а - + Loop Roll %1 Beats Клизно понављ. %1 откуцај/а - + Add to Auto DJ Queue (bottom) Додајте у ред самосталног диџеја (доле) - + Append the selected track to the Auto DJ Queue Додај одабир на крај Ауто-Диџеј листе - + Add to Auto DJ Queue (top) Додајте у ред самосталног диџеја (горе) - + Prepend selected track to the Auto DJ Queue Додај одабир на почетак Ауто-Диџеј листе - + Load Track Учитај одабир - + Load selected track Учитајте изабрану нумеру - + Load selected track and play Учитајте изабрану нумеру и пустите је - - + + Record Mix Снимај микс - + Toggle mix recording Снимање микса активно - + Effects Дејства - + Quick Effects Једноставни ефекти - + Deck %1 Quick Effect Super Knob Дек %1 - гл. пот. за ефекте - + Quick Effect Super Knob (control linked effect parameters) Главни потенциометар за ефекте (контрола повезаних параметара) - - + + Quick Effect Једноставан ефекат - + Clear Unit Уклони процесор - + Clear effect unit Уклони процесор из модула - + Toggle Unit Процесор активан - + Dry/Wet Суво-Ефекат - + Adjust the balance between the original (dry) and processed (wet) signal. Постави однос јачине сувог (чистог) сигнала и обрађеног сигнала (ефекта) - + Super Knob Гл. потенциометар - + Next Chain Сл. ланац - + Assign Додели - + Clear Уклони - + Clear the current effect Уклони одабрани ефекат - + Toggle Активација - + Toggle the current effect Прекидач за одабрани ефекат - + Next Даље - + Switch to next effect Одабери сл. ефекат у низу - + Previous Претходно - + Switch to the previous effect Одабери претх. ефекат у низу - + Next or Previous Следећи/претходни - + Switch to either next or previous effect Одабери или сл или претходни ефекат у низу - - + + Parameter Value Вредност параметра - - + + Microphone Ducking Strength Јачина компресије микрофона - + Microphone Ducking Mode Режим компресије микрофона - + Gain Појачање - + Gain knob Дугменце појачања - + Shuffle the content of the Auto DJ queue Промешај листу Ауто-Диџеј-а - + Skip the next track in the Auto DJ queue Прескочи следећу нумеру у Ауто-Диџеј листи - + Auto DJ Toggle Ауто ДиЏеј активан - + Toggle Auto DJ On/Off Прекидач Ауто-Диџеј-а, укљ./искљ. - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore Увећај/смањи бирач нумера - + Maximize the track library to take up all the available screen space. Користи цео екран за одабир нумера - + Effect Rack Show/Hide Приказ ланца ефеката - + Show/hide the effect rack Прикажи или сакриј модул за ефекте - + Waveform Zoom Out Рашири осцилоскоп @@ -2211,103 +2238,103 @@ trace - Above + Profiling messages Појачање слушалица - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Брзина репродукције - + Playback speed control (Vinyl "Pitch" slider) Контрола брзине пуштања (аналогни "Pitch" клизач) - + Pitch (Musical key) Фрекв. (музикално) - + Increase Speed Увећај брзину - + Adjust speed faster (coarse) Подеси на брже (грубо) - + Increase Speed (Fine) Убрзај (фино) - + Adjust speed faster (fine) Подеси на брже (фино) - + Decrease Speed Смањи брзину - + Adjust speed slower (coarse) Подеси на спорије (грубо) - + Adjust speed slower (fine) Подеси на спорије (фино) - + Temporarily Increase Speed Моментално убрзање - + Temporarily increase speed (coarse) Моментално убрзање (грубо) - + Temporarily Increase Speed (Fine) Моментално убрзање (фино) - + Temporarily increase speed (fine) Моментално убрзање (фино) - + Temporarily Decrease Speed Моментално успорење - + Temporarily decrease speed (coarse) Моментално успорење (грубо) - + Temporarily Decrease Speed (Fine) Моментално успорење (фино) - + Temporarily decrease speed (fine) Моментално успорење (фино) @@ -2459,1059 +2486,1081 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) CUP (Скочи и пусти) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats Понављај одабране откуцаје - + Create a beat loop of selected beat size Активирај понављање са одређеним бројем откуцаја - + Loop Roll Selected Beats Клизно понављање одабраних откуцаја - + Create a rolling beat loop of selected beat size Активирај клизно понављање са одређеним бројем откуцаја - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position Укљ./искљ. понављање и врати на почетак понављања ако је прошао - + Reloop And Stop Понови па стани - + Enable loop, jump to Loop In point, and stop Активирај понављање, скочи на почетак понављања и заустави - + Halve the loop length Преполови дужину понављања - + Double the loop length Удвостручи дужину понављања - + Beat Jump / Loop Move Скок на откуцај / помак понављања - + Jump / Move Loop Forward %1 Beats Скочи / макни понављ. напред за %1 откуцај/а - + Jump / Move Loop Backward %1 Beats Скочи / макни понављ. назад за %1 откуцај/а - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats Скочи унапред %1 откуцај/а, или у случају понављања, помакни унапред %1 откуцај/а - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats Скочи уназад %1 откуцај/а, или у случају понављања, помакни уназад %1 откуцај/а - + Beat Jump / Loop Move Forward Selected Beats Прескочи откуцаје / помакни понављање одабиром - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats Прескочи број откуцаја у одабиру, или у случају понављања, помакни унапред исти број откуцаја - + Beat Jump / Loop Move Backward Selected Beats Врати уназад / помакни понављање по одабиру - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats Скочи на откуцај, или у случају понављања, помакни уназад, по дужини одабира - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up Нагоре - + Equivalent to pressing the UP key on the keyboard Исто што и тастер стрелице на горе - + Move down Надоле - + Equivalent to pressing the DOWN key on the keyboard Исто што и тастер стрелице на доле - + Move up/down Горе/доле - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys Вертикално померање потенциометра, као са тастерима стрелица - + Scroll Up Претходна страна - + Equivalent to pressing the PAGE UP key on the keyboard Исто што и тастер PAGE UP - + Scroll Down Следећа страна - + Equivalent to pressing the PAGE DOWN key on the keyboard Исто што и тастер PAGE DOWN - + Scroll up/down Навигација по странама - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys Груба навигација горе/доле употребом пот-а, исто се постиже тастерима PG UP/PG DN - + Move left Налево - + Equivalent to pressing the LEFT key on the keyboard Исто што и тастер стрелице на лево - + Move right Надесно - + Equivalent to pressing the RIGHT key on the keyboard Исто што и тастер стрелице на десно - + Move left/right Лево/десно - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys Померање лево/десно помоћу пот-а, исто се постиже тастерима стрелица лево/десно - + Move focus to right pane Пребаци се на десни сегмент - + Equivalent to pressing the TAB key on the keyboard Исто што и тастер TAB - + Move focus to left pane Пребаци се на леви сегмент - + Equivalent to pressing the SHIFT+TAB key on the keyboard Исто што и комбинација Shift+TAB - + Move focus to right/left pane Навигација кроз сегменте - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys Померање лево/десно кроз сегменте прозора помоћу пот-а, исто се постиже тастерима ТАВ/Shift+TAB - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item Скочи на одабрану ставку - + Choose the currently selected item and advance forward one pane if appropriate Маркирај одабрану ставку и пређи на одговарајући сегмент - + Load Track and Play - + Add to Auto DJ Queue (replace) Додај на Ауто-Диџеј листу (рокада) - + Replace Auto DJ Queue with selected tracks Нова Ауто-Диџеј листа од одабраних нумера - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing Укључи/искључи обраду сигнала - + Super Knob (control effects' Meta Knobs) Главни пот (контролише подесиве пот-е ефеката) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset Сл. меморисани ланац - + Previous Chain Претходни ланац - + Previous chain preset Претходни меморисани ланац - + Next/Previous Chain Сл./претх. меморисани ланац - + Next or previous chain preset Следећи или претходни меморисани ланац процесора - - + + Show Effect Parameters Приказ параметара ефекта - + Effect Unit Assignment - + Meta Knob Подесиви пот. - + Effect Meta Knob (control linked effect parameters) Подесиви пот. ефекта (за везивање параметара више ефеката) - + Meta Knob Mode Режим подесивог пот-а - + Set how linked effect parameters change when turning the Meta Knob. Подешавање реакције везаних пот-а - + Meta Knob Mode Invert Обрни ефекат подесивог пот-а - + Invert how linked effect parameters change when turning the Meta Knob. Наопако реаговање везаних пот-а - - + + Button Parameter Value - + Microphone / Auxiliary Микрофон / Екстерно - + Microphone On/Off Укљ/искљ микрофон - + Microphone on/off Микрофон укљ./искљ. - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) Одабир режима компресије микрофона (искљ., аутоматски, ручно) - + Auxiliary On/Off Укљ. искљ. екстерно - + Auxiliary on/off Активација екстерног сигнала - + Auto DJ Самостални Диџеј - + Auto DJ Shuffle Ауто-Диџеј "шафл" - + Auto DJ Skip Next Ауто-Диџеј - прескочи следеће - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next Ауто-Диџеј - постепено пређи на сл. - + Trigger the transition to the next track Окините прелаз на следећу нумеру - + User Interface Корисничко сучеље - + Samplers Show/Hide Приказ семплера - + Show/hide the sampler section Прикажи/сакриј одељак узорчника - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide Приказ аналогне контроле - + Show/hide the vinyl control section Прикажи/сакриј одељак управљања плочом - + Preview Deck Show/Hide Приказ припремног дека - + Show/hide the preview deck Прикажи/сакриј дек прегледа - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide Приказ индикатора аналогне контроле - + Show/hide spinning vinyl widget Прикажи/сакриј елемент окретања плоче - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom Ширина осцилоскопа - + Waveform Zoom Ширина приказа звука - + Zoom waveform in Сузи осцилоскоп - + Waveform Zoom In Фокусирај осцилоскоп на мањи сегмент - + Zoom waveform out Фокусирај осцилоскоп на шири сегмент - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3626,33 +3675,33 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Покушајте да средите проблем ресетовањем контролера - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. Изворни код садржи грешке. @@ -3696,13 +3745,13 @@ trace - Above + Profiling messages CrateFeature - + Remove Уклони - + Create New Crate Нова гајбица @@ -3712,132 +3761,132 @@ trace - Above + Profiling messages Преименуј - - + + Lock Закључај - + Export Crate as Playlist - + Export Track Files Направи фајл - + Duplicate Дуплирај - + Analyze entire Crate Анализирај целу гајбицу - + Auto DJ Track Source Селекција за Ауто-Диџеј-а - + Enter new name for crate: Унесите назив нове гајбице: - - + + Crates Гајбице - - + + Import Crate Увези гајбицу - + Export Crate Извези гајбицу - + Unlock Откључај - + An unknown error occurred while creating crate: Дошло је до непознате грешке приликом стварања гајбице: - + Rename Crate Преименуј гајбицу - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Нисам успео да преименујем гајбицу - + Crate Creation Failed Креирање гајбице неуспешно - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) М3У списак нумера (*.m3u);;М3У8 списак нумера (*.m3u8);;ПЛС списак нумера (*.pls);;Текстуални ЦСВ (*.csv);;Читљив текст (*.txt) - + M3U Playlist (*.m3u) М3У листа (*.м3у) - + Crates are a great way to help organize the music you want to DJ with. Гајбице су одличан начин за испомоћ приликом организовања музике са којом желите да радите у диџеју. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! Гајбице вам омогућавају да организујете вашу музику онако како ви то хоћете! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Назив гајбице не може бити празан. - + A crate by that name already exists. Већ постоји гајбица са овим називом. @@ -3932,12 +3981,12 @@ trace - Above + Profiling messages Претходни доприносиоци - + Official Website - + Donate @@ -4059,72 +4108,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Секунде - + Auto DJ Fade Modes Full Intro + Outro: @@ -4155,82 +4204,82 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. Декови који се не користе за Ауто-Диџеј морају бити заустављени да би се омогућио рад Ауто-Диџеј-а. - + Repeat Понови - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. Један од декова мора бити заустављен да би се омогућио рад Ауто-Диџеј-а - + Enable - + Disable - + Displays the duration and number of selected tracks. Приказује укупну дужину и количину одабраних нумера. - - - + + + Auto DJ Самостални Диџеј - + Shuffle Измешај - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. Додаје произвољну нумеру из @@ -4485,40 +4534,40 @@ Often results in higher quality beatgrids, but will not do well on tracks that h детекцију дугметом "Покушај опет" - + Didn't get any midi messages. Please try again. Нема порука на видику. Покушајте опет. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. Не могу да препознам поруку - покушајте опет. Да ли можда дирате више контрола одједном? - + Successfully mapped control: Успешно научена контрола: - + <i>Ready to learn %1</i> <i>Позорност за %1</i> - + Learning: %1. Now move a control on your controller. Учим: %1. Сада померите елемент на хардверу. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4559,17 +4608,17 @@ You tried to learn: %1,%2 Избаци у цсв - + Log Записник - + Search Нађи - + Stats Статистика @@ -5243,115 +5292,115 @@ associated with each key. DlgPrefController - + Apply device settings? Да применим подешавања уређаја? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Ваша подешавања морају бити примењена пре него што покренете чаробњака учења. Да применим подешавања и да наставим? - + None Ништа - + %1 by %2 %1 од %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting Решавање проблема - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings Уклони мапиране контроле - + Are you sure you want to clear all input mappings? Да ли заиста желите да уклоните све мапиране контроле? - + Clear Output Mappings Обриши мапиране контроле - + Are you sure you want to clear all output mappings? Да ли заисте желите да обришете све мапиране контроле? @@ -5365,105 +5414,105 @@ Apply settings and continue? Назив управљача - + Enabled Укључен - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Опис: - + Support: Подршка: - + Screens preview - + Input Mappings Мапирање улаза - - + + Search Нађи - - + + Add Додај - - + + Remove Уклони @@ -5478,22 +5527,22 @@ Apply settings and continue? Избори за контролере - + Load Mapping: - + Mapping Info - + Author: Аутор: - + Name: Назив: @@ -5503,28 +5552,28 @@ Apply settings and continue? Чаробњак учења (само МИДИ) - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Очисти све - + Output Mappings Мапирање излаза @@ -5700,6 +5749,16 @@ MIDI учење, за одабрани контролер. Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6314,64 +6373,64 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Овај дизајн захтева резолуцију екрана која је већа од тренутне. - + Allow screensaver to run Дозволи штедњу екрана при раду - + Prevent screensaver from running Спречи штедњу екрана - + Prevent screensaver while playing Спречи гашење екрана при репродукцији - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Овај дизајн не подржава промену палете боја - + Information Обавештење - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7588,155 +7647,154 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) Основно (дуги ехо) - + Experimental (no delay) Експериментално (без еха) - + Disabled (short delay) Угашено (кратак ехо) - + Soundcard Clock Клок звучног адаптера - + Network Clock Мрежни клок - + Direct monitor (recording and broadcasting only) Директни мониторинг (за снимање и емитовање) - + Disabled Неактивно - + Enabled Укључен - + Stereo Стерео - + Mono Моно - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. Микрофонски сигнал у емисији и снимку није усаглашен са оним што чујете. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. Измери мрежно кашњење и унеси га заједно са Микрофонском компензацијом да би усагласили микрофон. - - + Refer to the Mixxx User Manual for details. Консултујте Миксиксикс приручник за више информација. - + Configured latency has changed. Поставка компензације кашњења захтева корекцију. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. Поново измери мрежно кашњење и унеси га заједно са Микрофонском @@ -7744,27 +7802,27 @@ The loudness target is approximate and assumes track pregain and main output lev микрофонски сигнал. - + Realtime scheduling is enabled. Активно је мерење у реалном времену. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Грешка подешавања @@ -7782,135 +7840,135 @@ The loudness target is approximate and assumes track pregain and main output lev АПИ звука - + Sample Rate Фрекв. узорковања - + Audio Buffer Звучна међу-меморија - + Engine Clock Референтни клок - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. Користите клок звучног адаптера за живе ситуације и смањено кашњење.<br>Користите мрежни клок за емитовање без активне публике. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode Мониторинг микрофона - + Microphone Latency Compensation Микрофонска компензација - - - - + + + + ms milliseconds ms - + 20 ms 20 ms - + Buffer Underflow Count Број пражњења међу-меморије - + 0 0 - + Keylock/Pitch-Bending Engine Систем променљиве фреквенције - + Multi-Soundcard Synchronization Мулти-адаптерска синхронизација - + Output Излаз - + Input Улаз - + System Reported Latency Системско кашњење - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. Увећајте звучну међу-меморију ако се бројач пражњења стално увећава, или чујете "пуцкетање" у репродукцији. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics Савети и дијагностика - + Downsize your audio buffer to improve Mixxx's responsiveness. Смањите звучну међу-меморију за бржи одзив Микс-ове апаратуре. - + Query Devices Пропитај уређаје @@ -8065,27 +8123,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available ОпенГЛ није доступан - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -8098,250 +8157,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate Проток кадрова - - Displays which OpenGL version is supported by the current platform. - Прикажите које издање ОпенГЛ-а је подржано текућом платформом. + + OpenGL Status + - - Waveform - + + Displays which OpenGL version is supported by the current platform. + Прикажите које издање ОпенГЛ-а је подржано текућом платформом. - + Normalize waveform overview - + Average frame rate - + Visual gain Видно појачање - + Default zoom level Waveform zoom - + Displays the actual frame rate. Прикажите садашњи проток кадрова. - + Visual gain of the middle frequencies Видљиво појачање средњих учесталости - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds сек. - + Low Низак - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies Видљиво појачање високих учесталости - + Visual gain of the low frequencies Видљиво појачање ниских учесталости - + High Висок - + Global visual gain Опште видно појачање - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. Ускладите ниво увећавања преко свих приказа таласних облика. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8349,47 +8414,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Звучне компоненте - + Controllers Управљачи - + Library Библиотека - + Interface Сучеље - + Waveforms - + Mixer Мешач - + Auto DJ Самостални Диџеј - + Decks - + Colors @@ -8424,47 +8489,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Дејства - + Recording Снимање - + Beat Detection Откривање такта - + Key Detection - + Normalization Нормализација - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Управљање плочом - + Live Broadcasting Емитовање уживо - + Modplug Decoder @@ -8497,22 +8562,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Започни снимање - + Recording to file: - + Stop Recording Заустави снимање - + %1 MiB written in %2 @@ -8820,284 +8885,284 @@ This can not be undone! Сажетак - + Filetype: Врста датотеке: - + BPM: ТУМ: - + Location: Место: - + Bitrate: Проток бита: - + Comments - + BPM ТУМ - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Нумера бр. - + Album Artist Извођач - + Composer Састављач - + Title Наслов - + Grouping Груписање - + Key Кључ - + Year Година - + Artist Извођач - + Album Албум - + Genre Жанр - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM Удвостручи ТУМ - + Halve BPM Преполови ТУМ - + Clear BPM and Beatgrid Очисти ТУМ и тактну мрежу - + Move to the previous item. "Previous" button - + &Previous &Претходна - + Move to the next item. "Next" button - + &Next &Следећа - + Duration: Трајање: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser Отвори у прегледнику датотека - + Samplerate: - + Track BPM: Прати ТУМ: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat Лупни такт - + Hint: Use the Library Analyze view to run BPM detection. Савет: Користите преглед анализирања библиотеке да покренете откривање ТУМ-а. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Примени - + &Cancel &Откажи - + (no color) @@ -9254,7 +9319,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9456,27 +9521,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9620,38 +9685,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes ајТјунс - + Select your iTunes library Изаберите вашу ајТјунс библиотеку - + (loading) iTunes (учитавам) ајТјунс - + Use Default Library Користи основну библиотеку - + Choose Library... Изабери библиотеку... - + Error Loading iTunes Library Грешка учитавања ајТјунс библиотеке - + There was an error loading your iTunes library. Check the logs for details. @@ -9659,12 +9724,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9672,18 +9737,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9691,15 +9756,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9710,57 +9775,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate покрени - + toggle окини - + right десно - + left лево - + right small мали десни - + left small мали леви - + up горе - + down доле - + up small мало горе - + down small мало доле - + Shortcut Пречица @@ -9768,62 +9833,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9833,22 +9898,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Увезите списак нумера - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Спискови нумера (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9895,27 +9960,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9975,18 +10040,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Недостајуће нумере - + Hidden Tracks Скривене нумере - Export to Engine Prime + Export to Engine DJ @@ -9998,208 +10063,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Звучни уређај је заузет - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Покушајте поново</b> након што затворите други прог или поново прикључите звучни уређај - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Поново подесите</b> подешавања звучног уређаја Миксикса. - - + + Get <b>Help</b> from the Mixxx Wiki. Нађите <b>Помоћ</b> на Викију Миксикса. - - - + + + <b>Exit</b> Mixxx. <b>Изађите</b> из Миксикса. - + Retry Покушај поново - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Поново подеси - + Help Помоћ - - + + Exit Изађи - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices Нема излазних уређаја - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Миксикс је подешен без иједног излазног звучног уређаја. Обрада звука ће бити онемогућена без подешеног излазног уређаја. - + <b>Continue</b> without any outputs. <b>Наствите</b> без икаквих излаза. - + Continue Настави - + Load track to Deck %1 Учитај нумеру на носач %1 - + Deck %1 is currently playing a track. Носач %1 тренутно пушта нумеру. - + Are you sure you want to load a new track? Да ли сигурно желите да учитате нову нумеру? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Грешка у датотеци маске - + The selected skin cannot be loaded. Изабрана маска не може бити учитана. - + OpenGL Direct Rendering Посредно исцртавање ОпенГЛ-а - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Потврди излаз - + A deck is currently playing. Exit Mixxx? Носач тренутно пушта. Да изађем из Миксикса? - + A sampler is currently playing. Exit Mixxx? Узорчник тренутно пушта. Да изађем из Миксикса? - + The preferences window is still open. Прозор поставки је још увек отворен. - + Discard any changes and exit Mixxx? Да одбацим могуће измене и да напустим Миксикс? @@ -10215,13 +10321,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Закључај - - + + Playlists Списак нумера @@ -10231,32 +10337,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Откључај - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Неки диџеји изграде спискове нумера пре него ли обаве изведбу, а неки то раде у току саме представе. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Када користите списак нумера током живог ДиЏеј скупа, сетите се да увек обратите пажњу на то како ваша публика реагује на музику коју сте изабрали за пуштање. - + Create New Playlist Састави листу песама @@ -11747,7 +11879,7 @@ Fully right: end of the effect period - + Deck %1 Палуба %1 @@ -11880,7 +12012,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Пропуштање @@ -11911,7 +12043,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -12044,12 +12176,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -12084,42 +12216,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12177,54 +12309,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Списак нумера - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12359,19 +12491,19 @@ may introduce a 'pumping' effect and/or distortion. Закључај - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12783,7 +12915,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl Вртење плоче @@ -12965,7 +13097,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Омот @@ -13201,197 +13333,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap Темпо и лупкање ТУМ-а - + Show/hide the spinning vinyl section. Прикажите/сакријте одељак окретања плоче. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play Пусти - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13629,924 +13761,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank Сачувај групу узорака - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank Учитај групу узорака - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters Приказ параметара ефекта - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob Гл. потенциометар - + Next Chain Сл. ланац - + Previous Chain Претходни ланац - + Next/Previous Chain Сл./претх. меморисани ланац - + Clear Уклони - + Clear the current effect. - + Toggle Активација - + Toggle the current effect. - + Next Даље - + Clear Unit Уклони процесор - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit Процесор активан - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Претходно - + Switch to the previous effect. - + Next or Previous Следећи/претходни - + Switch to either the next or previous effect. - + Meta Knob Подесиви пот. - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Дотерај тактну мрежу - + Adjust beatgrid so the closest beat is aligned with the current play position. Дотерајте тактну мрежу тако да је најближи такт поравнат са тренутним положајем пуштања. - - + + Adjust beatgrid to match another playing deck. Намести Битгрид да прати други дек - + If quantize is enabled, snaps to the nearest beat. Ако је омогућено куантизовање, пријања се на најближи такт. - + Quantize Квантизуј - + Toggles quantization. Окините квантизацију. - + Loops and cues snap to the nearest beat when quantization is enabled. Петље и наговештаји пријањају на најближи такт када је укључена квантизација. - + Reverse Уназад - + Reverses track playback during regular playback. Пустите траку уназад за време редовног пуштања. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause Пусти/паузирај - + Jumps to the beginning of the track. Скочите на почетак нумере. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14681,33 +14821,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. Пустите или паузирајте нумеру. - + (while playing) (за време пуштања) @@ -14727,205 +14867,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (док је заустављена) - + Cue Наговештај - + Headphone Слушалице - + Mute Пригуши - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. Ускладите са првим носачем (према бројевима) који пушта нумеру и има ТПМ. - + If no deck is playing, syncs to the first deck that has a BPM. Ако ниједан носач не пушта, ускладите са првим носачем који има ТПМ. - + Decks can't sync to samplers and samplers can only sync to decks. Носачи могу да се усклађују са узорчницима а узорчници могу само да се усклађују са носачима. - + Hold for at least a second to enable sync lock for this deck. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust Подеси фреквенцију - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix Снимај микс - + Toggle mix recording. - + Enable Live Broadcasting - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. Пуштање ће се наставити са места на коме би нумера била да није ушла у петљу. - + Loop Exit Напусти петљу - + Turns the current loop off. Искључите тренутну петљу. - + Slip Mode Режим мировања - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. Када је радан, пуштање се наставља пригушено у позадини током петље, уназад, гребања итд. - + Once disabled, the audible playback will resume where the track would have been. Када га искључите, чујно пуштање ће се наставити са места на коме била нумера. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock Сат - + Displays the current time. Прикажите тренутно време. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14970,254 +15120,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind Брзо премотај уназад - + Fast rewind through the track. Брзо премотавајте уназад по нумери. - + Fast Forward Брзо премотај унапред - + Fast forward through the track. Брзо премотавајте унапред по нумери. - + Jumps to the end of the track. Скочите на крај нумере. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control Управљање тоном - + Pitch Rate Проток тона - + Displays the current playback rate of the track. Прикажите текући проток пуштања нумере. - + Repeat Понови - + When active the track will repeat if you go past the end or reverse before the start. Када ће активна нумера бити поновљена ако прођете крај или вратите уназад пре почетка. - + Eject Избаци - + Ejects track from the player. Избаците нумеру из програма. - + Hotcue Битан наговештај - + If hotcue is set, jumps to the hotcue. Ако је постављен битан наговештај, скочите на битни наговештај. - + If hotcue is not set, sets the hotcue to the current play position. Ако битан наговештај није подешен, поставите битан наговештај на тренутни положај пуштања. - + Vinyl Control Mode Режим управљања плочом - + Absolute mode - track position equals needle position and speed. Режим апсолутности — положај нумере изједначава положај и брзину игле. - + Relative mode - track speed equals needle speed regardless of needle position. Режим релативности — брзина нумере изједначава брзину игле без обзира на њен положај. - + Constant mode - track speed equals last known-steady speed regardless of needle input. Режим сталности — брзина нумере изједначава последњу знану стабилну брзину без обзира на улаз игле. - + Vinyl Status Стање плоче - + Provides visual feedback for vinyl control status: Обезбедите видљиве повратне податке за стање управљања плочом: - + Green for control enabled. Зелено за укључено управљање. - + Blinking yellow for when the needle reaches the end of the record. Жуто трепћуће када игла стигне на крај снимка. - + Loop-In Marker Означавач упетљавања - + Loop-Out Marker Означавач отпетљавања - + Loop Halve Преполовљавање петље - + Halves the current loop's length by moving the end marker. Преполовите трајање тренутне петље померањем крајњег означавача. - + Deck immediately loops if past the new endpoint. Носач одмах прави петљу ако је прошао нову крајњу тачку. - + Loop Double Удвостручавање петље - + Doubles the current loop's length by moving the end marker. Удвостручите трајање тренутне петље померањем крајњег означавача. - + Beatloop Тактна петља - + Toggles the current loop on or off. Укључите или искључите тренутну петљу. - + Works only if Loop-In and Loop-Out marker are set. Ради само ако су постављени означавачи за упетљавање и отпетљавање. - + Vinyl Cueing Mode Режим наговештаја плоче - + Determines how cue points are treated in vinyl control Relative mode: Одредите како се поступа са тачкама наговештаја у релативном режиму управљања плочом: - + Off - Cue points ignored. Искљ. — Тачке наговештаја су занемарене. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. Један наговештај — Ако отпустите иглу након тачке наговештаја, нумера ће се премотати до тачке наговештаја. - + Track Time Време нумере - + Track Duration Трајање нумере - + Displays the duration of the loaded track. Прикажите трајање учитане нумере. - + Information is loaded from the track's metadata tags. Податак се учитава из ознака метаподатака нумере. - + Track Artist Извођач нумере - + Displays the artist of the loaded track. Прикажите извођача учитане нумере. - + Track Title Наслов нумере - + Displays the title of the loaded track. Прикажите наслов учитане нумере. - + Track Album Албум нумере - + Displays the album name of the loaded track. Прикажите назив албума учитане нумере. - + Track Artist/Title Извођач/Наслов нумере - + Displays the artist and title of the loaded track. Прикажите извођача и наслов учитане нумере. @@ -15225,12 +15375,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15238,47 +15388,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15450,47 +15595,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15614,407 +15759,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... - - Export the library to the Engine Prime format + + Search for tracks in the current library view + + + + + Ctrl+f - + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist Направите нови списак нумера - + Ctrl+n - + Create New &Crate - + Create a new crate Направите нову гајбицу - + Ctrl+Shift+N Ктрл-Помак+Н - - + + &View Пре&глед - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Не може бити подржано на свим маскама. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ктрл+1 - + Show Microphone Section Прикажи одељак микрофона - + Show the microphone section of the Mixxx interface. Прикажите одељак микрофона у сучељу Миксикса. - + Ctrl+2 Menubar|View|Show Microphone Section Ктрл+2 - + Show Vinyl Control Section Прикажи одељак управљања плочом - + Show the vinyl control section of the Mixxx interface. Прикажите одељак управљања плочом у сучељу Миксикса. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ктрл+3 - + Show Preview Deck Прикажи носач прегледа - + Show the preview deck in the Mixxx interface. Прикажите носач прегледа у сучељу Миксикса. - + Ctrl+4 Menubar|View|Show Preview Deck Ктрл+4 - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. Користи цео екран за одабир нумера - + Space Menubar|View|Maximize Library - + &Full Screen &Цео екран - + Display Mixxx using the full screen Прикажите Миксикс користећи цео екран - + &Options &Опције - + &Vinyl Control &Управљање плочом - + Use timecoded vinyls on external turntables to control Mixxx Користите плоче са временским кодирањем на спољним грамофонима да управљате Миксиксом - + Enable Vinyl Control &%1 - + &Record Mix &Сними микс - + Record your mix to a file Снимите ваш микс у датотеку - + Ctrl+R Ктрл+Р - + Enable Live &Broadcasting Укључи емитовање &уживо - + Stream your mixes to a shoutcast or icecast server Пошаљите ток ваших радова на сервер шоуткаста или ајскаста - + Ctrl+L Ктрл+Л - + Enable &Keyboard Shortcuts Укључи пречице на &тастатури - + Toggles keyboard shortcuts on or off Укључите или искључите пречице тастатуре - + Ctrl+` Ктрл+` - + &Preferences &Поставке - + Change Mixxx settings (e.g. playback, MIDI, controls) Измените подешавања Миксикса (нпр. пуштање, МИДИ, управљања) - + &Developer - + &Reload Skin &Поново учитај маску - + Reload the skin Поново учитајте маску - + Ctrl+Shift+R Ктрл+Помак+Р - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help По&моћ - + Show Keywheel menu title - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support &Подршка заједнице - + Get help with Mixxx Потражите помоћ за Миксикс - + &User Manual &Корисничко упутство - + Read the Mixxx user manual. Прочитајте корисничко упутство Миксикса. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Преведи овај програм - + Help translate this application into your language. Помозите у превођењу овог програма на наш језик насушни. - + &About &О програму - + About the application О самом програму @@ -16022,25 +16198,25 @@ This can not be undone! WOverview - + Passthrough Пропуштање - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -16049,25 +16225,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ктрл+Ф - - - + Search noun Нађи - + Clear input @@ -16078,169 +16242,163 @@ This can not be undone! Потражи... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Пречица + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ктрл+Ф + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Изађи - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Кључ - + harmonic with %1 - + BPM ТУМ - + between %1 and %2 - + Artist Извођач - + Album Artist Извођач - + Composer Састављач - + Title Наслов - + Album Албум - + Grouping Груписање - + Year Година - + Genre Жанр - + Directory - + &Search selected @@ -16248,599 +16406,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck Носач - + Sampler Узорчник - + Add to Playlist Додај на списак нумера - + Crates Гајбице - + Metadata Мета-подаци - + Update external collections - + Cover Art Омот - + Adjust BPM - + Select Color - - + + Analyze Анализирај - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Додајте у ред самосталног диџеја (доле) - + Add to Auto DJ Queue (top) Додајте у ред самосталног диџеја (горе) - + Add to Auto DJ Queue (replace) Додај на Ауто-Диџеј листу (рокада) - + Preview Deck Носач прегледа - + Remove Уклони - + Remove from Playlist - + Remove from Crate - + Hide from Library Сакриј у библиотеци - + Unhide from Library Прикажи у библиотеци - + Purge from Library Избаци из библиотеке - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties Својства - + Open in File Browser Отвори у прегледнику датотека - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Оцена - + Cue Point - + + Hotcues Битни наговештаји - + Intro - + Outro - + Key Кључ - + ReplayGain Ауто-ниво - + Waveform - + Comment Примедба - + All Све - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM Закључај ТУМ - + Unlock BPM Откључај ТУМ - + Double BPM Удвостручи ТУМ - + Halve BPM Преполови ТУМ - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Палуба %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Састави листу песама - + Enter name for new playlist: Ново име за листу песама: - + New Playlist Нови списак нумера - - - + + + Playlist Creation Failed Стварање списка нумера није успело - + A playlist by that name already exists. Већ постоји списак нумера са овим називом. - + A playlist cannot have a blank name. Назив списка нумера не може бити празан. - + An unknown error occurred while creating playlist: Дошло је до непознате грешке приликом стварања списка нумера: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Откажи - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Затвори - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16856,37 +17040,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16894,37 +17078,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16932,60 +17116,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Прикажите или сакријте колоне. + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Изаберите директоријум музичке библиотеке - + controllers - + Cannot open database Не могу да отворим базу података - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16999,67 +17188,78 @@ Click OK to exit. mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Разгледај - + Export directory - + Database version - + Export - + Cancel Откажи - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -17080,7 +17280,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -17090,23 +17290,23 @@ Click OK to exit. mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_sv.qm b/res/translations/mixxx_sv.qm index 77e7ddb9fd1f..cd3b0cdd4d8e 100644 Binary files a/res/translations/mixxx_sv.qm and b/res/translations/mixxx_sv.qm differ diff --git a/res/translations/mixxx_sv.ts b/res/translations/mixxx_sv.ts index 1d3e98d4d436..69b15a4b1bb4 100644 --- a/res/translations/mixxx_sv.ts +++ b/res/translations/mixxx_sv.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source Avlägsna back som låtkälla - + Auto DJ Auto DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source Lägg till back som låtkälla @@ -149,7 +149,7 @@ BasePlaylistFeature - + New Playlist Ny spellista @@ -160,7 +160,7 @@ - + Create New Playlist Skapa ny spellista @@ -190,113 +190,120 @@ Duplicera - - + + Import Playlist Importera spellista - + Export Track Files Exportera spår-filer - + Analyze entire Playlist Analysera hela spellistan - + Enter new name for playlist: Mata in ett nytt namn för spellistan: - + Duplicate Playlist Duplicera spellista - - + + Enter name for new playlist: Mata in ett namn för ny spellista: - - + + Export Playlist Exportera spellista - + Add to Auto DJ Queue (replace) Lägg till i Auto-DJ-kön (ersätt) - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Byt namn på spellista - - + + Renaming Playlist Failed Namnbyte misslyckades - - - + + + A playlist by that name already exists. En spellista med det namnet finns redan. - - - + + + A playlist cannot have a blank name. En spellista kan inte vara utan namn. - + _copy //: Appendix to default name when duplicating a playlist _kopiera - - - - - - + + + + + + Playlist Creation Failed Spellistan gick inte att skapa - - + + An unknown error occurred while creating playlist: Ett okänt fel uppstod när spellistan skapades: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U-spellista (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U spellista (*.m3u);;M3U8 spellista (*.m3u8);;PLS spellista (*.pls);;Text CSV (*.csv);;Läsbar text (*.txt) @@ -304,12 +311,12 @@ BaseSqlTableModel - + # # - + Timestamp Tidsstämpel @@ -317,7 +324,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Kunde inte ladda in låt. @@ -325,137 +332,142 @@ BaseTrackTableModel - + Album Album - + Album Artist Album-artist - + Artist Artist - + Bitrate Bithastighet - + BPM BPM - + Channels Kanaler - + Color Färg - + Comment Kommentar - + Composer Kompositör - + Cover Art Album-konst - + Date Added Datum tillagd - + Last Played Senast spelad - + Duration Varaktighet - + Type Typ - + Genre Genre - + Grouping Gruppindelning - + Key Tonart - + Location Plats - + + Overview + + + + Preview Förhandsgranska - + Rating Betyg - + ReplayGain Förstärkning av uppspelning - + Samplerate - + Played Spelad - + Title Titel - + Track # Låt # - + Year År - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -543,67 +555,77 @@ BrowseFeature - + Add to Quick Links Spara till Snabblänkar - + Remove from Quick Links Ta bort från Snabblänkar - + Add to Library Spara till bibliotek - + Refresh directory tree - + Quick Links Snabblänkar - - + + Devices Enheter - + Removable Devices Flyttbara enheter - - + + Computer Dator - + Music Directory Added Musik-mapp tillagd - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan Skanna - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -1046,13 +1068,13 @@ trace - Above + Profiling messages - + Set to full volume Ställ in full ljudstyrka - + Set to zero volume Ställ ljudstyrkan till noll @@ -1077,13 +1099,13 @@ trace - Above + Profiling messages Knapp baklänges-slinga (förhandslyssning) - + Headphone listen button Lyssna-knapp hörlur - + Mute button Tysta-knapp @@ -1094,25 +1116,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) Mix-balans (t.ex. vänster, höger, i mitten) - + Set mix orientation to left Sätter mix-balansen åt vänster - + Set mix orientation to center Sätter mix-balansen i mitten - + Set mix orientation to right Sätter mix-balansen åt höger @@ -1153,22 +1175,22 @@ trace - Above + Profiling messages Knapp för att trumma BPM - + Toggle quantize mode Växla kvantiseringssätt - + One-time beat sync (tempo only) Engångs takt-sync (endast tempo) - + One-time beat sync (phase only) Engångs takt-sync (endast fas) - + Toggle keylock mode Växla sätt för tonhöjdslås @@ -1178,193 +1200,193 @@ trace - Above + Profiling messages Equalizers - + Vinyl Control Vinylstyrning - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) Växla markeringssätt för vinylstyrning (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) Växla vinylstyrningssätt (ABS/REL/CONST) - + Pass through external audio into the internal mixer Passera genom externt ljud till den interna mixern - + Cues Markeringar - + Cue button Markeringsknapp - + Set cue point Ange markeringspunkt - + Go to cue point Hoppa till markeringspunkt - + Go to cue point and play Hoppa till markeringspunkt och spela - + Go to cue point and stop Hoppa till markeringspunkt och stoppa - + Preview from cue point Förhandslyssna från markeringspunkt - + Cue button (CDJ mode) Markeringsknapp (CDJ-metod) - + Stutter cue Ryckvis markering - + Hotcues Snabbmarkeringar - + Set, preview from or jump to hotcue %1 Sätt, förhandslyssna från eller hoppa till snabbmarkering %1 - + Clear hotcue %1 Ta bort snabbmarkering %1 - + Set hotcue %1 Sätt snabbmarkering %1 - + Jump to hotcue %1 Hoppa till snabbmarkering %1 - + Jump to hotcue %1 and stop Hoppa till snabbmarkering %1 och stoppa - + Jump to hotcue %1 and play Hoppa till snabbmarkering %1 och spela - + Preview from hotcue %1 Förhandslyssna från snabbmarkering %1 - - + + Hotcue %1 Snabbmarkering %1 - + Looping Slinga - + Loop In button Slinga in-knapp - + Loop Out button Slinga ut-knapp - + Loop Exit button Upprepa Avsluta-knappen - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 8 - + 16 16 - + 32 32 - + 64 64 - + Move loop forward by %1 beats Flytta slinga framåt med %1 taktslag - + Move loop backward by %1 beats Flytta slinga bakåt med %1 taktslag - + Create %1-beat loop Skapa en %1-taktslags-slinga - + Create temporary %1-beat loop roll Skapa en temporär %1-takts rullande slinga @@ -1480,20 +1502,20 @@ trace - Above + Profiling messages - - + + Volume Fader Volymfader - + Full Volume Full volym - + Zero Volume Noll volym @@ -1509,7 +1531,7 @@ trace - Above + Profiling messages - + Mute Tysta @@ -1520,7 +1542,7 @@ trace - Above + Profiling messages - + Headphone Listen Hörlurslyssning @@ -1541,25 +1563,25 @@ trace - Above + Profiling messages - + Orientation Balans - + Orient Left Balans till vänster - + Orient Center Balans i mitten - + Orient Right Balans till höger @@ -1629,82 +1651,82 @@ trace - Above + Profiling messages Justera taktmönstret åt höger - + Adjust Beatgrid Justera taktmönster - + Align beatgrid to current position Rikta in taktmönstret mot aktuell position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode Kvantiseringssätt - + Sync Sync - + Beat Sync One-Shot One-Shot takt-synkning - + Sync Tempo One-Shot One-Shot hastighets-synkning - + Sync Phase One-Shot One-Shot fas-synkning - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust Justera hastighet - + Adjust pitch from speed slider pitch - + Match musical key Matcha tonhöjden - + Match Key Matcha tonart - + Reset Key Återställ tonart - + Resets key to original Återställ tonart till original @@ -1745,451 +1767,451 @@ trace - Above + Profiling messages Bas-EQ - + Toggle Vinyl Control Växla vinylstyrning - + Toggle Vinyl Control (ON/OFF) Växla vinylstyrning (PÅ/AV) - + Vinyl Control Mode Vinylstyrningssätt - + Vinyl Control Cueing Mode Markeringssätt för vinylstyrning - + Vinyl Control Passthrough Vinylstyrning "släpp igenom" - + Vinyl Control Next Deck Vinylstyrning "nästa tallrik" - + Single deck mode - Switch vinyl control to next deck Entallriksmodus - växla vinylstyrning till nästa tallrik - + Cue Markering - + Set Cue Sätt markering - + Go-To Cue Gå till markering - + Go-To Cue And Play Gå till markering och spela - + Go-To Cue And Stop Gå till markering och stoppa - + Preview Cue Förhandslyssna markering - + Cue (CDJ Mode) Markering (CDJ-metod) - + Stutter Cue Ryckvis markering - + Go to cue point and play after release - + Clear Hotcue %1 Ta bort snabbmarkering %1 - + Set Hotcue %1 Sätt snabbmarkering %1 - + Jump To Hotcue %1 Hoppa till snabbmarkering %1 - + Jump To Hotcue %1 And Stop Hoppa till snabbmarkering %1 och stoppa - + Jump To Hotcue %1 And Play Hoppa till snabbmarkering %1 och spela - + Preview Hotcue %1 Förhandslyssna snabbmarkering %1 - + Loop In Slinga in - + Loop Out Slinga ut - + Loop Exit Avsluta slinga - + Reloop/Exit Loop Repetera/avsluta slinga - + Loop Halve Halv slinga - + Loop Double Dubbel slinga - + 1/32 1/32 - + 1/16 1/16 - + 1/8 1/8 - + 1/4 1/4 - + Move Loop +%1 Beats Förskjut slinga +%1 taktslag - + Move Loop -%1 Beats Förskjut slinga -%1 taktslag - + Loop %1 Beats Kretsa runt %1 taktslag - + Loop Roll %1 Beats Rullande slinga %1 taktslag - + Add to Auto DJ Queue (bottom) Spara till Auto DJ kö (sist) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Spara till Auto DJ kö (först) - + Prepend selected track to the Auto DJ Queue - + Load Track Ladda låt - + Load selected track Ladda valda låtar - + Load selected track and play Ladda utvald låt och spela - - + + Record Mix Spela in mix - + Toggle mix recording Mix-inspelning på/av - + Effects Effekter - + Quick Effects Snabbeffekter - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect Snabbeffekt - + Clear Unit Rensa enhet - + Clear effect unit Nollställ effektenheten - + Toggle Unit Växla enhet - + Dry/Wet Torrt/vått - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob Superknapp - + Next Chain Nästa kedja - + Assign Tilldela - + Clear Rensa - + Clear the current effect Nollställ aktuell effekt - + Toggle Växla - + Toggle the current effect Slå på/av aktuell effekt - + Next Nästa - + Switch to next effect Växla till nästa effekt - + Previous Bakåt - + Switch to the previous effect Växla till föregående effekt - + Next or Previous Nästa eller föregående - + Switch to either next or previous effect Växla till nästa eller föregående effekt - - + + Parameter Value Parameter-värde - - + + Microphone Ducking Strength Styrka mikrofonduckning - + Microphone Ducking Mode Mikrofonducknings-sätt - + Gain Förstärkning - + Gain knob Vred för ökning - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle Växla Auto DJ - + Toggle Auto DJ On/Off Växla Auto-DJ på/av - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide Mixer visa/dölj - + Show or hide the mixer. Visa eller dölj mixern. - + Cover Art Show/Hide (Library) Omslagskonst visa/dölj (bibliotek) - + Show/hide cover art in the library Visa/dölj omslagskonst i biblioteket - + Library Maximize/Restore Bibliotek maximera/återställ - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide Effektrack visa/dölj - + Show/hide the effect rack Visa/dölj effektracket - + Waveform Zoom Out Vågform zooma ut @@ -2204,102 +2226,102 @@ trace - Above + Profiling messages Lyssningsnivå hörlur - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed Uppspelningshastighet - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) Tonhöjd - + Increase Speed Öka hastighet - + Adjust speed faster (coarse) - + Increase Speed (Fine) Öka hastigheten (fin) - + Adjust speed faster (fine) - + Decrease Speed Sänk hastighet - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed Öka hastighet temporärt - + Temporarily increase speed (coarse) Öka hastigheten temporärt (grovt) - + Temporarily Increase Speed (Fine) Öka hastigheten temporärt (fint) - + Temporarily increase speed (fine) Öka hastigheten temporärt (fint) - + Temporarily Decrease Speed Minska hastighet temporärt - + Temporarily decrease speed (coarse) Sänk hastigheten temporärt (grovt) - + Temporarily Decrease Speed (Fine) Sänk hastigheten temporärt (fint) - + Temporarily decrease speed (fine) Sänk hastigheten temporärt (fint) @@ -2451,1053 +2473,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed Hastighet - + Decrease Speed (Fine) - + Pitch (Musical Key) Tonhöjd - + Increase Pitch Öka tonhöjd - + Increases the pitch by one semitone Ökar tonhöjden med en semiton - + Increase Pitch (Fine) Öka tonhöjd (fint) - + Increases the pitch by 10 cents - + Decrease Pitch Minska tonhöjd - + Decreases the pitch by one semitone Minskar tonhöjden med en semiton - + Decrease Pitch (Fine) Minska tonhöjd (fint) - + Decreases the pitch by 10 cents - + Keylock Tangentlås - + CUP (Cue + Play) CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - - + + Sort hotcues by position - - + + Sort hotcues by position (remove offsets) - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker Aktivera %1 - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker Rensa %1 - + Clear the %1 [intro/outro marker Rensa %1 - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length Halvera looplängden - + Double the loop length Dubbla looplängden - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward Flytta loop framåt - + Loop Move Backward Flytta loop bakåt - + Remove Temporary Loop - + Remove the temporary loop - + Navigation Navigering - + Move up Flytta upp - + Equivalent to pressing the UP key on the keyboard Samma som att trycka UPP piltangenten på tangentbordet - + Move down Flytta ned - + Equivalent to pressing the DOWN key on the keyboard Samma som att trycka NER piltangenten på tangentbordet - + Move up/down Flytta upp/ner - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up Scrolla upp - + Equivalent to pressing the PAGE UP key on the keyboard Samma som att trycka SIDA UPP tangenten på tangentbordet - + Scroll Down Scrolla ner - + Equivalent to pressing the PAGE DOWN key on the keyboard Samma som att trycka SIDA NER tangenten på tangentbordet - + Scroll up/down Scrolla upp/ner - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left Flytta vänster - + Equivalent to pressing the LEFT key on the keyboard Samma som att trycka VÄNSTER piltangent på tangentbordet - + Move right Flytta höger - + Equivalent to pressing the RIGHT key on the keyboard Samma som att trycka HÖGER piltangent på tangentbordet - + Move left/right Flytta vänster/höger - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard Samma som att trycka TAB tangenten på tangentbordet - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard Samma som att trycka SHIFT + TAB tangenten på tangentbordet - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play Ladda låt och spela - + Add to Auto DJ Queue (replace) Lägg till i Auto-DJ-kön (ersätt) - + Replace Auto DJ Queue with selected tracks Ersätt Auto DJ-kön med valda låtar - + Select next search history Välj nästa sökhistorik - + Selects the next search history entry - + Select previous search history Välj föregående sökhistorik - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search Rensa sökning - + Clears the search query Rensar sökningen - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing Aktivera eller inaktivera effektbearbetning - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset Nästa kedjeförinställning - + Previous Chain Föregående kedja - + Previous chain preset Föregående kedjeförinställning - + Next/Previous Chain Nästa/föregående kedja - + Next or previous chain preset Nästa eller föregående kedjeförinställning - - + + Show Effect Parameters Visa effektparametrar - + Effect Unit Assignment - + Meta Knob Meta-ratt - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode Metaratts-läge - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value Knappparameter-värde - + Microphone / Auxiliary Mikrofon / Extraingång - + Microphone On/Off Mikrofon på/av - + Microphone on/off Mikrofon på/av - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) Växla mikrofonducknings-sätt (AV, AUTO, MANUELL) - + Auxiliary On/Off Extraingång på/av - + Auxiliary on/off Extraingång på/av - + Auto DJ Auto DJ - + Auto DJ Shuffle Slumpvis Auto DJ - + Auto DJ Skip Next Auto DJ hoppa över nästa - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next Auto DJ tona till nästa - + Trigger the transition to the next track Utlös övergången till nästa låt - + User Interface Användargränssnitt - + Samplers Show/Hide Visa/dölj samplare - + Show/hide the sampler section Visa/dölj samplar-delen - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting Starta/stoppa livesändning - + Stream your mix over the Internet. Streama din mix över internet. - + Start/stop recording your mix. Starta/stoppa inspelning av din mix. - - + + Samplers Samplare - + Vinyl Control Show/Hide Vinylstyrning visa/dölj - + Show/hide the vinyl control section Visa/dölj vinylstyrningssektionen - + Preview Deck Show/Hide Visa/dölj förhandslyssnings-tallrikar - + Show/hide the preview deck Visa/dölj förhandsgranskningstallriken - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide Visa/dölj vinyl-snurra - + Show/hide spinning vinyl widget Visa/dölj vinylsnurrorna - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies Visa/dölj alla snurrisar - + Toggle Waveforms Växla vågformer - + Show/hide the scrolling waveforms. Visa/dölj de scrollande vågformerna. - + Waveform zoom Vågform zoom - + Waveform Zoom Vågform zoom - + Zoom waveform in Vågform zooma in - + Waveform Zoom In Vågform zooma in - + Zoom waveform out Vågform zooma ut - + Star Rating Up Stjärnbetyg upp - + Increase the track rating by one star Öka låtbetyget med en stjärna - + Star Rating Down Stjärnbetyg ner - + Decrease the track rating by one star Minska låtbetyget med en stjärna @@ -3612,32 +3644,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Försök att rädda situationen genom att återställa din styrenhet. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. Skriptkoden måste fixas. @@ -3745,7 +3777,7 @@ trace - Above + Profiling messages Importera back - + Export Crate Exportera back @@ -3755,7 +3787,7 @@ trace - Above + Profiling messages Lås upp - + An unknown error occurred while creating crate: Ett okänt fel uppstod vid skapandet av backen @@ -3764,12 +3796,6 @@ trace - Above + Profiling messages Rename Crate Döp om back - - - - Export to Engine Prime - - Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. @@ -3787,17 +3813,17 @@ trace - Above + Profiling messages Omdöpning av back misslyckades - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U spellista (*.m3u);;M3U8 spellista (*.m3u8);;PLS spellista (*.pls);;Text CSV (*.csv);;Läsbar text (*.txt) - + M3U Playlist (*.m3u) M3U-spellista (*.m3u) @@ -3806,6 +3832,12 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. Backar är ett utmärkt sätt att hjälpa till att organisera den musik du vill mixa med. + + + + Export to Engine DJ + + Crates let you organize your music however you'd like! @@ -3917,12 +3949,12 @@ trace - Above + Profiling messages Tidigare bidragsgivare - + Official Website Officiell webbplats - + Donate Donera @@ -4438,37 +4470,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h Om länkningen inte fungerar, försök med att aktivera en av de avancerade optionerna nedan och försök använda styrenheten igen. Du kan också klicka på Försök igen för att låta Mixxx söka efter MIDI-styrenhet på nytt. - + Didn't get any midi messages. Please try again. Kunde inte ta emot några MIDI-meddelanden. Försök igen. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. Kunde inte upptäcka någon länk -- försök igen. Tänk på att bara röra en styrfunktion åt gången. - + Successfully mapped control: Mappning av styrfunktion lyckades: - + <i>Ready to learn %1</i> <i>Redo att lära in %1</i> - + Learning: %1. Now move a control on your controller. Lära in: %1. Rör en knapp på din styrenhet. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4507,17 +4539,17 @@ You tried to learn: %1,%2 Dumpa till csv - + Log Logg - + Search Sök - + Stats Statistik @@ -5170,114 +5202,114 @@ associated with each key. DlgPrefController - + Apply device settings? Verkställ enhetsinställningar? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? Dina inställningar måste verkställas innan läriin-guiden kan startas. Spara inställningarna och fortsätt? - + None Ingen - + %1 by %2 %1 av %2 - + Mapping has been edited Mappning har redigerats - + Always overwrite during this session - + Save As Spara som - + Overwrite Skriv över - + Save user mapping Spara användarmappning - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed Misslyckades med sparande av mappning - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. En mappningsfil med det namnet finns redan. - + Do you want to save the changes? Vill du spara ändringarna? - + Troubleshooting Felsökning - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. Mappning finns redan. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings Rensa ingångs-länkningar - + Are you sure you want to clear all input mappings? Är du säker på att du vill rensa alla ingångs-länkningar? - + Clear Output Mappings Rensa utgångs-länkningar - + Are you sure you want to clear all output mappings? Är du säker på att du vill rensa alla utgångs-länkningar? @@ -5295,100 +5327,100 @@ Spara inställningarna och fortsätt? Aktiverad - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Beskrivning: - + Support: Hjälp: - + Screens preview - + Input Mappings Ingångs-länkningar - - + + Search Sök - - + + Add Lägg till - - + + Remove Ta bort @@ -5408,17 +5440,17 @@ Spara inställningarna och fortsätt? Ladda mappning: - + Mapping Info Mappningsinfo - + Author: Upphovsman: - + Name: Namn: @@ -5428,28 +5460,28 @@ Spara inställningarna och fortsätt? Lär in-guiden (endast MIDI) - + Data protocol: - + Mapping Files: Mappningsfiler: - + Mapping Settings - - + + Clear All Rensa allt - + Output Mappings Utgångs-länkningar @@ -5608,6 +5640,16 @@ Spara inställningarna och fortsätt? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6199,62 +6241,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Den minsta storleken för det valda skinnet är större än din skärmupplösning. - + Allow screensaver to run Tillåt skärmsläckare att starta - + Prevent screensaver from running Hindra skärmsläckare från att starta - + Prevent screensaver while playing Hindra skärmsläckare vid uppspelning - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Det här skinnet har inte stöd för färgscheman - + Information Information - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7421,173 +7463,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Hz - + Default (long delay) Standard (lång fördröjning) - + Experimental (no delay) Experimentell (ingen fördröjning) - + Disabled (short delay) Avstängd (kort fördröjning) - + Soundcard Clock Ljudkortsklocka - + Network Clock Nätverksklocka - + Direct monitor (recording and broadcasting only) - + Disabled Avstängd - + Enabled Aktiverad - + Stereo Stereo - + Mono Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide Mixxx DJ hårdvaruguide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 ms - + Configuration error Konfigurationsfel @@ -7605,131 +7646,131 @@ The loudness target is approximate and assumes track pregain and main output lev Ljud-API - + Sample Rate Samplingsfrekvens - + Audio Buffer Ljudbuffert - + Engine Clock Motorklocka - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix Huvudmix - + Main Output Mode Huvudutgångsläge - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds ms - + 20 ms 20 ms - + Buffer Underflow Count Sammanräkning Buffer Underflow - + 0 0 - + Keylock/Pitch-Bending Engine Tonhöjds/pitch-bend rutin - + Multi-Soundcard Synchronization Synkronisering av flera ljudkort. - + Output Utgång - + Input Ingång - + System Reported Latency Systemets rapporterade latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. Utvidga din audio-buffert om underströms-räknaren ökar på, eller om du hör smällar under uppspelning. - + Main Output Delay Huvudutgångs-fördröjning - + Headphone Output Delay Hörlursutgångs-fördröjning - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics Tips och diagnostik - + Downsize your audio buffer to improve Mixxx's responsiveness. Minska din audio-buffert för Mixxx ska reagera snabbare. - + Query Devices Fråga enheter @@ -8175,47 +8216,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Ljudhårdvara - + Controllers Styrenheter - + Library Bibliotek - + Interface Gränssnitt - + Waveforms Vågformer - + Mixer Mixerbord - + Auto DJ Auto DJ - + Decks - + Colors Färger @@ -8250,47 +8291,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Effekter - + Recording Inspelning - + Beat Detection Takthittare - + Key Detection Tonartsfinnare - + Normalization Normalisering - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Vinylstyrning - + Live Broadcasting Livesändning - + Modplug Decoder Modplug-avkodare @@ -8646,284 +8687,284 @@ This can not be undone! Sammanfattning - + Filetype: Filtyp: - + BPM: BPM: - + Location: Plats: - + Bitrate: Bithastighet: - + Comments Kommentarer - + BPM BPM - + Sets the BPM to 75% of the current value. Ställer BPM till 75% av det aktuella värdet. - + 3/4 BPM 3/4 BPM - + Sets the BPM to 50% of the current value. Ställer BPM till 50% av det aktuella värdet. - + Displays the BPM of the selected track. Visar BPM för den utvalda låten. - + Track # Låt # - + Album Artist Album-artist - + Composer Kompositör - + Title Titel - + Grouping Gruppindelning - + Key Tonart - + Year År - + Artist Artist - + Album Album - + Genre Genre - + ReplayGain: ReplayGain: - + Sets the BPM to 200% of the current value. Ställer BPM till 200% av det aktuella värdet. - + Double BPM Dubbel BPM - + Halve BPM Halva BPM - + Clear BPM and Beatgrid Rensa BPM och taktmönster - + Move to the previous item. "Previous" button Hoppa till föregående objekt. - + &Previous &Föregående - + Move to the next item. "Next" button Hoppa till nästa objekt. - + &Next &Nästa - + Duration: Speltid: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color Färg - + Date added: Datum tillagd: - + Open in File Browser Öppna i filhanteraren - + Samplerate: - + Track BPM: Låt BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo Anta konstant tempo - + Sets the BPM to 66% of the current value. Ställer BPM till 66% av det aktuella värdet. - + 2/3 BPM 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. Knacka i takt med musiken för att ställa in BPM till hastigheten du knackar med. - + Tap to Beat Trumma i takt - + Hint: Use the Library Analyze view to run BPM detection. Tips: använd Biblioteksanalysatorn för köra BPM-mätning. - + Save changes and close the window. "OK" button Spara ändringarna och stäng fönstret. - + &OK &OK - + Discard changes and close the window. "Cancel" button Ignorera ändringar och stäng fönstret. - + Save changes and keep the window open. "Apply" button Spara ändringar och hålla fönstret öppet. - + &Apply &Verkställ - + &Cancel &Avbryt - + (no color) @@ -9080,7 +9121,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9282,27 +9323,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) Soundtouch (snabbare) - + Rubberband (better) Gummiband (bättre) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9517,15 +9558,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. Felsäker modus aktiverad - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9537,57 +9578,57 @@ Shown when VuMeter can not be displayed. Please keep stöd. - + activate aktivera - + toggle växla - + right höger - + left vänster - + right small höger liten - + left small vänster liten - + up upp - + down ner - + up small upp liten - + down small ner liten - + Shortcut Genväg @@ -9595,62 +9636,62 @@ stöd. Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9660,22 +9701,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Importera spellista - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Spellistsfiler (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? Skriv över fil? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9722,27 +9763,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found MixxxControl(s) hittades inte - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. Vissa lysdioder eller andra indikatorer kanske inte fungerar korrekt. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) * Kontrollera att MixxxControl-namnen är rättstavade i länknings-filen (.xml) @@ -9803,18 +9844,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks Saknade låtar - + Hidden Tracks Döljda låtar - Export to Engine Prime + Export to Engine DJ @@ -9826,210 +9867,251 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Ljudenheten är upptagen - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Försök igen</b> efter det andra programmet har stängts eller efter att en ljudenhet åter anslutits - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Konfigurera om</b> Mixxx ljudenhetsinställningar. - - + + Get <b>Help</b> from the Mixxx Wiki. Få <b>Hjälp</b> från Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. <b>Avsluta</b> Mixxx. - + Retry Försök igen - + skin skal - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Konfigurera om - + Help Hjälp - - + + Exit Avsluta - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error Ljudenhetsfel - + <b>Retry</b> after fixing an issue - + No Output Devices Inga utenheter - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. Mixxx konfigurerades utan några enheter för ljudåtergivning. All ljudbehandling är deaktiverad när inga ljudutgångar är konfigurerade. - + <b>Continue</b> without any outputs. <b>Fortsätt</b> utan några utgångar. - + Continue Fortsätt - + Load track to Deck %1 Ladda låt till tallrik %1 - + Deck %1 is currently playing a track. Tallrik %1 spelar en låt just nu. - + Are you sure you want to load a new track? Är du säker på att du vill ladda en nytt låt? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Ingen enhet för ljudingång är utvald för den här vinylstyrningsenheten. Välj först en ingångsenhet i inställningarna för ljudhårdvara. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Ingen ingångsenhet utvald för den här genomgångsstyrenheten. Välj först ut en ingångsenhet i inställningarna för ljudhårdvara. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file Fel hittat i skinn-filen - + The selected skin cannot be loaded. Kunde inte ladda in det utvalda skinnet. - + OpenGL Direct Rendering OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Bekräfta avsluta - + A deck is currently playing. Exit Mixxx? En tallrik spelar fortfarande. Vill du avsluta Mixxx? - + A sampler is currently playing. Exit Mixxx? En samplare spelar fortfarande. Vill du avsluta Mixxx? - + The preferences window is still open. Inställningsfönstret är fortfarande öppnat. - + Discard any changes and exit Mixxx? Kassera eventuella ändringar och avsluta Mixxx? @@ -10045,13 +10127,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Lås - - + + Playlists Spellistor @@ -10061,32 +10143,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Lås upp - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. En del DJs sätter ihop spellistor innan de uppträder live, medan andra föredrar att sätte ihop dem spontant. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. On du använder en spellista vid ett live-DJ uppträdande, tänk på att kolla hur publiken reagerar på musiken du valt ut. - + Create New Playlist Skapa ny spellista @@ -10307,12 +10415,12 @@ Do you want to scan your library for cover files now? Button - + Knapp Switch - + Switch @@ -10845,7 +10953,7 @@ With width at zero, this allows for manually sweeping over the entire delay rang Decay - + Decay @@ -10901,7 +11009,7 @@ Higher values result in less attenuation of high frequencies. Kill Low - + Kill Low @@ -10936,7 +11044,7 @@ Higher values result in less attenuation of high frequencies. Kill Mid - + Kill Mid @@ -10957,7 +11065,7 @@ Higher values result in less attenuation of high frequencies. Kill High - + Kill High @@ -11346,12 +11454,12 @@ It is designed as a complement to the steep mixing equalizers. Gain 1 - + Gain 1 Gain for Filter 1 - + Gain för Filter 1 @@ -11381,12 +11489,12 @@ a higher Q affects a narrower band of frequencies. Gain 2 - + Gain 2 Gain for Filter 2 - + Gain för Filter 2 @@ -11577,7 +11685,7 @@ Fully right: end of the effect period - + Deck %1 Tallrik %1 @@ -11710,7 +11818,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -11741,7 +11849,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11874,12 +11982,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11914,42 +12022,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -12007,54 +12115,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox Rekordbox - + Playlists Spellistor - + Folders Mappar - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox (laddar) Rekordbox @@ -12613,7 +12721,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl Vinylsnurra @@ -12795,7 +12903,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Album-konst @@ -13031,197 +13139,197 @@ may introduce a 'pumping' effect and/or distortion. När du trummar här, ändras BPM uppåt något. - + Adjust Beats Earlier Justera taktslag tidigare - + When tapped, moves the beatgrid left by a small amount. När du trummar här, flyttar sej taktmönstret åt vänster ett kort stycke. - + Adjust Beats Later Justera taktslag senare - + When tapped, moves the beatgrid right by a small amount. När du trummar här, flyttar sej taktmönstret åt höger ett kort stycke. - + Tempo and BPM Tap Trumma tempo och BPM - + Show/hide the spinning vinyl section. Visa/dölj sektionen med vinylsnurror. - + Keylock Tangentlås - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play Spela - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock - + Tap to sync the tempo to other playing tracks or the sync leader. - + Enable Sync Leader - + When enabled, this device will serve as the sync leader for all other decks. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration Inspelningslängd @@ -13459,926 +13567,932 @@ may introduce a 'pumping' effect and/or distortion. - - Revert last BPM/Beatgrid Change + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. - - Revert last BPM/Beatgrid Change of the loaded track. + + Revert last BPM/Beatgrid Change + + + + + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - - + + Drag a Hotcue button here to continue playing after releasing the Hotcue. - + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable Huvudmix aktivera - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active Auto-DJ är aktivt - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. Klicka för att växla mellan tid förflutet/återstående tid/både. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode Mixläge - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu Stilinställningar-meny - + Show/hide skin settings menu Visa/dölj stilinställningar-menyn - + Save Sampler Bank Spara samplar-uppsättning - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank Ladda in samplar-uppsättning - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters Visa effektparametrar - + Enable Effect Aktivera effekt - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob Superknapp - + Next Chain Nästa kedja - + Previous Chain Föregående kedja - + Next/Previous Chain Nästa/föregående kedja - + Clear Rensa - + Clear the current effect. Rensa nuvarande effekt. - + Toggle Växla - + Toggle the current effect. Växla nuvarande effekt. - + Next Nästa - + Clear Unit Rensa enhet - + Clear effect unit. Rensa effektenhet. - + Show/hide parameters for effects in this unit. Visa/dölj parametrar för effekter i denna enhet. - + Toggle Unit Växla enhet - + Enable or disable this whole effect unit. Aktivera eller inaktivera hela denna effektenhet. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - + + + + Assign Effect Unit Tilldela effektenhet - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. Skickar hörlursljudet genom den här effekten. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. Växla till nästa effekt. - + Previous Bakåt - + Switch to the previous effect. Växla till föregående effekt. - + Next or Previous Nästa eller föregående - + Switch to either the next or previous effect. Växla till antingen nästa eller föregående effekt. - + Meta Knob Meta-ratt - + Controls linked parameters of this effect Kontrollerar länkade parametrar på denna effekt - + Effect Focus Button Effektfokus-knapp - + Focuses this effect. Fokuserar denna effekt. - + Unfocuses this effect. Avfokuserar denna effekt. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter Effektparameter - + Adjusts a parameter of the effect. Justerar en parameter av effekten. - + Inactive: parameter not linked Inaktiv: parameter inte länkad - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter Equalizerparameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid Justera taktmönster - + Adjust beatgrid so the closest beat is aligned with the current play position. Justerar taktmönstret så att det närmaste taktslaget stämmer överens med den aktuella uppspelningspositionen. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. Hoppar till närmaste taktslag om kvantisering är aktiverad. - + Quantize Kvantisering - + Toggles quantization. Slår på/av kvantisering. - + Loops and cues snap to the nearest beat when quantization is enabled. Slingor och markeringar snäpper till närmaste taktslag när kvantisering är aktiverad. - + Reverse Baklänges - + Reverses track playback during regular playback. Spelar låten baklänges under vanlig uppspelning. - + Puts a track into reverse while being held (Censor). Spelar en låt baklänges så länge knappen trycks ned (censur) - + Playback continues where the track would have been if it had not been temporarily reversed. Uppspelningen fortsätter från den position den skulle varit om inte låten spelats baklänges tillfälligt. - - - + + + Play/Pause Spela/Paus - + Jumps to the beginning of the track. Hoppar till början av låten. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. Ökar tonhöjden med en semiton. - + Decreases the pitch by one semitone. Minskar tonhöjden med en semiton. - + Enable Vinyl Control Aktivera vinylkontroll - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. Indikerar att ljudbufferten är för liten för att kunna bearbeta allt ljud korrekt. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating Stjärnbetyg - + Assign ratings to individual tracks by clicking the stars. @@ -14513,33 +14627,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. Börjar spela från början av låten. - + Jumps to the beginning of the track and stops. Hoppa till början av låten och stoppa. - - + + Plays or pauses the track. Spelar eller pausar låten. - + (while playing) (vid uppspelning) @@ -14559,215 +14673,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) (medan stoppad) - + Cue Markering - + Headphone Hörlur - + Mute Tysta - + Old Synchronize Äldre synkning - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. Synkroniserar till den första tallriken (i nummerordning) som spelar en låt och har BPM-information. - + If no deck is playing, syncs to the first deck that has a BPM. Synkroniserar till tallriken som har en BPM, om någon tallrik spelar. - + Decks can't sync to samplers and samplers can only sync to decks. Tallrikar kan inte synkronisera till samplare och samplare kan endast synkronisera till tallrikar. - + Hold for at least a second to enable sync lock for this deck. Håll ner i minst en sekund för att aktivera Sync Lock för den här tallriken. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. Tallrikar med Sync Lock spelar i samma tempo, och tallrikar som också har aktiverad kvantisering spelas alltid med samtidiga taktslag. - + Resets the key to the original track key. - + Speed Control Hastighetsstyrning - - - + + + Changes the track pitch independent of the tempo. Ändrar låtens tonhöjd oberoende av tempot. - + Increases the pitch by 10 cents. Ökar pitchen med 10 cents. - + Decreases the pitch by 10 cents. Minskar pitchen med 10 cents. - + Pitch Adjust Justera hastighet - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + Drag this button onto a Play button while previewing to continue playback after release. - + Dragging with Shift key pressed will not start previewing the hotcue. - + Record Mix Spela in mix - + Toggle mix recording. Växla mixinspelning. - + Enable Live Broadcasting Aktivera livesändning - + Stream your mix over the Internet. Streama din mix över internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. inaktiverad, ansluter, ansluten, misslyckande. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. Uppspelningen fortsätter från den position den skulle ha varit om låten inte hade lagts in i slingan. - + Loop Exit Avsluta slinga - + Turns the current loop off. Stänger av aktuell slinga. - + Slip Mode Spela-vidare-sätt - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. Uppspelningen fortsätter tyst samtidigt som du använder slingor, baklängesspelning, scratchning, o.s.v. när denna funktion är aktiverad. - + Once disabled, the audible playback will resume where the track would have been. Vid avstängning fortsätter uppspelningen från det ställe låten skulle ha varit. - + Track Key The musical key of a track Låtens tonart - + Displays the musical key of the loaded track. Visar den laddade låtens tonart. - + Clock Klocka - + Displays the current time. Visar aktuell tid. - + Audio Latency Usage Meter Ljudlatensanvändningsmätare - + Displays the fraction of latency used for audio processing. Visar hur stor del av latensen som används för ljudbehandlingen. - + A high value indicates that audible glitches are likely. Ett högt värde tyder på att hörbara störningar är troliga. - + Do not enable keylock, effects or additional decks in this situation. Aktivera inte tonhöjdslås, effekter eller ytterligare tallrikar i denna situation. - + Audio Latency Overload Indicator Indikator för ljudlatensöverbelastning @@ -14812,254 +14926,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects.Visar låtens aktuella tonart efter tonhöjdsändring. - + Fast Rewind Snabbspolning bakåt - + Fast rewind through the track. Spolar låten snabbt bakåt. - + Fast Forward Snabbspolning framåt - + Fast forward through the track. Spolar låten snabbt framåt. - + Jumps to the end of the track. Hoppar till slutet av låten. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control Tonhöjdsstyrning - + Pitch Rate Tonhöjdshastighet - + Displays the current playback rate of the track. Visar uppspelningshastigheten för spåret som spelas upp. - + Repeat Upprepa - + When active the track will repeat if you go past the end or reverse before the start. Om aktiverad repeteras låten om du fortsätter bortom slutet eller backar före början. - + Eject Mata ut - + Ejects track from the player. Matar ut låten från spelaren. - + Hotcue Snabbmarkering - + If hotcue is set, jumps to the hotcue. Hoppar till en snabbmarkering, om den existerar - + If hotcue is not set, sets the hotcue to the current play position. Sätter en snabbmarkering vid aktuell position, om ingen snabbmarkering existerar. - + Vinyl Control Mode Vinylstyrningssätt - + Absolute mode - track position equals needle position and speed. Absolut modus - låtpositionen är samma som nålpositionen och -hastigheten. - + Relative mode - track speed equals needle speed regardless of needle position. Relativ modus - låthastigheten är samma som nålhastigheten, oavsett av nålpositionen. - + Constant mode - track speed equals last known-steady speed regardless of needle input. Konstant modus - låthastigheten är samma som den sist använda, jämna hastigheten, oavsett nålinformationen. - + Vinyl Status Vinylstatus - + Provides visual feedback for vinyl control status: Tillhandahåller visuell feed-back av vinylstyrning: - + Green for control enabled. Grönt för aktiverad styrenhet. - + Blinking yellow for when the needle reaches the end of the record. Blinkande gult när nålen når slutet av skivan. - + Loop-In Marker Loop-in-markering - + Loop-Out Marker Loop-out-markering - + Loop Halve Halv slinga - + Halves the current loop's length by moving the end marker. Halverar längden av den aktuella slingan genom att flytta slutmarkeringen. - + Deck immediately loops if past the new endpoint. Om bortom den nya slutpunkten hoppar tallriken genast tillbaks i slingan. - + Loop Double Dubbel slinga - + Doubles the current loop's length by moving the end marker. Dubblar längden av den aktuella slingan genom att flytta slutmarkeringen. - + Beatloop Taktslinga - + Toggles the current loop on or off. Slår på/av aktuell slinga - + Works only if Loop-In and Loop-Out marker are set. Fungerar bara om både loop-in- och loop-out-markeringar har satts. - + Vinyl Cueing Mode Vinylmarkeringssätt - + Determines how cue points are treated in vinyl control Relative mode: Bestämmer hur markeringspunkter behandlas i relativ modus för vinylstyrning: - + Off - Cue points ignored. Av - Markeringspunkter ignoreras. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. Enkelmarkering - om du släpper ner nålen efter markeringen, kommer låten att hoppa till denna markering. - + Track Time Låtens tidsläge - + Track Duration Låtens speltid - + Displays the duration of the loaded track. Visar speltiden för den laddade låten. - + Information is loaded from the track's metadata tags. Informationen laddas från låtens metadatataggar. - + Track Artist Låtens artist - + Displays the artist of the loaded track. Visar artisten för den laddade låten. - + Track Title Låtens titel - + Displays the title of the loaded track. Visar titeln för den laddade låten. - + Track Album Låtens album - + Displays the album name of the loaded track. Visar albumnamnet för den laddade låten. - + Track Artist/Title Låtens artist/titel - + Displays the artist and title of the loaded track. Visar artisten och titeln för den laddade låten. @@ -15067,12 +15181,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks Döljer spår - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15287,47 +15401,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... Etikett... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15452,323 +15566,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Skapa &ny spellista - + Create a new playlist Skapa en ny spellista. - + Ctrl+n Ctrl+n - + Create New &Crate Skapa ny &back - + Create a new crate Skapa en ny back - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View &Vy - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Fungerar möjligen inte för alla skinn. - + Show Skin Settings Menu Visa stilinställningar-menyn - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section Visa mikrofonsektionen - + Show the microphone section of the Mixxx interface. Visa Mixxx mikrofonsektion. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section Visa vinylstyrningssektionen - + Show the vinyl control section of the Mixxx interface. Visa Mixxx sektion med vinylstyrning. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck Visa förlyssnings-tallrik - + Show the preview deck in the Mixxx interface. Visa Mixxx sektion med förlyssnings-tallrikar. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art Visa omslagskonst - + Show cover art in the Mixxx interface. Visar omslagskonst i Mixxx-gränssnittet. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library Maximera bibliotek - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library Mellanslag - + &Full Screen &Helskärm - + Display Mixxx using the full screen Visa Mixxx i helskärmsläge - + &Options &Optioner - + &Vinyl Control &Vinylstyrning - + Use timecoded vinyls on external turntables to control Mixxx Använd tidskodade skivor på externa skivspelare för att styra Mixxx. - + Enable Vinyl Control &%1 Aktivera vinylstyrning &%1 - + &Record Mix %Spela in Mix - + Record your mix to a file Spara din mix till en fil - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Aktivera livesä&ndning - + Stream your mixes to a shoutcast or icecast server Streama dina mixar till en shoutcast- eller icecast-server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts Aktivera tangentbords&genvägar - + Toggles keyboard shortcuts on or off Slår på/av tangentbordsgenvägar - + Ctrl+` Ctrl+` - + &Preferences &Inställningar - + Change Mixxx settings (e.g. playback, MIDI, controls) Ändra Mixxx inställningar (t.ex. återgivning, MIDI, styrenheter) - + &Developer &Utvecklare - + &Reload Skin &Ladda om skinnet - + Reload the skin Ladda om skinnet - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools Utvecklarverktyg - + Opens the developer tools dialog Öppnar dialogrutan för utvecklingsverktyg - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Hjälp - + Show Keywheel menu title @@ -15785,74 +15929,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel F12 - + &Community Support Hjälp från andra &användare - + Get help with Mixxx Få hjälp för Mixxx. - + &User Manual Br&uksanvisning - + Read the Mixxx user manual. Läs bruksanvisningen för Mixxx. - + &Keyboard Shortcuts & Tangentbordsgenvägar - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application Översä&tt denna applikation - + Help translate this application into your language. Hjälp oss att översätta det här programmet till ditt språk. - + &About &Om... - + About the application Om programmet @@ -15860,25 +16004,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible Redo att spela, analyserar... - - + + Loading track... Text on waveform overview when file is cached from source Laddar låt... - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15887,25 +16031,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Sök - + Clear input @@ -15916,169 +16048,163 @@ This can not be undone! Sök... - + Clear the search bar input field - - Enter a string to search for - Ange en sträng att söka efter + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Genväg + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Fokus + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts - Genvägar + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries Växla sökhistorik - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Avsluta sök + + Delete query from history + WSearchRelatedTracksMenu - + Search related Tracks Sök relaterade låtar - + Key Nyckel - + harmonic with %1 - + BPM BPM - + between %1 and %2 mellan %1 och %2 - + Artist Artist - + Album Artist Album-artist - + Composer Kompositör - + Title Titel - + Album Album - + Grouping Gruppindelning - + Year År - + Genre Genre - + Directory - + &Search selected @@ -16086,620 +16212,625 @@ This can not be undone! WTrackMenu - + Load to Ladda till - + Deck Tallrik - + Sampler Samplare - + Add to Playlist Spara till spellistan. - + Crates Backar - + Metadata Metadata - + Update external collections Uppdatera externa samlingar - + Cover Art Album-konst - + Adjust BPM Justera BPM - + Select Color Välj färg - - + + Analyze Analysera - - + + Delete Track Files Ta bort låtfiler - + Add to Auto DJ Queue (bottom) Spara till Auto DJ kö (sist) - + Add to Auto DJ Queue (top) Spara till Auto DJ kö (först) - + Add to Auto DJ Queue (replace) Lägg till i Auto-DJ-kön (ersätt) - + Preview Deck Förlyssnings-tallrik - + Remove Ta bort - + Remove from Playlist Ta bort från spellista - + Remove from Crate - + Hide from Library Dölj från biblioteket - + Unhide from Library Ta fram från biblioteket - + Purge from Library Rensa från biblioteket - + Move Track File(s) to Trash - + Delete Files from Disk Ta bort filer från disk - + Properties Egenskaper - + Open in File Browser Öppna i filhanteraren - + Select in Library - + Import From File Tags Importera från filtaggar - + Import From MusicBrainz Importera från MusicBrainz - + Export To File Tags Exportera tlll filtaggar - + BPM and Beatgrid - + Play Count Antal spelningar - + Rating Betyg - + Cue Point - - + + Hotcues Snabbmarkeringar - + Intro Intro - + Outro Outro - + Key Nyckel - + ReplayGain Förstärkning av uppspelning - + Waveform Vågform - + Comment Kommentar - + All Alla - + Sort hotcues by position (remove offsets) - + Sort hotcues by position - + Lock BPM Lås BPM - + Unlock BPM Lås upp BPM - + Double BPM Dubbel BPM - + Halve BPM Halva BPM - + 2/3 BPM 2/3 BPM - + 3/4 BPM 3/4 BPM - + 4/3 BPM 4/3 BPM - + 3/2 BPM 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 Tallrik %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Skapa ny spellista - + Enter name for new playlist: Mata in ett namn för ny spellista: - + New Playlist Ny spellista - - - + + + Playlist Creation Failed Spellistan gick inte att skapa - + A playlist by that name already exists. En spellista med det namnet finns redan. - + A playlist cannot have a blank name. En spellista kan inte vara utan namn. - + An unknown error occurred while creating playlist: Ett okänt fel uppstod när spellistan skapades: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Sorting hotcues of %n track(s) by position (remove offsets) - + Sorting hotcues of %n track(s) by position - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? Ta bort dessa filer från disk permanent? - - + + This can not be undone! Detta kan inte ångras! - + Cancel Avbryt - + Delete Files Ta bort filer - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted Låtfiler borttagna - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close Stäng - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16715,37 +16846,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16753,37 +16884,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal Bekräfta borttagning av låt @@ -16791,12 +16922,12 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Visa eller dölj kolumner. - + Shuffle Tracks @@ -16804,52 +16935,52 @@ This can not be undone! mixxx::CoreServices - + fonts fonter - + database databas - + effects effekter - + audio interface - + decks - + library bibliotek - + Choose music library directory Välj mapp för musikbibliotek - + controllers - + Cannot open database Kan inte öppna databasen - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16863,68 +16994,78 @@ Klicka på OK för att avsluta. mixxx::DlgLibraryExport - + Entire music library Hela musikbiblioteket - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Bläddra… - + Export directory - + Database version Databas-version - + Export Exportera - + Cancel Avbryt - + Export Library to Engine DJ "Engine DJ" must not be translated - + Export Library To Exportera bibliotek till - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16945,7 +17086,7 @@ Klicka på OK för att avsluta. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16955,23 +17096,23 @@ Klicka på OK för att avsluta. mixxx::LibraryExporter - + Export Completed Export slutförd - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed Export misslyckades - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_tr.qm b/res/translations/mixxx_tr.qm index 43da67b7837f..213bdd649b26 100644 Binary files a/res/translations/mixxx_tr.qm and b/res/translations/mixxx_tr.qm differ diff --git a/res/translations/mixxx_tr.ts b/res/translations/mixxx_tr.ts index a8c12be2f013..6c87ee1e6c57 100644 --- a/res/translations/mixxx_tr.ts +++ b/res/translations/mixxx_tr.ts @@ -3648,32 +3648,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -5040,7 +5040,7 @@ Two source connections to the same server that have the same mountpoint can not Mount - + Mount @@ -5639,6 +5639,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6230,62 +6240,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Bilgi - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -9566,57 +9576,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right sağ - + left sol - + right small - + left small - + up yukarı - + down aşağı - + up small - + down small - + Shortcut Kısa yol @@ -9689,22 +9699,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Çalma listesini içe aktar - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Çalma Listesi Dosyaları (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9974,129 +9984,129 @@ Do you really want to overwrite it? - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? Yeni bir parça yüklemek istediğinize eminmisiniz? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10118,7 +10128,7 @@ Do you want to select an input device? - + Playlists Çalma Listeleri @@ -10159,27 +10169,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Yeni çalma listesi oluştur @@ -11803,7 +11813,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -15551,323 +15561,353 @@ This can not be undone! - Create &New Playlist + Search in Current View... + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + + Create &New Playlist + + + + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View &Görünüm - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl +1 - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl +2 - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl +3 - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl +4 - + Show Cover Art Kapak remini göster - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen &Tam ekran - + Display Mixxx using the full screen - + &Options &Seçenekler - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix &Mix kaydet - + Record your mix to a file - + Ctrl+R Ctrl +R - + Enable Live &Broadcasting &Canlı Yayın'ı aç - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts &Klavye kısayollarını aç - + Toggles keyboard shortcuts on or off - + Ctrl+` Ctrl+` - + &Preferences &Tercihler - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer &Geliştirici - + &Reload Skin &Kaplamayı yeniden yükle - + Reload the skin Kaplamayı yeniden yükle - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D Ctrl+Shift+D - + &Help &Yardım - + Show Keywheel menu title @@ -15884,74 +15924,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support &Topluluk Desteği - + Get help with Mixxx Mixxx'ten yardım alın. - + &User Manual &Kullanım Kılavuzu - + Read the Mixxx user manual. Mixxx kullanım kılavuzunu okuyun. - + &Keyboard Shortcuts &Klavye kısayolları - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application &Bu uygulamayı çevir - + Help translate this application into your language. Bu uygulamayı kendi dilinize çevirmeye yardımcı olun. - + &About &Hakkında - + About the application Uygulama Hakkında @@ -15986,25 +16026,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Girişi temizle - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun Arama - + Clear input Girişi temizle @@ -16015,93 +16043,87 @@ This can not be undone! Ara... - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Kısa yol + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Odak + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+Backspace + + Additional Shortcuts When Focused: + - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Aramayı kapat + + Delete query from history + @@ -16908,52 +16930,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database Veritabanı açılamadı - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_uk.qm b/res/translations/mixxx_uk.qm index 0dcb7dafbef6..994346417e5f 100644 Binary files a/res/translations/mixxx_uk.qm and b/res/translations/mixxx_uk.qm differ diff --git a/res/translations/mixxx_uk.ts b/res/translations/mixxx_uk.ts index ada9c4306e00..5ba30009eb07 100644 --- a/res/translations/mixxx_uk.ts +++ b/res/translations/mixxx_uk.ts @@ -39,32 +39,32 @@ - + Remove Crate as Track Source - + Auto DJ Авто-DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -147,28 +147,28 @@ BasePlaylistFeature - + New Playlist Новий Плейлист - + Add to Auto DJ Queue (bottom) Додати до черги Авто-DJ (знизу) - + Create New Playlist Створити новий список відтворення - + Add to Auto DJ Queue (top) Додати до черги Авто-DJ (наверх) - + Remove Видалити @@ -178,12 +178,12 @@ Переіменувати - + Lock Заблокувати - + Duplicate Дублювати @@ -204,24 +204,24 @@ Аналізувати весь список відтворення - + Enter new name for playlist: Введіть нове ім'я для списку відтворення: - + Duplicate Playlist Дублювати список відтворення - - + + Enter name for new playlist: Введіть ім'я для нового списку відтворення: - + Export Playlist Експортувати плейлист @@ -231,70 +231,77 @@ - + + + Export to Engine DJ + "Engine DJ" is a product name and must not be translated. + + + + Rename Playlist Переіменування плейлиста - - + + Renaming Playlist Failed Перейменування плейлиста не вдалося - - - + + + A playlist by that name already exists. Плейлист з таким ім'ям вже існує. - - - + + + A playlist cannot have a blank name. Плейлист не може мати пусте ім'я - + _copy //: Appendix to default name when duplicating a playlist _копія - - - - - - + + + + + + Playlist Creation Failed Не вдалося створити плейлист - - + + An unknown error occurred while creating playlist: Виникла невідома помилка при створенні плейлиста: - + Confirm Deletion - + Do you really want to delete playlist <b>%1</b>? - + M3U Playlist (*.m3u) M3U список відтворення (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Плейлист (*.m3u);;M3U8 Плейлист (*.m3u8);;PLS Плейлист (*.pls);;Text CSV (*.csv);;Звичайний текст (*.txt) @@ -302,12 +309,12 @@ BaseSqlTableModel - + # No - + Timestamp Відмітка часу @@ -315,7 +322,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Неможливо завантажити трек @@ -323,137 +330,142 @@ BaseTrackTableModel - + Album Альбом - + Album Artist Виконавець альбому - + Artist Виконавець - + Bitrate Бітрейт - + BPM BPM - + Channels Канали - + Color - + Comment Примітка - + Composer Композитор - + Cover Art Обкладинки - + Date Added Дата додавання - + Last Played - + Duration Тривалість - + Type Тип - + Genre Стиль - + Grouping Групування - + Key Тональність - + Location Розташування: - + + Overview + + + + Preview Попередній перегляд - + Rating Рейтинг - + ReplayGain - + Samplerate - + Played Зіграно - + Title Назва - + Track # Композиція № - + Year Рік - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -541,67 +553,77 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library Додати до бібліотеки - + Refresh directory tree - + Quick Links Швидкі посилання - - + + Devices Пристрої - + Removable Devices Змінні пристрої - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan Сканування - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. + + + It shows the data from the file tags, not track data from your Mixxx library like other track views. + + + + + If you load a track file from here, it will be added to your library. + + BrowseTableModel @@ -747,87 +769,87 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: Каталог верхнього рівня, в якому Mixxx має шукати параметри. Типово: - + Starts Auto DJ when Mixxx is launched. - + Rescans the library when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -837,27 +859,32 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - + Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - + + Overrides the default application GUI style. Possible values: %1 + + + + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. - + Preview rendered controller screens in the Setting windows. @@ -1039,13 +1066,13 @@ trace - Above + Profiling messages - + Set to full volume - + Set to zero volume @@ -1070,13 +1097,13 @@ trace - Above + Profiling messages - + Headphone listen button - + Mute button @@ -1087,25 +1114,25 @@ trace - Above + Profiling messages - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right @@ -1146,22 +1173,22 @@ trace - Above + Profiling messages - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1171,193 +1198,193 @@ trace - Above + Profiling messages Еквалайзери - + Vinyl Control Контроль вінілу - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 1/2 - + 1 1 - + 2 2 - + 4 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1473,20 +1500,20 @@ trace - Above + Profiling messages - - + + Volume Fader - + Full Volume - + Zero Volume @@ -1502,7 +1529,7 @@ trace - Above + Profiling messages - + Mute @@ -1513,7 +1540,7 @@ trace - Above + Profiling messages - + Headphone Listen @@ -1534,25 +1561,25 @@ trace - Above + Profiling messages - + Orientation - + Orient Left - + Orient Center - + Orient Right @@ -1622,82 +1649,82 @@ trace - Above + Profiling messages - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync Синхр. - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1738,451 +1765,451 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) Додати до черги Авто-DJ (знизу) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) Додати до черги Авто-DJ (наверх) - + Prepend selected track to the Auto DJ Queue - + Load Track Завантажити трек - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects Ефекти - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Далі - + Switch to next effect - + Previous Попередній - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2197,102 +2224,102 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) @@ -2444,1041 +2471,1063 @@ trace - Above + Profiling messages - - + + Move Beatgrid Half a Beat + + + + + Adjust the beatgrid by exactly one half beat. Usable only for tracks with constant tempo. + + + + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + + + Sort hotcues by position + + + + + + Sort hotcues by position (remove offsets) + + + + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off Мікрофон вмк/вимк - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Авто-DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - + Microphone && Auxiliary Show/Hide keep double & to prevent creation of keyboard accelerator - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers Семплери - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3593,32 +3642,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. @@ -3662,13 +3711,13 @@ trace - Above + Profiling messages CrateFeature - + Remove Видалити - + Create New Crate @@ -3678,132 +3727,132 @@ trace - Above + Profiling messages Переіменувати - - + + Lock Заблокувати - + Export Crate as Playlist - + Export Track Files - + Duplicate Дублювати - + Analyze entire Crate - + Auto DJ Track Source - + Enter new name for crate: - - + + Crates Збірки - - + + Import Crate Імпортувати збірку - + Export Crate Експортувати збірку - + Unlock Розблокувати - + An unknown error occurred while creating crate: Виникла невідома помилка під час створення збірки: - + Rename Crate Переіменувати збірку - - - Export to Engine Prime - - - - + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Перейменування збірки не вдалося - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) M3U Плейлист (*.m3u);;M3U8 Плейлист (*.m3u8);;PLS Плейлист (*.pls);;Text CSV (*.csv);;Звичайний текст (*.txt) - + M3U Playlist (*.m3u) M3U список відтворення (*.m3u) - + Crates are a great way to help organize the music you want to DJ with. Збірки - чудовий допоміжний засіб для організування музики для ді-джеінгу. - + + + Export to Engine DJ + + + + Crates let you organize your music however you'd like! Збірки дають змогу організовувати Вашу музику так, як Ви бажаєте! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Збірка повинна мати назву. - + A crate by that name already exists. Збірка з такою назвою вже існує. @@ -3898,12 +3947,12 @@ trace - Above + Profiling messages Попередні автори - + Official Website - + Donate @@ -4022,72 +4071,72 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Пропустити - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds Секунди - + Auto DJ Fade Modes Full Intro + Outro: @@ -4118,80 +4167,80 @@ crossfader, so that the intro starts at full volume. - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Skip Silence Start Full Volume - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Авто-DJ - + Shuffle Перемішати - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4414,37 +4463,37 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - + The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4483,17 +4532,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -5146,113 +5195,113 @@ associated with each key. DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None Не призначено - + %1 by %2 - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5265,105 +5314,105 @@ Apply settings and continue? - + Enabled Активовано - + Device Info - + Physical Interface: - + Vendor name: - + Product name: - + Vendor ID - + VID: - + Product ID - + PID: - + Serial number: - + USB interface number: - + HID Usage-Page: - + HID Usage: - + Description: Опис: - + Support: Підтримка: - + Screens preview - + Input Mappings - - + + Search - - + + Add Додати - - + + Remove Видалити @@ -5378,22 +5427,22 @@ Apply settings and continue? - + Load Mapping: - + Mapping Info - + Author: - + Name: @@ -5403,28 +5452,28 @@ Apply settings and continue? - + Data protocol: - + Mapping Files: - + Mapping Settings - - + + Clear All Очистити все - + Output Mappings @@ -5583,6 +5632,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6174,62 +6233,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes - + Information Інформація - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -7396,173 +7455,172 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz %1 Гц - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled Активовано - + Stereo Стерео - + Mono Моно - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - + Information - + Mixxx must be restarted before the multi-threaded RubberBand setting change will take effect. - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Are you sure? - + Distribute stereo channels into mono channels for parallel processing will result in a loss of mono compatibility and a diffuse stereo image. It is not recommended during broadcasting or recording. - + Are you sure you wish to proceed? - + No - + Yes, I know what I am doing - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - - + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms %1 мс - + Configuration error Помилка конфігурації @@ -7580,131 +7638,131 @@ The loudness target is approximate and assumes track pregain and main output lev Звукове API - + Sample Rate Частота дискретизації - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode Режим основного виходу - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output Вихід - + Input Вхід - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Dual-threaded Stereo - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices Пристрої, що надсилають запити @@ -7859,27 +7917,28 @@ The loudness target is approximate and assumes track pregain and main output lev - - 1/3rd of waveform viewer + + 1/3 of waveform viewer + options for "Text height limit" - - Full waveform viewer height + + Entire waveform viewer - + OpenGL not available OpenGL не доступно - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7892,250 +7951,256 @@ The loudness target is approximate and assumes track pregain and main output lev - + Frame rate - - Displays which OpenGL version is supported by the current platform. + + OpenGL Status - - Waveform + + Displays which OpenGL version is supported by the current platform. - + Normalize waveform overview - + Average frame rate - + Visual gain - + Default zoom level Waveform zoom - + Displays the actual frame rate. - + Visual gain of the middle frequencies - + End of track warning - - OpenGL status - - - - + This functionality requires waveform acceleration. - + Highlight the waveforms when the last seconds of a track remains. - + seconds - + Low Низька - + Show minute markers on waveform overview - + Use acceleration - + High details - + Middle - + Global - + Visual gain of the high frequencies - + Visual gain of the low frequencies - + High Висока - + Global visual gain - + The waveform overview shows the waveform envelope of the entire track. Select from different types of displays for the waveform overview, which differ primarily in the level of detail shown in the waveform. - + Enabled - + The waveform shows the waveform envelope of the track near the current playback position. Select from different types of displays for the waveform, which differ primarily in the level of detail shown in the waveform. - - Waveform overview type - - - - + fps - + Synchronize zoom level across all waveform displays. - + Synchronize zoom level across all waveforms - + Play marker hints - + Beats until next marker - + Preferred font size - + Text height limit - + Time until next marker - + Placement - + pt - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library - + Beat grid opacity - + + Scrolling Waveforms + + + + + + Type + + + + Stereo coloration - + Set amount of opacity on beat grid lines. - + % % - + Play marker position - + Moves the play marker position on the waveforms to the left, right or center (default). - + + Overview Waveforms + + + + Clear Cached Waveforms @@ -8143,47 +8208,47 @@ Select from different types of displays for the waveform, which differ primarily DlgPreferences - + Sound Hardware Звукове обладнання - + Controllers Контролери - + Library Бібліотека - + Interface Інтерфейс - + Waveforms - + Mixer Мікшер - + Auto DJ Авто-DJ - + Decks - + Colors @@ -8218,47 +8283,47 @@ Select from different types of displays for the waveform, which differ primarily - + Effects Ефекти - + Recording Запис - + Beat Detection Виявлення тактів - + Key Detection Виявлення тональності - + Normalization Нормалізація - + <font color='#BB0000'><b>Some preferences pages have errors. To apply the changes please first fix the issues.</b></font> - + Vinyl Control Контроль вінілу - + Live Broadcasting Пряма трансляція - + Modplug Decoder @@ -8291,22 +8356,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording Почати запис - + Recording to file: - + Stop Recording Зупинити запис - + %1 MiB written in %2 @@ -8614,284 +8679,284 @@ This can not be undone! Підсумок - + Filetype: - + BPM: BPM - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Композиція № - + Album Artist Виконавець альбому - + Composer Композитор - + Title Назва - + Grouping Групування - + Key Тональність - + Year Рік - + Artist Виконавець - + Album Альбом - + Genre Стиль - + ReplayGain: - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM Навпіл BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: Тривалість: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser Відкрити в файловому менеджері - + Samplerate: - + Track BPM: Темп треку: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat Настукати ритм - + Hint: Use the Library Analyze view to run BPM detection. Порада: Використовуйте вигляд Аналіз Бібліотеки щоб запустити виявлення темпу. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply &Застосувати - + &Cancel &Скасувати - + (no color) @@ -9048,7 +9113,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9250,27 +9315,27 @@ Often results in higher quality beatgrids, but will not do well on tracks that h EngineBuffer - + Soundtouch (faster) - + Rubberband (better) - + Rubberband R3 (near-hi-fi quality) - + Unknown, using Rubberband (better) - + Unknown, using Soundtouch @@ -9414,38 +9479,38 @@ Often results in higher quality beatgrids, but will not do well on tracks that h ITunesFeature - - + + iTunes iTunes - + Select your iTunes library Виберіть свою бібліотеку ITunes - + (loading) iTunes (завантаження) iTunes - + Use Default Library Використовувати бібліотеку за замовчуванням - + Choose Library... Виберіть бібліотеку... - + Error Loading iTunes Library Помилка при завантаженні бібліотеки ITunes - + There was an error loading your iTunes library. Check the logs for details. @@ -9453,12 +9518,12 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerColorSetting - + Change color - + Choose a new color @@ -9466,18 +9531,18 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacyControllerFileSetting - + Browse... - - + + No file selected - + Select a file @@ -9485,15 +9550,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9504,57 +9569,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut Скорочення @@ -9562,62 +9627,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9627,22 +9692,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Імпортувати плейлист - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Файли Плейлистів (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9689,27 +9754,27 @@ Do you really want to overwrite it? MidiController - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9769,18 +9834,18 @@ Do you really want to overwrite it? MixxxLibraryFeature - + Missing Tracks - + Hidden Tracks - Export to Engine Prime + Export to Engine DJ @@ -9792,208 +9857,249 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy Звуковий пристрій зайнятий - + <b>Retry</b> after closing the other application or reconnecting a sound device <b>Спробувати ще</b> після закриття інших програм або повторного підключення звукового пристрою - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. <b>Змінити</b> налаштування звукових пристроїв у Mixxx. - - + + Get <b>Help</b> from the Mixxx Wiki. Отримайте<b>Допомогу</b> від Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. <b>Вихід</b> з Mixxx. - + Retry Повторити - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure Перенастроїти - + Help Допомога - - + + Exit Вихід - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue Продовжити - + Load track to Deck %1 - + Deck %1 is currently playing a track. - + Are you sure you want to load a new track? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + + Scan took %1 + + + + + No changes detected. + + + + + + %1 tracks in total + + + + + %1 new tracks found + + + + + %1 moved tracks detected + + + + + %1 tracks are missing (%2 total) + + + + + %1 tracks have been rediscovered + + + + + Library scan finished + + + + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Підтвердити Вихід - + A deck is currently playing. Exit Mixxx? Дека в даний час грає. Вийти з Mixxx? - + A sampler is currently playing. Exit Mixxx? Семплер зараз грає. Вийти з Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -10009,13 +10115,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Заблокувати - - + + Playlists Плейлисти @@ -10025,32 +10131,58 @@ Do you want to select an input device? - + + Unlock all playlists + + + + + Delete all unlocked playlists + + + + Unlock Розблокувати - + + + Confirm Deletion + + + + + Do you really want to delete all unlocked playlists? + + + + + Deleting %1 unlocked playlists.<br>This operation can not be undone! + + + + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist Створити новий список відтворення @@ -11541,7 +11673,7 @@ Fully right: end of the effect period - + Deck %1 @@ -11674,7 +11806,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough Пересилання @@ -11705,7 +11837,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11838,12 +11970,12 @@ may introduce a 'pumping' effect and/or distortion. - + built-in - + missing @@ -11878,42 +12010,42 @@ may introduce a 'pumping' effect and/or distortion. - + Empty - + Simple - + Filtered - + HSV - + VSyncTest - + RGB - + Stacked - + Unknown @@ -11971,54 +12103,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists Плейлисти - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -12153,19 +12285,19 @@ may introduce a 'pumping' effect and/or distortion. Заблокувати - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12577,7 +12709,7 @@ may introduce a 'pumping' effect and/or distortion. - + Spinning Vinyl @@ -12759,7 +12891,7 @@ may introduce a 'pumping' effect and/or distortion. - + Cover Art Обкладинки @@ -12995,197 +13127,197 @@ may introduce a 'pumping' effect and/or distortion. - + Adjust Beats Earlier - + When tapped, moves the beatgrid left by a small amount. - + Adjust Beats Later - + When tapped, moves the beatgrid right by a small amount. - + Tempo and BPM Tap - + Show/hide the spinning vinyl section. - + Keylock - + Toggling keylock during playback may result in a momentary audio glitch. - + Toggle visibility of Loop Controls - + Toggle visibility of Beatjump Controls - + Toggle visibility of Rate Control - + Toggle visibility of Key Controls - + (while previewing) - + Places a cue point at the current position on the waveform. - + Stops track at cue point, OR go to cue point and play after release (CUP mode). - + Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) OR preview from it (Denon mode). - + Is latching the playing state. - + Seeks the track to the cue point and stops. - + Play Грати - + Plays track from the cue point. - + Sends the selected channel's audio to the headphone output, selected in Preferences -> Sound Hardware. - + (This skin should be updated to use Sync Lock!) - + Enable Sync Lock Постійна синхронізація - + Tap to sync the tempo to other playing tracks or the sync leader. Щоб сихнронізувати темп з іншими активними доріжками чи лідером синхронізації, натисніть один раз. - + Enable Sync Leader Лідер синхронізації - + When enabled, this device will serve as the sync leader for all other decks. Коли увімкнено, цей пристрій служитиме лідером синхронізації для всіх дек. - + This is relevant when a dynamic tempo track is loaded to a sync leader deck.In that case, other synced devices will adopt the changing tempo. Тоді коли в деку лідера синхронізації завантажено доріжку зі змінним темпом, інші синхронізовані пристрої адаптуватимуться під зміни темпу. - + Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected. - + Tempo Range Display - + Displays the current range of the tempo slider. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). - + Delete selected hotcue. - + Track Comment - + Displays the comment tag of the loaded track. - + Opens separate artwork viewer. - + Effect Chain Preset Settings - + Show the effect chain settings menu for this unit. - + Select and configure a hardware device for this input - + Recording Duration @@ -13423,924 +13555,932 @@ may introduce a 'pumping' effect and/or distortion. - + + Adjust beatgrid by exactly one half beat. Usable only on +tracks with constant tempo. + + + + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - - + + Toggle the BPM/beatgrid lock - + Tempo and Rate Tap - + Tempo, Rate Tap and BPM Tap - + Shift cues earlier - - + + Shift cues imported from Serato or Rekordbox if they are slightly off time. - + Left click: shift 10 milliseconds earlier - + Right click: shift 1 millisecond earlier - + Shift cues later - + Left click: shift 10 milliseconds later - + Right click: shift 1 millisecond later - + + + + Drag a Hotcue button here to continue playing after releasing the Hotcue. + + + + Hint: Change the default cue mode in Preferences -> Decks. - + Mutes the selected channel's audio in the main output. - + Main mix enable - + Hold or short click for latching to mix this input into the main output. - + If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. - + If the play position is inside an active loop, stores the loop as loop cue. - + Drag this button onto another Hotcue button to move it there (change its index). If the other hotcue is set, the two are swapped. - - Dragging with Shift key pressed will not start previewing the hotcue - - - - + Expand/Collapse Samplers - + Toggle expanded samplers view. - + Displays the duration of the running recording. - + Auto DJ is active - + Red for when needle skip has been detected. - + Hot Cue - Track will seek to nearest previous hotcue point. - + Sets the track Loop-In Marker to the current play position. - + Press and hold to move Loop-In Marker. - + Jump to Loop-In Marker. - + Sets the track Loop-Out Marker to the current play position. - + Press and hold to move Loop-Out Marker. - + Jump to Loop-Out Marker. - + If the track has no beats the unit is seconds. - + Beatloop Size - + Select the size of the loop in beats to set with the Beatloop button. - + Changing this resizes the loop if the loop already matches this size. - + Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button. - + Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button. - + Start a loop over the set number of beats. - + Temporarily enable a rolling loop over the set number of beats. - + Beatloop Anchor - + Define whether the loop is created and adjusted from its staring point or ending point. - + Beatjump/Loop Move Size - + Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons. - + Beatjump Forward - + Jump forward by the set number of beats. - + Move the loop forward by the set number of beats. - + Jump forward by 1 beat. - + Move the loop forward by 1 beat. - + Beatjump Backward - + Jump backward by the set number of beats. - + Move the loop backward by the set number of beats. - + Jump backward by 1 beat. - + Move the loop backward by 1 beat. - + Reloop - + If the loop is ahead of the current position, looping will start when the loop is reached. - + Works only if Loop-In and Loop-Out Marker are set. - + Enable loop, jump to Loop-In Marker, and stop playback. - + Displays the elapsed and/or remaining time of the track loaded. - + Click to toggle between time elapsed/remaining time/both. - + Hint: Change the time format in Preferences -> Decks. - + Show/hide intro & outro markers and associated buttons. - + Intro Start Marker - - - - + + + + If marker is set, jumps to the marker. - - - - + + + + If marker is not set, sets the marker to the current play position. - - - - + + + + If marker is set, clears the marker. - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + Mix - + Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit - + D/W mode: Crossfade between dry and wet - + D+W mode: Add wet to dry - + Mix Mode - + Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit - + Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet Use this to change the sound of the track with EQ and filter effects. - + Dry+Wet mode (flat dry line): Mix knob adds wet to dry Use this to change only the effected (wet) signal with EQ and filter effects. - + Route the main mix through this effect unit. - + Route the left crossfader bus through this effect unit. - + Route the right crossfader bus through this effect unit. - + Right side active: parameter moves with right half of Meta Knob turn - + Stem Label - + Name of the stem stored in the stem file - + Text is displayed in the stem color stored in the stem file - + this stem color is also used for the waveform of this stem - + Stem Mute - + Toggle the stem mute/unmuted - + Stem Volume Knob - + Adjusts the volume of the stem - + Skin Settings Menu - + Show/hide skin settings menu - + Save Sampler Bank Зберегти банк Семплера - + Save the collection of samples loaded in the samplers. - + Load Sampler Bank Завантажити банк Семплера - + Load a previously saved collection of samples into the samplers. - + Show Effect Parameters - + Enable Effect - + Meta Knob Link - + Set how this parameter is linked to the effect's Meta Knob. - + Meta Knob Link Inversion - + Inverts the direction this parameter moves when turning the effect's Meta Knob. - + Super Knob - + Next Chain - + Previous Chain - + Next/Previous Chain - + Clear - + Clear the current effect. - + Toggle - + Toggle the current effect. - + Next Далі - + Clear Unit - + Clear effect unit. - + Show/hide parameters for effects in this unit. - + Toggle Unit - + Enable or disable this whole effect unit. - + Controls the Meta Knob of all effects in this unit together. - + Load next effect chain preset into this effect unit. - + Load previous effect chain preset into this effect unit. - + Load next or previous effect chain preset into this effect unit. - - - - - - - - - + + + + + + + + + Assign Effect Unit - + Assign this effect unit to the channel output. - + Route the headphone channel through this effect unit. - + Route this deck through the indicated effect unit. - + Route this sampler through the indicated effect unit. - + Route this microphone through the indicated effect unit. - + Route this auxiliary input through the indicated effect unit. - + The effect unit must also be assigned to a deck or other sound source to hear the effect. - + Switch to the next effect. - + Previous Попередній - + Switch to the previous effect. - + Next or Previous - + Switch to either the next or previous effect. - + Meta Knob - + Controls linked parameters of this effect - + Effect Focus Button - + Focuses this effect. - + Unfocuses this effect. - + Refer to the web page on the Mixxx wiki for your controller for more information. - + Effect Parameter - + Adjusts a parameter of the effect. - + Inactive: parameter not linked - + Active: parameter moves with Meta Knob - + Left side active: parameter moves with left half of Meta Knob turn - + Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half - - + + Equalizer Parameter Kill - - + + Holds the gain of the EQ to zero while active. - + Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters). - + Hint: Change the default Quick Effect mode in Preferences -> Equalizers. - + Equalizer Parameter - + Adjusts the gain of the EQ filter. - + Hint: Change the default EQ mode in Preferences -> Equalizers. - - + + Adjust Beatgrid - + Adjust beatgrid so the closest beat is aligned with the current play position. - - + + Adjust beatgrid to match another playing deck. - + If quantize is enabled, snaps to the nearest beat. - + Quantize - + Toggles quantization. - + Loops and cues snap to the nearest beat when quantization is enabled. - + Reverse У зворотному напрямку - + Reverses track playback during regular playback. - + Puts a track into reverse while being held (Censor). - + Playback continues where the track would have been if it had not been temporarily reversed. - - - + + + Play/Pause - + Jumps to the beginning of the track. - + Syncs the tempo (BPM) and phase to that of the other track, if BPM is detected on both. - + Syncs the tempo (BPM) to that of the other track, if BPM is detected on both. - + Sync and Reset Key - + Increases the pitch by one semitone. - + Decreases the pitch by one semitone. - + Enable Vinyl Control - + When disabled, the track is controlled by Mixxx playback controls. - + When enabled, the track responds to external vinyl control. - + Enable Passthrough - + Indicates that the audio buffer is too small to do all audio processing. - + Displays cover artwork of the loaded track. - + Displays options for editing cover artwork. - + Star Rating - + Assign ratings to individual tracks by clicking the stars. @@ -14475,33 +14615,33 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Prevents the pitch from changing when the rate changes. - + Changes the number of hotcue buttons displayed in the deck - + Starts playing from the beginning of the track. - + Jumps to the beginning of the track and stops. - - + + Plays or pauses the track. - + (while playing) @@ -14521,205 +14661,215 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + (while stopped) - + Cue - + Headphone Навушники - + Mute - + Old Synchronize - + Syncs to the first deck (in numerical order) that is playing a track and has a BPM. - + If no deck is playing, syncs to the first deck that has a BPM. - + Decks can't sync to samplers and samplers can only sync to decks. - + Hold for at least a second to enable sync lock for this deck. Щоб увімкнути постійну синхронізацію цієї деки, затисніть принаймні на секунду. - + Decks with sync locked will all play at the same tempo, and decks that also have quantize enabled will always have their beats lined up. Деки з постійною синхронізацією гратимуть з однаковим темпом, а деки, для яких також увімкнено квантування, матимуть вирівняні такти. - + Resets the key to the original track key. - + Speed Control - - - + + + Changes the track pitch independent of the tempo. - + Increases the pitch by 10 cents. - + Decreases the pitch by 10 cents. - + Pitch Adjust - + Adjust the pitch in addition to the speed slider pitch. - + Opens a menu to clear hotcues or edit their labels and colors. - + + Drag this button onto a Play button while previewing to continue playback after release. + + + + + Dragging with Shift key pressed will not start previewing the hotcue. + + + + Record Mix - + Toggle mix recording. - + Enable Live Broadcasting Жива трансляція - + Stream your mix over the Internet. - + Provides visual feedback for Live Broadcasting status: - + disabled, connecting, connected, failure. - + When enabled, the deck directly plays the audio arriving on the vinyl input. - + Playback will resume where the track would have been if it had not entered the loop. - + Loop Exit - + Turns the current loop off. Вимикає поточний цикл. - + Slip Mode - + When active, the playback continues muted in the background during a loop, reverse, scratch etc. - + Once disabled, the audible playback will resume where the track would have been. - + Track Key The musical key of a track - + Displays the musical key of the loaded track. - + Clock - + Displays the current time. - + Audio Latency Usage Meter - + Displays the fraction of latency used for audio processing. - + A high value indicates that audible glitches are likely. - + Do not enable keylock, effects or additional decks in this situation. - + Audio Latency Overload Indicator @@ -14764,254 +14914,254 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Fast Rewind - + Fast rewind through the track. - + Fast Forward - + Fast forward through the track. - + Jumps to the end of the track. - + Sets the pitch to a key that allows a harmonic transition from the other track. Requires a detected key on both involved decks. - - - + + + Pitch Control - + Pitch Rate - + Displays the current playback rate of the track. - + Repeat - + When active the track will repeat if you go past the end or reverse before the start. - + Eject - + Ejects track from the player. - + Hotcue - + If hotcue is set, jumps to the hotcue. - + If hotcue is not set, sets the hotcue to the current play position. - + Vinyl Control Mode - + Absolute mode - track position equals needle position and speed. - + Relative mode - track speed equals needle speed regardless of needle position. - + Constant mode - track speed equals last known-steady speed regardless of needle input. - + Vinyl Status - + Provides visual feedback for vinyl control status: - + Green for control enabled. - + Blinking yellow for when the needle reaches the end of the record. - + Loop-In Marker - + Loop-Out Marker - + Loop Halve - + Halves the current loop's length by moving the end marker. - + Deck immediately loops if past the new endpoint. - + Loop Double - + Doubles the current loop's length by moving the end marker. - + Beatloop - + Toggles the current loop on or off. - + Works only if Loop-In and Loop-Out marker are set. - + Vinyl Cueing Mode - + Determines how cue points are treated in vinyl control Relative mode: - + Off - Cue points ignored. - + One Cue - If needle is dropped after the cue point, track will seek to that cue point. - + Track Time - + Track Duration Тривалість треку - + Displays the duration of the loaded track. Показує тривалість завантаженого треку. - + Information is loaded from the track's metadata tags. Інформація завантажена з мета-даних треку. - + Track Artist Виконавець треку. - + Displays the artist of the loaded track. Показує виконавеця завантаженого треку. - + Track Title Назва треку - + Displays the title of the loaded track. Показує назву завантаженого треку - + Track Album Альбом треку - + Displays the album name of the loaded track. Показує альбом завантаженого треку - + Track Artist/Title Виконавець/Заголовок треку - + Displays the artist and title of the loaded track. Показує виконавця/заголовок завантаженого треку @@ -15019,12 +15169,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15032,47 +15182,42 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackExportDlg - + Export finished - + Exporting %1 - - - Overwrite Existing File? - - - "%1" already exists, overwrite? + Replace Existing File? - - &Overwrite + + "%1" already exists, replace? - - Over&write All + + &Replace - - &Skip + + Apply to all files - Skip &All + &Skip - + Export Error @@ -15244,47 +15389,47 @@ This can not be undone! WCueMenuPopup - + Cue number - + Cue position - + Edit cue label - + Label... - + Delete this cue - + Toggle this cue type between normal cue and saved loop - + Left-click: Use the old size or the current beatloop size as the loop size - + Right-click: Use the current play position as loop end if it is after the cue - + Hotcue #%1 @@ -15408,407 +15553,438 @@ This can not be undone! - - E&xport Library to Engine Prime + + Search in Current View... + + + + + Search for tracks in the current library view - - Export the library to the Engine Prime format + + Ctrl+f - + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist - + Create a new playlist Створює новий плейлист - + Ctrl+n - + Create New &Crate - + Create a new crate Створює нову збірку - + Ctrl+Shift+N - - + + &View &Вигляд - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen &На весь екран - + Display Mixxx using the full screen Відображення Mixxx у повноекранному режимі - + &Options &Опції - + &Vinyl Control &Контроль Вінілу - + Use timecoded vinyls on external turntables to control Mixxx Використання таймкод-платівок на зовнішньому програвачі для контролю Mixxx - + Enable Vinyl Control &%1 - + &Record Mix &Запис Міксу - + Record your mix to a file Записати Ваш мікс у файл - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting Трансляція наж&иво - + Stream your mixes to a shoutcast or icecast server Трансляцыя ваших міксів на Shoutcast або Icecast сервер - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts К&лавіатурні скорочення - + Toggles keyboard shortcuts on or off Увімкнути чи вимкнути клавіатурні скорочення - + Ctrl+` - + &Preferences &Параметри - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help &Допомога - + Show Keywheel menu title Колесо тональностей - + + E&xport Library to Engine DJ + "Engine DJ" must not be translated + + + + + Export the library to the Engine DJ format + + + + Show keywheel tooltip text Показати колесо тональностей - + F12 Menubar|View|Show Keywheel - + &Community Support &Підтримка співтовариства - + Get help with Mixxx - + &User Manual &Керівництво користувача - + Read the Mixxx user manual. Читати інструкцію по Mixxx. - + &Keyboard Shortcuts К&лавіатурні скорочення - + Speed up your workflow with keyboard shortcuts. Працюйте ефективніше з клавіатурними скороченнями. - + &Settings directory Каталог параметр&ів - + Open the Mixxx user settings directory. Відкрити користувацький каталог параметрів Mixxx. - + &Translate This Application &Перекласти цю програму - + Help translate this application into your language. Домопогти перекладати цю програму на Вашу мову. - + &About &Про - + About the application Про цю програму @@ -15816,25 +15992,25 @@ This can not be undone! WOverview - + Passthrough Пересилання - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15843,25 +16019,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun - + Clear input @@ -15872,169 +16036,163 @@ This can not be undone! Пошук… - + Clear the search bar input field - - Enter a string to search for + + Return - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Скорочення + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus + + Focus/Select All (Search in 'Tracks' library view) - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts - Скорочення + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus + + Delete query from history WSearchRelatedTracksMenu - + Search related Tracks - + Key Тональність - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Виконавець - + Album Artist Виконавець альбому - + Composer Композитор - + Title Назва - + Album Альбом - + Grouping Групування - + Year Рік - + Genre Стиль - + Directory - + &Search selected @@ -16042,599 +16200,625 @@ This can not be undone! WTrackMenu - + Load to - + Deck Програвач - + Sampler - + Add to Playlist Додати до Плейлиста - + Crates Збірки - + Metadata - + Update external collections - + Cover Art Обкладинки - + Adjust BPM - + Select Color - - + + Analyze Аналізувати - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) Додати до черги Авто-DJ (знизу) - + Add to Auto DJ Queue (top) Додати до черги Авто-DJ (наверх) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Видалити - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser Відкрити в файловому менеджері - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Рейтинг - + Cue Point - + + Hotcues - + Intro - + Outro - + Key Тональність - + ReplayGain - + Waveform - + Comment Примітка - + All Все - + + Sort hotcues by position (remove offsets) + + + + + Sort hotcues by position + + + + Lock BPM Замкнути BPM - + Unlock BPM Розімкнути BPM - + Double BPM - + Halve BPM Навпіл BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + + Shift Beatgrid Half Beat + + + + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist Створити новий список відтворення - + Enter name for new playlist: Введіть ім'я для нового списку відтворення: - + New Playlist Новий Плейлист - - - + + + Playlist Creation Failed Не вдалося створити плейлист - + A playlist by that name already exists. Плейлист з таким ім'ям вже існує. - + A playlist cannot have a blank name. Плейлист не може мати пусте ім'я - + An unknown error occurred while creating playlist: Виникла невідома помилка при створенні плейлиста: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + + Sorting hotcues of %n track(s) by position (remove offsets) + + + + + Sorting hotcues of %n track(s) by position + + + + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel Скасувати - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + Don't show again during this session - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16650,37 +16834,37 @@ This can not be undone! WTrackStemMenu - + Load for stem mixing - + Load pre-mixed stereo track - + Load the "%1" stem - + Load multiple stem into a stereo deck - + Select stems to load - + Release "CTRL" to load the current selection - + Use "CTRL" to select multiple stems @@ -16688,37 +16872,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16726,60 +16910,65 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. Показати або приховати стовпці. + + + Shuffle Tracks + + mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Виберіть каталог музичної бібліотеки - + controllers - + Cannot open database Не вдається відкрити базу даних - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16793,67 +16982,78 @@ Mixxx необхідно QT з підтримкою SQLite. Будь ласка, mixxx::DlgLibraryExport - + Entire music library - - Selected crates + + Crates + + + + + Playlists + + + + + Selected crates/playlists - + Browse Навігація - + Export directory - + Database version - + Export Експортувати - + Cancel Скасувати - - Export Library to Engine Prime + + Export Library to Engine DJ + "Engine DJ" must not be translated - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16874,7 +17074,7 @@ Mixxx необхідно QT з підтримкою SQLite. Будь ласка, mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16884,23 +17084,23 @@ Mixxx необхідно QT з підтримкою SQLite. Будь ласка, mixxx::LibraryExporter - + Export Completed - - Exported %1 track(s) and %2 crate(s). + + Exported %1 track(s), %2 crate(s), and %3 playlist(s). - + Export Failed - - Exporting to Engine Prime... + + Exporting to Engine DJ... diff --git a/res/translations/mixxx_uz.ts b/res/translations/mixxx_uz.ts index 3221408c43af..63ef1902788a 100644 --- a/res/translations/mixxx_uz.ts +++ b/res/translations/mixxx_uz.ts @@ -29,32 +29,32 @@ - + Remove Crate as Track Source - + Auto DJ Авто DJ - + Confirmation Clear - + Do you really want to remove all tracks from the Auto DJ queue? - + This can not be undone. - + Add Crate as Track Source @@ -211,7 +211,7 @@ - + Export Playlist Қўшиқ рўйхатини экспорт қилиш @@ -258,13 +258,13 @@ - + Playlist Creation Failed - + An unknown error occurred while creating playlist: @@ -279,12 +279,12 @@ - + M3U Playlist (*.m3u) - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) @@ -292,12 +292,12 @@ BaseSqlTableModel - + # # - + Timestamp @@ -305,7 +305,7 @@ BaseTrackPlayerImpl - + Couldn't load track. Қўшиқ қўшилмади @@ -313,137 +313,137 @@ BaseTrackTableModel - + Album Альбом - + Album Artist - + Artist Санъаткор - + Bitrate Битрейт - + BPM BPM - + Channels - + Color - + Comment Мулоҳаза - + Composer - + Cover Art - + Date Added Қўшилган санаси - + Last Played - + Duration Давомийлиги - + Type Тури - + Genre Жанри - + Grouping - + Key Калит - + Location Манзили - + Preview - + Rating Рейтинг - + ReplayGain - + Samplerate - + Played Ижро этилди - + Title Сарлавҳа - + Track # Қўшиқ # - + Year Йил - + Fetching image ... Tooltip text on the cover art column shown when the cover is read from disk @@ -531,64 +531,64 @@ BrowseFeature - + Add to Quick Links - + Remove from Quick Links - + Add to Library - + Refresh directory tree - + Quick Links Тез боғламалар - - + + Devices Ускуналар - + Removable Devices Ташувчи қурилмалар - - + + Computer - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + "Computer" lets you navigate, view, and load tracks from folders on your hard disk and external devices. @@ -740,82 +740,82 @@ CmdlineArgs - + Mixxx is an open source DJ software. For more information, see: - + Starts Mixxx in full-screen mode - + Use a custom locale for loading translations. (e.g 'fr') - + Top-level directory where Mixxx should look for its resource files such as MIDI mappings, overriding the default installation location. - + Path the debug statistics time line is written to - + Causes Mixxx to display/log all of the controller data it receives and script functions it loads - + The controller mapping will issue more aggressive warnings and errors when detecting misuse of controller APIs. New Controller Mappings should be developed with this option enabled! - + Enables developer-mode. Includes extra log info, stats on performance, and a Developer tools menu. - + Top-level directory where Mixxx should look for settings. Default is: - + Starts Auto DJ when Mixxx is launched. - + Use legacy vu meter - + Use legacy spinny - + Loads experimental QML GUI instead of legacy QWidget skin - + Enables safe-mode. Disables OpenGL waveforms, and spinning vinyl widgets. Try this option if Mixxx is crashing on startup. - + [auto|always|never] Use colors on the console output. - + Sets the verbosity of command line logging. critical - Critical/Fatal only warning - Above + Warnings @@ -825,27 +825,17 @@ trace - Above + Profiling messages - + Sets the the logging level at which the log buffer is flushed to mixxx.log. <level> is one of the values defined at --log-level above. - - Sets the maximum file size of the mixxx.log file in bytes. Use -1 for unlimited. The default is 100 MB as 1e5 or 100000000. - - - - + Breaks (SIGINT) Mixxx, if a DEBUG_ASSERT evaluates to false. Under a debugger you can continue afterwards. - - Overrides the default application GUI style. Possible values: %1 - - - - + Load the specified music file(s) at start-up. Each file you specify will be loaded into the next virtual deck. @@ -944,11 +934,9 @@ trace - Above + Profiling messages - - - + + Deck %1 - %1 is the deck number 1 ... 4 @@ -1013,145 +1001,145 @@ trace - Above + Profiling messages - + Transport - + Strip-search through track - + Play button - - + + Set to full volume - - + + Set to zero volume - + Stop button - + Jump to start of track and play - + Jump to end of track - + Reverse roll (Censor) button - + Headphone listen button - - + + Mute button - + Toggle repeat mode - + Mix orientation (e.g. left, right, center) - + Set mix orientation to left - + Set mix orientation to center - + Set mix orientation to right - + Toggle slip mode - - + + BPM BPM - + Increase BPM by 1 - + Decrease BPM by 1 - + Increase BPM by 0.1 - + Decrease BPM by 0.1 - + BPM tap button - + Toggle quantize mode - + One-time beat sync (tempo only) - + One-time beat sync (phase only) - + Toggle keylock mode @@ -1161,193 +1149,193 @@ trace - Above + Profiling messages - + Vinyl Control - + Toggle vinyl-control cueing mode (OFF/ONE/HOT) - + Toggle vinyl-control mode (ABS/REL/CONST) - + Pass through external audio into the internal mixer - + Cues - + Cue button - + Set cue point - + Go to cue point - + Go to cue point and play - + Go to cue point and stop - + Preview from cue point - + Cue button (CDJ mode) - + Stutter cue - + Hotcues - + Set, preview from or jump to hotcue %1 - + Clear hotcue %1 - + Set hotcue %1 - + Jump to hotcue %1 - + Jump to hotcue %1 and stop - + Jump to hotcue %1 and play - + Preview from hotcue %1 - - + + Hotcue %1 - + Looping - + Loop In button - + Loop Out button - + Loop Exit button - + 1/2 - + 1 - + 2 - + 4 - + 8 - + 16 - + 32 - + 64 - + Move loop forward by %1 beats - + Move loop backward by %1 beats - + Create %1-beat loop - + Create temporary %1-beat loop roll @@ -1377,317 +1365,317 @@ trace - Above + Profiling messages - + Play - + Fast Rewind - + Fast Rewind button - + Fast Forward - + Fast Forward button - + Strip Search - + Play Reverse - + Play Reverse button - + Reverse Roll (Censor) - + Jump To Start - + Jumps to start of track - + Play From Start - + Stop - + Stop And Jump To Start - + Stop playback and jump to start of track - + Jump To End - + Volume - - - + + + Volume Fader - - + + Full Volume - - + + Zero Volume - + Track Gain - + Track Gain knob - - + + Mute - + Eject - - + + Headphone Listen - + Headphone listen (pfl) button - + Repeat Mode - + Slip Mode - + Orientation - + Orient Left - + Orient Center - + Orient Right - + BPM +1 - + BPM -1 - + BPM +0.1 - + BPM -0.1 - + BPM Tap - + Adjust Beatgrid Faster +.01 - + Increase track's average BPM by 0.01 - + Adjust Beatgrid Slower -.01 - + Decrease track's average BPM by 0.01 - + Move Beatgrid Earlier - + Adjust the beatgrid to the left - + Move Beatgrid Later - + Adjust the beatgrid to the right - + Adjust Beatgrid - + Align beatgrid to current position - + Adjust Beatgrid - Match Alignment - + Adjust beatgrid to match another playing deck. - + Quantize Mode - + Sync - + Beat Sync One-Shot - + Sync Tempo One-Shot - + Sync Phase One-Shot - + Pitch control (does not affect tempo), center is original pitch - + Pitch Adjust - + Adjust pitch from speed slider pitch - + Match musical key - + Match Key - + Reset Key - + Resets key to original @@ -1728,451 +1716,456 @@ trace - Above + Profiling messages - + Toggle Vinyl Control - + Toggle Vinyl Control (ON/OFF) - + Vinyl Control Mode - + Vinyl Control Cueing Mode - + Vinyl Control Passthrough - + Vinyl Control Next Deck - + Single deck mode - Switch vinyl control to next deck - + Cue - + Set Cue - + Go-To Cue - + Go-To Cue And Play - + Go-To Cue And Stop - + Preview Cue - + Cue (CDJ Mode) - + Stutter Cue - + Go to cue point and play after release - + Clear Hotcue %1 - + Set Hotcue %1 - + Jump To Hotcue %1 - + Jump To Hotcue %1 And Stop - + Jump To Hotcue %1 And Play - + Preview Hotcue %1 - + Loop In - + Loop Out - + Loop Exit - + Reloop/Exit Loop - + Loop Halve - + Loop Double - + 1/32 - + 1/16 - + 1/8 - + 1/4 - + Move Loop +%1 Beats - + Move Loop -%1 Beats - + Loop %1 Beats - + Loop Roll %1 Beats - + Add to Auto DJ Queue (bottom) - + Append the selected track to the Auto DJ Queue - + Add to Auto DJ Queue (top) - + Prepend selected track to the Auto DJ Queue - + Load Track - + Load selected track - + Load selected track and play - - + + Record Mix - + Toggle mix recording - + Effects - + Quick Effects - + Deck %1 Quick Effect Super Knob - + Quick Effect Super Knob (control linked effect parameters) - - + + Quick Effect - + Clear Unit - + Clear effect unit - + Toggle Unit - + Dry/Wet - + Adjust the balance between the original (dry) and processed (wet) signal. - + Super Knob - + Next Chain - + Assign - + Clear - + Clear the current effect - + Toggle - + Toggle the current effect - + Next Кейинги - + Switch to next effect - + Previous Олдинги - + Switch to the previous effect - + Next or Previous - + Switch to either next or previous effect - - + + Parameter Value - - + + Microphone Ducking Strength - + Microphone Ducking Mode - + Gain - + Gain knob - + Shuffle the content of the Auto DJ queue - + Skip the next track in the Auto DJ queue - + Auto DJ Toggle - + Toggle Auto DJ On/Off - + + Microphone & Auxiliary Show/Hide + + + + Show/hide the microphone & auxiliary section - + 4 Effect Units Show/Hide - + Switches between showing 2 and 4 effect units - + Mixer Show/Hide - + Show or hide the mixer. - + Cover Art Show/Hide (Library) - + Show/hide cover art in the library - + Library Maximize/Restore - + Maximize the track library to take up all the available screen space. - + Effect Rack Show/Hide - + Show/hide the effect rack - + Waveform Zoom Out @@ -2187,108 +2180,108 @@ trace - Above + Profiling messages - + Tap to sync tempo (and phase with quantize enabled), hold to enable permanent sync - + One-time beat sync tempo (and phase with quantize enabled) - + Playback Speed - + Playback speed control (Vinyl "Pitch" slider) - + Pitch (Musical key) - + Increase Speed - + Adjust speed faster (coarse) - + Increase Speed (Fine) - + Adjust speed faster (fine) - + Decrease Speed - + Adjust speed slower (coarse) - + Adjust speed slower (fine) - + Temporarily Increase Speed - + Temporarily increase speed (coarse) - + Temporarily Increase Speed (Fine) - + Temporarily increase speed (fine) - + Temporarily Decrease Speed - + Temporarily decrease speed (coarse) - + Temporarily Decrease Speed (Fine) - + Temporarily decrease speed (fine) + - Adjust %1 @@ -2338,1138 +2331,1131 @@ trace - Above + Profiling messages - - + + Kill %1 - %1 is "Low EQ" "Mid EQ" or "High EQ" - + Eject or un-eject track, i.e. reload the last-ejected track (of any deck)<br>Double-press to reload the last replaced track. In empty decks it reloads the second-last ejected track. - + BPM / Beatgrid - + Halve BPM - + Multiply current BPM by 0.5 - + 2/3 BPM - + Multiply current BPM by 0.666 - + 3/4 BPM - + Multiply current BPM by 0.75 - + 4/3 BPM - + Multiply current BPM by 1.333 - + 3/2 BPM - + Multiply current BPM by 1.5 - + Double BPM - + Multiply current BPM by 2 - + Tempo Tap - + Tempo tap button - + Move Beatgrid - + Adjust the beatgrid to the left or right - - + + Toggle the BPM/beatgrid lock - + Revert last BPM/Beatgrid Change - + Revert last BPM/Beatgrid Change of the loaded track. - + Sync / Sync Lock - + Internal Sync Leader - + Toggle Internal Sync Leader - - + + Internal Leader BPM - + Internal Leader BPM +1 - + Increase internal Leader BPM by 1 - + Internal Leader BPM -1 - + Decrease internal Leader BPM by 1 - + Internal Leader BPM +0.1 - + Increase internal Leader BPM by 0.1 - + Internal Leader BPM -0.1 - + Decrease internal Leader BPM by 0.1 - + Sync Leader - + Sync mode 3-state toggle / indicator (Off, Soft Leader, Explicit Leader) - + Speed - + Decrease Speed (Fine) - + Pitch (Musical Key) - + Increase Pitch - + Increases the pitch by one semitone - + Increase Pitch (Fine) - + Increases the pitch by 10 cents - + Decrease Pitch - + Decreases the pitch by one semitone - + Decrease Pitch (Fine) - + Decreases the pitch by 10 cents - + Keylock - + CUP (Cue + Play) - + Shift cue points earlier - + Shift cue points 10 milliseconds earlier - + Shift cue points earlier (fine) - + Shift cue points 1 millisecond earlier - + Shift cue points later - + Shift cue points 10 milliseconds later - + Shift cue points later (fine) - + Shift cue points 1 millisecond later - + Hotcues %1-%2 - + Intro / Outro Markers - + Intro Start Marker - + Intro End Marker - + Outro Start Marker - + Outro End Marker - + intro start marker - + intro end marker - + outro start marker - + outro end marker - + Activate %1 [intro/outro marker - + Jump to or set the %1 [intro/outro marker - + Set %1 [intro/outro marker - + Set or jump to the %1 [intro/outro marker - + Clear %1 [intro/outro marker - + Clear the %1 [intro/outro marker - + if the track has no beats the unit is seconds - + Loop Selected Beats - + Create a beat loop of selected beat size - + Loop Roll Selected Beats - + Create a rolling beat loop of selected beat size - + Loop %1 Beats set from its end point - + Loop Roll %1 Beats set from its end point - + Create %1-beat loop with the current play position as loop end - + Create temporary %1-beat loop roll with the current play position as loop end - + Loop Beats - + Loop Roll Beats - + Go To Loop In - + Go to Loop In button - + Go To Loop Out - + Go to Loop Out button - + Toggle loop on/off and jump to Loop In point if loop is behind play position - + Reloop And Stop - + Enable loop, jump to Loop In point, and stop - + Halve the loop length - + Double the loop length - + Beat Jump / Loop Move - + Jump / Move Loop Forward %1 Beats - + Jump / Move Loop Backward %1 Beats - + Jump forward by %1 beats, or if a loop is enabled, move the loop forward %1 beats - + Jump backward by %1 beats, or if a loop is enabled, move the loop backward %1 beats - + Beat Jump / Loop Move Forward Selected Beats - + Jump forward by the selected number of beats, or if a loop is enabled, move the loop forward by the selected number of beats - + Beat Jump / Loop Move Backward Selected Beats - + Jump backward by the selected number of beats, or if a loop is enabled, move the loop backward by the selected number of beats - + Beat Jump - + Indicate which loop marker remain static when adjusting the size or is inherited from the current position - + Beat Jump / Loop Move Forward - + Beat Jump / Loop Move Backward - + Loop Move Forward - + Loop Move Backward - + Remove Temporary Loop - + Remove the temporary loop - + Navigation - + Move up - + Equivalent to pressing the UP key on the keyboard - + Move down - + Equivalent to pressing the DOWN key on the keyboard - + Move up/down - + Move vertically in either direction using a knob, as if pressing UP/DOWN keys - + Scroll Up - + Equivalent to pressing the PAGE UP key on the keyboard - + Scroll Down - + Equivalent to pressing the PAGE DOWN key on the keyboard - + Scroll up/down - + Scroll vertically in either direction using a knob, as if pressing PGUP/PGDOWN keys - + Move left - + Equivalent to pressing the LEFT key on the keyboard - + Move right - + Equivalent to pressing the RIGHT key on the keyboard - + Move left/right - + Move horizontally in either direction using a knob, as if pressing LEFT/RIGHT keys - + Move focus to right pane - + Equivalent to pressing the TAB key on the keyboard - + Move focus to left pane - + Equivalent to pressing the SHIFT+TAB key on the keyboard - + Move focus to right/left pane - + Move focus one pane to right or left using a knob, as if pressing TAB/SHIFT+TAB keys - + Sort focused column - + Sort the column of the cell that is currently focused, equivalent to clicking on its header - + Go to the currently selected item - + Choose the currently selected item and advance forward one pane if appropriate - + Load Track and Play - + Add to Auto DJ Queue (replace) - + Replace Auto DJ Queue with selected tracks - + Select next search history - + Selects the next search history entry - + Select previous search history - + Selects the previous search history entry - + Move selected search entry - + Moves the selected search history item into given direction and steps - + Clear search - + Clears the search query - - + + Select Next Color Available - + Select the next color in the color palette for the first selected track - - + + Select Previous Color Available - + Select the previous color in the color palette for the first selected track - + Deck %1 Quick Effect Enable Button - + Quick Effect Enable Button - + Enable or disable effect processing - + Super Knob (control effects' Meta Knobs) - + Mix Mode Toggle - + Toggle effect unit between D/W and D+W modes - + Next chain preset - + Previous Chain - + Previous chain preset - + Next/Previous Chain - + Next or previous chain preset - - + + Show Effect Parameters - + Effect Unit Assignment - + Meta Knob - + Effect Meta Knob (control linked effect parameters) - + Meta Knob Mode - + Set how linked effect parameters change when turning the Meta Knob. - + Meta Knob Mode Invert - + Invert how linked effect parameters change when turning the Meta Knob. - - + + Button Parameter Value - + Microphone / Auxiliary - + Microphone On/Off - + Microphone on/off - + Toggle microphone ducking mode (OFF, AUTO, MANUAL) - + Auxiliary On/Off - + Auxiliary on/off - + Auto DJ Авто DJ - + Auto DJ Shuffle - + Auto DJ Skip Next - + Auto DJ Add Random Track - + Add a random track to the Auto DJ queue - + Auto DJ Fade To Next - + Trigger the transition to the next track - + User Interface - + Samplers Show/Hide - + Show/hide the sampler section - - Microphone && Auxiliary Show/Hide - keep double & to prevent creation of keyboard accelerator - - - - + Waveform Zoom Reset To Default - + Reset the waveform zoom level to the default value selected in Preferences -> Waveforms - + Select the next color in the color palette for the loaded track. - + Select previous color in the color palette for the loaded track. - + Navigate Through Track Colors - + Select either next or previous color in the palette for the loaded track. - + Start/Stop Live Broadcasting - + Stream your mix over the Internet. - + Start/stop recording your mix. - - + + Samplers - + Vinyl Control Show/Hide - + Show/hide the vinyl control section - + Preview Deck Show/Hide - + Show/hide the preview deck - + Toggle 4 Decks - + Switches between showing 2 decks and 4 decks. - + Cover Art Show/Hide (Decks) - + Show/hide cover art in the main decks - + Vinyl Spinner Show/Hide - + Show/hide spinning vinyl widget - + Vinyl Spinners Show/Hide (All Decks) - + Show/Hide all spinnies - + Toggle Waveforms - + Show/hide the scrolling waveforms. - + Waveform zoom - + Waveform Zoom - + Zoom waveform in - + Waveform Zoom In - + Zoom waveform out - + Star Rating Up - + Increase the track rating by one star - + Star Rating Down - + Decrease the track rating by one star @@ -3644,7 +3630,7 @@ trace - Above + Profiling messages - + Lock Қулфлаш @@ -3674,7 +3660,7 @@ trace - Above + Profiling messages - + Enter new name for crate: @@ -3691,53 +3677,59 @@ trace - Above + Profiling messages Қутини импорт қилиш - + Export Crate Қутини экспорт қилиш - + Unlock Қулфдан чиқариш - + An unknown error occurred while creating crate: Қути яратилаётганда номаълум зато рўй берди: - + Rename Crate Қутини қайта номлаш + + + + Export to Engine Prime + + Make a crate for your next gig, for your favorite electrohouse tracks, or for your most requested tracks. - + Confirm Deletion - - + + Renaming Crate Failed Қутини қайта номлаш муваффақиятсиз якунланди - + Crate Creation Failed - + M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - + M3U Playlist (*.m3u) @@ -3746,29 +3738,23 @@ trace - Above + Profiling messages Crates are a great way to help organize the music you want to DJ with. - - - - Export to Engine DJ - - Crates let you organize your music however you'd like! - + Do you really want to delete crate <b>%1</b>? - + A crate cannot have a blank name. Қутида бўш ном бўлмайди - + A crate by that name already exists. Ушбу номли қути аллақачон мавжуд. @@ -3863,12 +3849,12 @@ trace - Above + Profiling messages - + Official Website - + Donate @@ -3987,97 +3973,97 @@ trace - Above + Profiling messages DlgAutoDJ - + Skip Ўтказиб юбориш - + Random - + Fade - + Enable Auto DJ Shortcut: Shift+F12 - + Disable Auto DJ Shortcut: Shift+F12 - + Trigger the transition to the next track Shortcut: Shift+F11 - + Skip the next track in the Auto DJ queue Shortcut: Shift+F10 - + Shuffle the content of the Auto DJ queue Shortcut: Shift+F9 - + Repeat the playlist - + Determines the duration of the transition - + Seconds - + Full Intro + Outro - + Fade At Outro Start - + Full Track - + Skip Silence - + Decks not used for Auto DJ must be stopped to enable Auto DJ mode. - + Auto DJ Fade Modes Full Intro + Outro: @@ -4103,50 +4089,50 @@ last sound. - + Repeat - + Auto DJ requires two decks assigned to opposite sides of the crossfader. - + One deck must be stopped to enable Auto DJ mode. - + Enable - + Disable - + Displays the duration and number of selected tracks. - - - + + + Auto DJ Авто DJ - + Shuffle - + Adds a random track from track sources (crates) to the Auto DJ queue. If no track sources are configured, the track is added from the library instead. @@ -4354,37 +4340,32 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + Didn't get any midi messages. Please try again. - + Unable to detect a mapping -- please try again. Be sure to only touch one control at once. - + Successfully mapped control: - + <i>Ready to learn %1</i> - + Learning: %1. Now move a control on your controller. - - The selected control does not exist.<br>This likely a bug. Please report it on the Mixxx bug tracker.<br><a href='https://github.com/mixxxdj/mixxx/issues'>https://github.com/mixxxdj/mixxx/issues</a><br><br>You tried to learn: %1,%2 - - - - + The control you clicked in Mixxx is not learnable. This could be because you are either using an old skin and this control is no longer supported, or you clicked a control that provides visual feedback and can only be mapped to outputs like LEDs via scripts. @@ -4423,17 +4404,17 @@ You tried to learn: %1,%2 - + Log - + Search - + Stats @@ -4499,7 +4480,7 @@ You tried to learn: %1,%2 - + &Close @@ -4614,128 +4595,122 @@ You tried to learn: %1,%2 DlgPrefBroadcast - + Icecast 2 - + Shoutcast 1 - + Icecast 1 - + MP3 - + Ogg Vorbis - + Opus - + AAC - + HE-AAC - + HE-AACv2 - + Automatic - + Mono - + Stereo - - - - + + + + Action failed - + You can't create more than %1 source connections. - + Source connection %1 - - Settings for %1 - Settings for broadcast profile, %1 is the profile name placeholder - - - - + At least one source connection is required. - + Are you sure you want to disconnect every active source connection? - - + + Confirmation required - + '%1' has the same Icecast mountpoint as '%2'. Two source connections to the same server that have the same mountpoint can not be enabled simultaneously. - + Are you sure you want to delete '%1'? - + Renaming '%1' - + New name for '%1': - + Can't rename '%1' to '%2': name already in use @@ -5061,138 +5036,138 @@ Two source connections to the same server that have the same mountpoint can not DlgPrefController - + Apply device settings? - + Your settings must be applied before starting the learning wizard. Apply settings and continue? - + None - + %1 by %2 - + No Name - + No Description - + No Author - + Mapping has been edited - + Always overwrite during this session - + Save As - + Overwrite - + Save user mapping - + Enter the name for saving the mapping to the user folder. - + Saving mapping failed - + A mapping cannot have a blank name and may not contain special characters. - + A mapping file with that name already exists. - + missing - + built-in - + Do you want to save the changes? - + Troubleshooting - + <font color='#BB0000'><b>If you use this mapping your controller may not work correctly. Please select another mapping or disable the controller.</b></font><br><br>This mapping was designed for a newer Mixxx Controller Engine and cannot be used on your current Mixxx installation.<br>Your Mixxx installation has Controller Engine version %1. This mapping requires a Controller Engine version >= %2.<br><br>For more information visit the wiki page on <a href='https://mixxx.org/wiki/doku.php/controller_engine_versions'>Controller Engine Versions</a>. - + Mapping already exists. - + <b>%1</b> already exists in user mapping folder.<br>Overwrite or save with a new name? - + Clear Input Mappings - + Are you sure you want to clear all input mappings? - + Clear Output Mappings - + Are you sure you want to clear all output mappings? @@ -5481,137 +5456,137 @@ Apply settings and continue? DlgPrefDeck - + Mixxx mode - + Mixxx mode (no blinking) - + Pioneer mode - + Denon mode - + Numark mode - + CUP mode - + mm:ss%1zz - Traditional - + mm:ss - Traditional (Coarse) - + s%1zz - Seconds - + sss%1zz - Seconds (Long) - + s%1sss%2zz - Kiloseconds - + Intro start - + Main cue - + First hotcue - + First sound (skip silence) - + Beginning of track - + Reject - + Allow, but stop deck - + Allow, play from load point - + 4% - + 6% (semitone) - + 8% (Technics SL-1210) - + 10% - + 16% - + 24% - + 50% - + 90% @@ -5908,134 +5883,124 @@ You can always drag-and-drop tracks on screen to clone a deck. - - + + Effect Chain Presets - + Drag and drop to rearrange lists and copy chains between lists. Create and edit chain presets in the effect units in the main window. Please refer the manual for further details. - + Chain presets from these lists will be selectable in the given order in the main window and from controllers (depending on the controller mapping). - + Effects in this chain preset: - + effect 1 name - + effect 2 name - + effect 3 name - + Import - + Rename Қайта номлаш - + Export - + Delete - + Quick Effect Chain Presets - - + + Visible Effects - + Drag and drop to rearrange lists and show or hide effects. - + Hidden Effects - - - - - - - - - - - + Effect load behavior - + Keep metaknob position - + Reset metaknob to effect default - + Effect Info - + Version: - + Description: - + Author: - + Name: - + Type: @@ -6310,97 +6275,67 @@ and allows you to pitch adjust them for harmonic mixing. - + Music Directory Added - + You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - + Scan - + Item is not a directory or directory is missing - + Choose a music directory - + Confirm Directory Removal - + Mixxx will no longer watch this directory for new tracks. What would you like to do with the tracks from this directory and subdirectories?<ul><li>Hide all tracks from this directory and subdirectories.</li><li>Delete all metadata for these tracks from Mixxx permanently.</li><li>Leave the tracks unchanged in your library.</li></ul>Hiding tracks saves their metadata in case you re-add them in the future. - + Metadata means all track details (artist, title, playcount, etc.) as well as beatgrids, hotcues, and loops. This choice only affects the Mixxx library. No files on disk will be changed or deleted. - + Hide Tracks - + Delete Track Metadata - + Leave Tracks Unchanged - + Relink music directory to new location - - Black - - - - - ExtraBold - - - - - Bold - - - - - SemiBold - - - - - Medium - - - - - Light - - - - + Select Library Font @@ -7275,142 +7210,138 @@ The loudness target is approximate and assumes track pregain and main output lev DlgPrefSound - + %1 Hz - + Default (long delay) - + Experimental (no delay) - + Disabled (short delay) - + Soundcard Clock - + Network Clock - + Direct monitor (recording and broadcasting only) - + Disabled - + Enabled - + Stereo - + Mono - + To enable Realtime scheduling (currently disabled), see the %1. - + The %1 lists sound cards and controllers you may want to consider for using Mixxx. - + Mixxx DJ Hardware Guide - - Find details in the Mixxx user manual - - - - + auto (<= 1024 frames/period) - + 2048 frames/period - + 4096 frames/period - + Microphone inputs are out of time in the record & broadcast signal compared to what you hear. - + Measure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + + Refer to the Mixxx User Manual for details. - + Configured latency has changed. - + Remeasure round trip latency and enter it above for Microphone Latency Compensation to align microphone timing. - + Realtime scheduling is enabled. - + Main output only - + Main and booth outputs - + %1 ms - + Configuration error @@ -7428,131 +7359,126 @@ The loudness target is approximate and assumes track pregain and main output lev - + Sample Rate - + Audio Buffer - + Engine Clock - + Use soundcard clock for live audience setups and lowest latency.<br>Use network clock for broadcasting without a live audience. - + Main Mix - + Main Output Mode - + Microphone Monitor Mode - + Microphone Latency Compensation - - - - + + + + ms milliseconds - - Deck and Bus outputs are for external mixers. They are post-fader and include effects and crossfader (for Auto DJ). For external mixing, make sure all Mixxx faders and EQ knobs are set to their default position (right- or double-click). - - - - + 20 ms - + Buffer Underflow Count - + 0 - + Keylock/Pitch-Bending Engine - + Multi-Soundcard Synchronization - + Output - + Input - + System Reported Latency - + Enlarge your audio buffer if the underflow counter is increasing or you hear pops during playback. - + Main Output Delay - + Headphone Output Delay - + Booth Output Delay - + Hints and Diagnostics - + Downsize your audio buffer to improve Mixxx's responsiveness. - + Query Devices @@ -7594,7 +7520,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Show Signal Quality in Skin @@ -7630,51 +7556,46 @@ The loudness target is approximate and assumes track pregain and main output lev - Pitch estimator - - - - Deck 1 - + Deck 2 - + Deck 3 - + Deck 4 - + Signal Quality - + http://www.xwax.co.uk - + Powered by xwax - + Hints - + Select sound devices for Vinyl Control in the Sound Hardware pane. @@ -7697,42 +7618,32 @@ The loudness target is approximate and assumes track pregain and main output lev - + Top - + Center - + Bottom - - 1/3rd of waveform viewer - - - - - Full waveform viewer height - - - - + OpenGL not available - + dropped frames - + Cached waveforms occupy %1 MiB on disk. @@ -7750,7 +7661,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays which OpenGL version is supported by the current platform. @@ -7760,7 +7671,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Average frame rate @@ -7776,7 +7687,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + Displays the actual frame rate. @@ -7791,7 +7702,7 @@ The loudness target is approximate and assumes track pregain and main output lev - + OpenGL status @@ -7883,57 +7794,52 @@ Select from different types of displays for the waveform, which differ primarily - + Beats until next marker - - Preferred font size - - - - - Text height limit + + Time until next marker - - Time until next marker + + Placement - - Placement + + Font size - + pt - + This functionality requires a waveform type marked "(GLSL)". - + Caching - + Mixxx caches the waveforms of your tracks on disk the first time you load a track. This reduces CPU usage when you are playing live but requires extra disk space. - + Enable waveform caching - + Generate waveforms when analyzing library @@ -7963,7 +7869,7 @@ Select from different types of displays for the waveform, which differ primarily - + Clear Cached Waveforms @@ -8119,22 +8025,22 @@ Select from different types of displays for the waveform, which differ primarily - + Start Recording - + Recording to file: - + Stop Recording - + %1 MiB written in %2 @@ -8442,102 +8348,102 @@ This can not be undone! - + Filetype: - + BPM: BPM - + Location: - + Bitrate: - + Comments - + BPM BPM - + Sets the BPM to 75% of the current value. - + 3/4 BPM - + Sets the BPM to 50% of the current value. - + Displays the BPM of the selected track. - + Track # Қўшиқ # - + Album Artist - + Composer - + Title Сарлавҳа - + Grouping - + Key Калит - + Year Йил - + Artist Санъаткор - + Album Альбом - + Genre Жанри @@ -8547,179 +8453,179 @@ This can not be undone! - + Sets the BPM to 200% of the current value. - + Double BPM - + Halve BPM - + Clear BPM and Beatgrid - + Move to the previous item. "Previous" button - + &Previous - + Move to the next item. "Next" button - + &Next - + Duration: - + Import Metadata from MusicBrainz - + Re-Import Metadata from file - + Color - + Date added: - + Open in File Browser - + Samplerate: - + Track BPM: - + Converts beats detected by the analyzer into a fixed-tempo beatgrid. Use this setting if your tracks have a constant tempo (e.g. most electronic music). Often results in higher quality beatgrids, but will not do well on tracks that have tempo shifts. - + Assume constant tempo - + Sets the BPM to 66% of the current value. - + 2/3 BPM - + Sets the BPM to 150% of the current value. - + 3/2 BPM - + Sets the BPM to 133% of the current value. - + 4/3 BPM - + Tap with the beat to set the BPM to the speed you are tapping. - + Tap to Beat - + Hint: Use the Library Analyze view to run BPM detection. - + Save changes and close the window. "OK" button - + &OK - + Discard changes and close the window. "Cancel" button - + Save changes and keep the window open. "Apply" button - + &Apply - + &Cancel - + (no color) @@ -8876,7 +8782,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h - + (no color) @@ -9329,15 +9235,15 @@ Often results in higher quality beatgrids, but will not do well on tracks that h LegacySkinParser - - + + Safe Mode Enabled Shown when Mixxx is running in safe mode. - - + + No OpenGL support. Shown when Spinny can not be displayed. Please keep @@ -9348,57 +9254,57 @@ Shown when VuMeter can not be displayed. Please keep - + activate - + toggle - + right - + left - + right small - + left small - + up - + down - + up small - + down small - + Shortcut @@ -9406,62 +9312,62 @@ Shown when VuMeter can not be displayed. Please keep Library - + This or a parent directory is already in your library. - + This or a listed directory does not exist or is inaccessible. Aborting the operation to avoid library inconsistencies - - + + This directory can not be read. - + An unknown error occurred. Aborting the operation to avoid library inconsistencies - + Can't add Directory to Library - + Could not add <b>%1</b> to your library. %2 - + Can't remove Directory from Library - + An unknown error occurred. - + This directory does not exist or is inaccessible. - + Relink Directory - + Could not relink <b>%1</b> to <b>%2</b>. %3 @@ -9533,32 +9439,32 @@ Do you really want to overwrite it? MidiController - + MIDI Controller - + MixxxControl(s) not found - + One or more MixxxControls specified in the outputs section of the loaded mapping were invalid. - + * Make sure the MixxxControls in question actually exist. Visit the manual for a complete list: - + Some LEDs or other feedback may not work correctly. - + * Check to see that the MixxxControl names are spelled correctly in the mapping file (.xml) @@ -9629,7 +9535,7 @@ Do you really want to overwrite it? - Export to Engine DJ + Export to Engine Prime @@ -9641,122 +9547,122 @@ Do you really want to overwrite it? MixxxMainWindow - + Sound Device Busy - + <b>Retry</b> after closing the other application or reconnecting a sound device - - - + + + <b>Reconfigure</b> Mixxx's sound device settings. - - + + Get <b>Help</b> from the Mixxx Wiki. - - - + + + <b>Exit</b> Mixxx. - + Retry - + skin - + Allow Mixxx to hide the menu bar? - + Hide Always show the menu bar? - + Always show - + The Mixxx menu bar is hidden and can be toggled with a single press of the <b>Alt</b> key.<br><br>Click <b>%1</b> to agree.<br><br>Click <b>%2</b> to disable that, for example if you don't use Mixxx with a keyboard.<br><br>You can change this setting any time in Preferences -> Interface.<br> Keep formatting tags <b> (bold text) and <br> (linebreak). %1 is the placeholder for the 'Always show' button label - + Ask me again - - + + Reconfigure - + Help - - + + Exit - - + + Mixxx was unable to open all the configured sound devices. - + Sound Device Error - + <b>Retry</b> after fixing an issue - + No Output Devices - + Mixxx was configured without any output sound devices. Audio processing will be disabled without a configured output device. - + <b>Continue</b> without any outputs. - + Continue @@ -9776,73 +9682,73 @@ Do you really want to overwrite it? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Error in skin file - + The selected skin cannot be loaded. - + OpenGL Direct Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit - + A deck is currently playing. Exit Mixxx? - + A sampler is currently playing. Exit Mixxx? - + The preferences window is still open. - + Discard any changes and exit Mixxx? @@ -9858,13 +9764,13 @@ Do you want to select an input device? PlaylistFeature - + Lock Қулфлаш - + Playlists @@ -9874,32 +9780,32 @@ Do you want to select an input device? - + Unlock Қулфдан чиқариш - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. - + Create New Playlist @@ -10072,82 +9978,69 @@ Do you want to scan your library for cover files now? - + Main - Audio path indetifier - + Booth - Audio path indetifier - + Headphones - Audio path indetifier - + Left Bus - Audio path indetifier - + Center Bus - Audio path indetifier - + Right Bus - Audio path indetifier - + Invalid Bus - Audio path indetifier - + Deck - Audio path indetifier - + Record/Broadcast - Audio path indetifier - + Vinyl Control - Audio path indetifier - + Microphone - Audio path indetifier - + Auxiliary - Audio path indetifier - + Unknown path type %1 - Audio path @@ -11461,7 +11354,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Sampler %1 @@ -11589,7 +11482,7 @@ may introduce a 'pumping' effect and/or distortion. - + various @@ -11695,54 +11588,54 @@ may introduce a 'pumping' effect and/or distortion. RekordboxFeature - - - + + + Rekordbox - + Playlists - + Folders - + Reads databases exported for Pioneer CDJ / XDJ players using the Rekordbox Export mode.<br/>Rekordbox can only export to USB or SD devices with a FAT or HFS file system.<br/>Mixxx can read a database from any device that contains the database folders (<tt>PIONEER</tt> and <tt>Contents</tt>).<br/>Not supported are Rekordbox databases that have been moved to an external device via<br/><i>Preferences > Advanced > Database management</i>.<br/><br/>The following data is read: - + Hot cues - + Loops (only the first loop is currently usable in Mixxx) - + Check for attached Rekordbox USB / SD devices (refresh) - + Beatgrids - + Memory cues - + (loading) Rekordbox @@ -11877,19 +11770,19 @@ may introduce a 'pumping' effect and/or distortion. Қулфлаш - - + + Confirm Deletion - + Do you really want to delete all unlocked playlist from <b>%1</b>?<br><br> %1 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak - + Deleting %1 playlists from <b>%2</b>.<br><br> %1 is the number of playlists to be deleted %2 is the year <b> + </b> are used to make the text in between bold in the popup <br> is a linebreak @@ -12869,7 +12762,7 @@ may introduce a 'pumping' effect and/or distortion. - + Un-ejects when no track is loaded, i.e. reloads the track that was ejected last (of any deck). @@ -13218,11 +13111,6 @@ may introduce a 'pumping' effect and/or distortion. Hold or short click for latching to mix this input into the main output. - - - Reloads the last replaced track. If no track is loaded reloads the second-last ejected track. - - If hotcue is a loop cue, toggles the loop and jumps to if the loop is behind the play position. @@ -14490,12 +14378,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. - + Eject - + Ejects track from the player. @@ -14693,12 +14581,12 @@ Use this to change only the effected (wet) signal with EQ and filter effects. TrackCollection - + Hiding tracks - + The selected tracks are in the following playlists:%1Hiding them will remove them from these playlists. Continue? @@ -15082,408 +14970,407 @@ This can not be undone! - + + E&xport Library to Engine Prime + + + + + Export the library to the Engine Prime format + + + + Create &New Playlist - + Create a new playlist - + Ctrl+n - + Create New &Crate - + Create a new crate - + Ctrl+Shift+N - - + + &View - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings - + Show Microphone Section - + Show the microphone section of the Mixxx interface. - + Ctrl+2 Menubar|View|Show Microphone Section - + Show Vinyl Control Section - + Show the vinyl control section of the Mixxx interface. - + Ctrl+3 Menubar|View|Show Vinyl Control Section - + Show Preview Deck - + Show the preview deck in the Mixxx interface. - + Ctrl+4 Menubar|View|Show Preview Deck - + Show Cover Art - + Show cover art in the Mixxx interface. - + Ctrl+6 Menubar|View|Show Cover Art - + Maximize Library - + Maximize the track library to take up all the available screen space. - + Space Menubar|View|Maximize Library - + &Full Screen - + Display Mixxx using the full screen - + &Options - + &Vinyl Control - + Use timecoded vinyls on external turntables to control Mixxx - + Enable Vinyl Control &%1 - + &Record Mix - + Record your mix to a file - + Ctrl+R - + Enable Live &Broadcasting - + Stream your mixes to a shoutcast or icecast server - + Ctrl+L - + Enable &Keyboard Shortcuts - + Toggles keyboard shortcuts on or off - + Ctrl+` - + &Preferences - + Change Mixxx settings (e.g. playback, MIDI, controls) - + &Developer - + &Reload Skin - + Reload the skin - + Ctrl+Shift+R - + Developer &Tools - + Opens the developer tools dialog - + Ctrl+Shift+T - + Stats: &Experiment Bucket - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. - + Ctrl+Shift+E - + Stats: &Base Bucket - + Enables base mode. Collects stats in the BASE tracking bucket. - + Ctrl+Shift+B - + Deb&ugger Enabled - + Enables the debugger during skin parsing - + Ctrl+Shift+D - + &Help - + Show Keywheel menu title - - E&xport Library to Engine DJ - "Engine DJ" must not be translated - - - - - Export the library to the Engine DJ format - - - - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support - + Get help with Mixxx - + &User Manual - + Read the Mixxx user manual. - + &Keyboard Shortcuts - + Speed up your workflow with keyboard shortcuts. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application - + Help translate this application into your language. - + &About - + About the application @@ -15491,25 +15378,25 @@ This can not be undone! WOverview - + Passthrough - + Ready to play, analyzing... Text on waveform overview when file is playable but no waveform is visible - - + + Loading track... Text on waveform overview when file is cached from source - + Finalizing... Text on waveform overview during finalizing of waveform analysis @@ -15639,77 +15526,77 @@ This can not be undone! WSearchRelatedTracksMenu - + Search related Tracks - + Key Калит - + harmonic with %1 - + BPM BPM - + between %1 and %2 - + Artist Санъаткор - + Album Artist - + Composer - + Title Сарлавҳа - + Album Альбом - + Grouping - + Year Йил - + Genre Жанри - + Directory - + &Search selected @@ -15717,594 +15604,594 @@ This can not be undone! WTrackMenu - + Load to - + Deck - + Sampler - + Add to Playlist - + Crates Қутилар - + Metadata - + Update external collections - + Cover Art - + Adjust BPM - + Select Color - - + + Analyze - - + + Delete Track Files - + Add to Auto DJ Queue (bottom) - + Add to Auto DJ Queue (top) - + Add to Auto DJ Queue (replace) - + Preview Deck - + Remove Олиб ташлаш - + Remove from Playlist - + Remove from Crate - + Hide from Library - + Unhide from Library - + Purge from Library - + Move Track File(s) to Trash - + Delete Files from Disk - + Properties - + Open in File Browser - + Select in Library - + Import From File Tags - + Import From MusicBrainz - + Export To File Tags - + BPM and Beatgrid - + Play Count - + Rating Рейтинг - + Cue Point - + Hotcues - + Intro - + Outro - + Key Калит - + ReplayGain - + Waveform - + Comment Мулоҳаза - + All - + Lock BPM - + Unlock BPM - + Double BPM - + Halve BPM - + 2/3 BPM - + 3/4 BPM - + 4/3 BPM - + 3/2 BPM - + Reanalyze - + Reanalyze (constant BPM) - + Reanalyze (variable BPM) - + Update ReplayGain from Deck Gain - + Deck %1 - + Importing metadata of %n track(s) from file tags - + Marking metadata of %n track(s) to be exported into file tags - - + + Create New Playlist - + Enter name for new playlist: - + New Playlist Янги қўшиқ рўйхати - - - + + + Playlist Creation Failed - + A playlist by that name already exists. - + A playlist cannot have a blank name. - + An unknown error occurred while creating playlist: - + Add to New Crate - + Scaling BPM of %n track(s) - + Undo BPM/beats change of %n track(s) - + Locking BPM of %n track(s) - + Unlocking BPM of %n track(s) - + Setting rating of %n track(s) - + Setting color of %n track(s) - + Resetting play count of %n track(s) - + Resetting beats of %n track(s) - + Clearing rating of %n track(s) - + Clearing comment of %n track(s) - + Removing main cue from %n track(s) - + Removing outro cue from %n track(s) - + Removing intro cue from %n track(s) - + Removing loop cues from %n track(s) - + Removing hot cues from %n track(s) - + Resetting keys of %n track(s) - + Resetting replay gain of %n track(s) - + Resetting waveform of %n track(s) - + Resetting all performance metadata of %n track(s) - + Move these files to the trash bin? - + Permanently delete these files from disk? - - + + This can not be undone! - + Cancel - + Delete Files - + Okay - + Move Track File(s) to Trash? - + Track Files Deleted - + Track Files Moved To Trash - + %1 track files were moved to trash and purged from the Mixxx database. - + %1 track files were deleted from disk and purged from the Mixxx database. - + Track File Deleted - + Track file was deleted from disk and purged from the Mixxx database. - + The following %1 file(s) could not be deleted from disk - + This track file could not be deleted from disk - + Remaining Track File(s) - + Close - + Clear Reset metadata in right click track context menu in library - + Loops - + Clear BPM and Beatgrid - + Undo last BPM/beats change - + Move this track file to the trash bin? - + Permanently delete this track file from disk? - + All decks where these tracks are loaded will be stopped and the tracks will be ejected. - + All decks where this track is loaded will be stopped and the track will be ejected. - + Removing %n track file(s) from disk... - + Note: if you are in the Computer or Recording view you need to click the current view again to see changes. - + Track File Moved To Trash - + Track file was moved to trash and purged from the Mixxx database. - + The following %1 file(s) could not be moved to trash - + This track file could not be moved to trash - + Setting cover art of %n track(s) - + Reloading cover art of %n track(s) @@ -16320,37 +16207,37 @@ This can not be undone! WTrackTableView - + Confirm track hide - + Are you sure you want to hide the selected tracks? - + Are you sure you want to remove the selected tracks from AutoDJ queue? - + Are you sure you want to remove the selected tracks from this crate? - + Are you sure you want to remove the selected tracks from this playlist? - + Don't ask again during this session - + Confirm track removal @@ -16358,7 +16245,7 @@ This can not be undone! WTrackTableViewHeader - + Show or hide columns. @@ -16366,7 +16253,7 @@ This can not be undone! WaveformWidgetFactory - + legacy @@ -16446,52 +16333,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory - + controllers - + Cannot open database - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. @@ -16537,33 +16424,32 @@ Click OK to exit. - - Export Library to Engine DJ - "Engine DJ" must not be translated + + Export Library to Engine Prime - + Export Library To - + No Export Directory Chosen - + No export directory was chosen. Please choose a directory in order to export the music library. - + A database already exists in the chosen directory. Exported tracks will be added into this database. - + A database already exists in the chosen directory, but there was a problem loading it. Export is not guaranteed to succeed in this situation. @@ -16584,7 +16470,7 @@ Click OK to exit. mixxx::EnginePrimeExportJob - + Failed to export track %1 - %2: %3 %1 is the artist %2 is the title and %3 is the original error message @@ -16610,7 +16496,7 @@ Click OK to exit. - Exporting to Engine DJ... + Exporting to Engine Prime... diff --git a/res/translations/mixxx_vi.qm b/res/translations/mixxx_vi.qm index 80bdfa8aefb6..7eb72f8ef684 100644 Binary files a/res/translations/mixxx_vi.qm and b/res/translations/mixxx_vi.qm differ diff --git a/res/translations/mixxx_vi.ts b/res/translations/mixxx_vi.ts index 6f6a7c0e5c89..2203c32114fb 100644 --- a/res/translations/mixxx_vi.ts +++ b/res/translations/mixxx_vi.ts @@ -21,27 +21,28 @@ Crates - Thùng + Crates + Enable Auto DJ - Bật Auto DJ + DJ Tự động Disable Auto DJ - Tắt Auto DJ + Tắt Tự động DJ Clear Auto DJ Queue - Dọn hàng đợi Auto DJ + Dọn hàng đợi Tự động DJ Remove Crate as Track Source - Loại bỏ thùng như theo dõi nguồn + Xoá Crate làm Nguồn track nhạc @@ -66,7 +67,7 @@ Add Crate as Track Source - Thêm thùng như theo dõi nguồn + Thêm Crate làm Nguồn track nhạc @@ -81,20 +82,20 @@ Error loading Banshee database - Lỗi tải Banshee cơ sở dữ liệu + Lỗi tải Cơ sở dữ liệu Banshee Banshee database file not found at - Banshee cơ sở dữ liệu tập tin không tìm thấy tại + Không tìm thấy tệp Cơ sở dữ liệu Banshee tại There was an error loading your Banshee database at - Đã có lỗi tải của bạn cơ sở dữ liệu Banshee tại + Lỗi tải Cơ sở dữ liệu Banshee của bạn tại @@ -103,12 +104,12 @@ Add to Auto DJ Queue (bottom) - Thêm vào hàng đợi DJ tự động (phía dưới) + Thêm vào hàng đợi DJ tự động (dưới) Add to Auto DJ Queue (top) - Thêm vào hàng đợi DJ tự động (top) + Thêm vào hàng đợi DJ Tự động (trên) @@ -138,12 +139,12 @@ Playlist Creation Failed - Sáng tạo danh sách phát đã thất bại + Tạo Playlist không thành công. An unknown error occurred while creating playlist: - Lỗi không biết xảy ra trong khi tạo danh sách chơi: + Lỗi vô định khi tạo Playlist: @@ -151,28 +152,28 @@ New Playlist - Danh sách chơi mới + Playlist mới Add to Auto DJ Queue (bottom) - Thêm vào hàng đợi DJ tự động (phía dưới) + Thêm vào hàng đợi DJ Tự động (dưới) Create New Playlist - Tạo danh sách chơi mới + Tạo Playlist mới Add to Auto DJ Queue (top) - Thêm vào hàng đợi DJ tự động (top) + Thêm vào hàng đợi DJ Tự động (trên) Remove - Loại bỏ + Xoá @@ -187,13 +188,13 @@ Duplicate - Bản sao + Tạo bản sao Import Playlist - Chuyển nhập danh sách phát + Nhập Playlist @@ -203,29 +204,29 @@ Analyze entire Playlist - Phân tích toàn bộ danh sách phát + Phân tích toàn bộ Playlist Enter new name for playlist: - Nhập tên mới cho danh sách chơi: + Nhập tên mới cho Playlist: Duplicate Playlist - Lặp lại danh sách chơi + Tạo bản sao cho Playlist Enter name for new playlist: - Nhập tên cho danh sách phát mới: + Nhập tên cho Playlist mới: Export Playlist - Xuất chuyển danh sách chơi + Xuất Playlist @@ -242,27 +243,27 @@ Rename Playlist - Đổi tên danh sách chơi + Đổi tên Playlist Renaming Playlist Failed - Đổi tên danh sách phát đã thất bại + Đổi tên Playlist thất bại A playlist by that name already exists. - Một danh sách tên đó đã tồn tại. + Đã có Playlist tồn tại có cùng tên. A playlist cannot have a blank name. - Một danh sách không thể có một tên trống. + Tên Playlist không được để trống. @@ -279,13 +280,13 @@ Playlist Creation Failed - Sáng tạo danh sách phát đã thất bại + Tạo Playlist thất bại. An unknown error occurred while creating playlist: - Lỗi không biết xảy ra trong khi tạo danh sách chơi: + Lỗi vô định khi tạo playlist: @@ -305,7 +306,7 @@ M3U Playlist (*.m3u);;M3U8 Playlist (*.m3u8);;PLS Playlist (*.pls);;Text CSV (*.csv);;Readable Text (*.txt) - M3U danh sách bài hát (*.m3u); M3U8 danh sách bài hát (*.m3u8); PLS danh sách bài hát (* .pls); Văn bản CSV (*.csv); Có thể đọc được văn bản (*.txt) + Playlist M3U (*.m3u); playlist M3U8 (*.m3u8); playlist PLS (* .pls); Văn bản CSV (*.csv); Văn bản dạng đọc (*.txt) @@ -326,7 +327,7 @@ Couldn't load track. - Không thể nạp theo dõi. + Không thể load track nhạc. @@ -339,7 +340,7 @@ Album Artist - Album nghệ sĩ + Nghệ sĩ của Album @@ -379,7 +380,7 @@ Cover Art - Bìa + Ảnh bìa @@ -394,7 +395,7 @@ Duration - Thời gian + Độ dài @@ -414,7 +415,7 @@ Key - Chìa khóa + Khoá @@ -449,7 +450,7 @@ Played - Chơi + Đã phát @@ -459,7 +460,7 @@ Track # - Theo dõi # + STT Track # @@ -483,7 +484,7 @@ Please enable at least one connection to use Live Broadcasting. - Vui lòng bật ít nhất một kết nối để dùng Live Broadcasting (Phát Trực tiếp). + Vui lòng bật ít nhất một kết nối để dùng Phát Trực tiếp. @@ -514,7 +515,7 @@ Enabled - Kích hoạt + Bật @@ -557,17 +558,17 @@ Add to Quick Links - Thêm vào liên kết nhanh + Thêm vào Liên kết Nhanh Remove from Quick Links - Loại bỏ từ liên kết nhanh + Xoá khỏi Liên kết Nhanh Add to Library - Thêm vào thư viện + Thêm vào Thư viện @@ -577,7 +578,7 @@ Quick Links - Liên kết nhanh + Liên kết Nhanh @@ -588,7 +589,7 @@ Removable Devices - Thiết bị di động + Thiết bị Di động @@ -599,12 +600,12 @@ Music Directory Added - Âm nhạc thư mục bổ sung + Đường dẫn nguồn Nhạc đã được thêm You added one or more music directories. The tracks in these directories won't be available until you rescan your library. Would you like to rescan now? - Bạn đã thêm vào một hoặc nhiều thư mục âm nhạc. Các bài hát trong những thư mục này sẽ không có sẵn cho đến khi bạn tại thư viện của bạn. Bạn có muốn tại bây giờ không? + Bạn đã thêm vào một hoặc nhiều thư mục nhạc. Các bài nhạc trong những thư mục này sẽ không hiện cho dến khi bạn quét lại thư viện của bạn. Bạn có muốn quét bây giờ không? @@ -657,7 +658,7 @@ Track # - Theo dõi # + STT Track # @@ -682,7 +683,7 @@ Duration - Thời gian + Độ dài @@ -3644,32 +3645,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. - + You can ignore this error for this session but you may experience erratic behavior. - + Try to recover by resetting your controller. Cố gắng phục hồi bằng cách đặt lại trình điều khiển. - + Controller Mapping Error - + The mapping for your controller "%1" is not working properly. - + The script code needs to be fixed. Mã kịch bản cần phải được cố định. @@ -5636,6 +5637,16 @@ Apply settings and continue? Multi-Sampling + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6227,62 +6238,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. Kích thước tối thiểu của vẻ ngoài đã chọn là lớn hơn độ phân giải màn hình của bạn. - + Allow screensaver to run - + Prevent screensaver from running - + Prevent screensaver while playing - + Disabled - + 2x MSAA - + 4x MSAA - + 8x MSAA - + 16x MSAA - + This skin does not support color schemes Da này không hỗ trợ phối màu - + Information Thông tin - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. @@ -9563,57 +9574,57 @@ Shown when VuMeter can not be displayed. Please keep Không có hỗ trợ OpenGL. - + activate kích hoạt - + toggle chuyển đổi - + right quyền - + left trái - + right small ngay nhỏ - + left small còn nhỏ - + up lên - + down xuống - + up small mặc nhỏ - + down small xuống nhỏ - + Shortcut Lối tắt @@ -9686,22 +9697,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist Chuyển nhập danh sách phát - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) Tệp danh sách chơi (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -9972,131 +9983,131 @@ Do you really want to overwrite it? Tiếp tục - + Load track to Deck %1 Tải ca khúc để boong %1 - + Deck %1 is currently playing a track. Sàn %1 đang phát một ca khúc. - + Are you sure you want to load a new track? Bạn có chắc bạn muốn tải một ca khúc mới không? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. Có là không có thiết bị đầu vào, chọn này kiểm soát vinyl. Xin vui lòng chọn một thiết bị đầu vào trong ưa thích của phần cứng âm thanh đầu tiên. - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. Có là không có thiết bị đầu vào, chọn này kiểm soát passthrough. Xin vui lòng chọn một thiết bị đầu vào trong ưa thích của phần cứng âm thanh đầu tiên. - + There is no input device selected for this microphone. Do you want to select an input device? - + There is no input device selected for this auxiliary. Do you want to select an input device? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file Lỗi trong tệp vẻ ngoài - + The selected skin cannot be loaded. Vẻ ngoài đã chọn không thể được nạp. - + OpenGL Direct Rendering Trực tiếp OpenGL Rendering - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. - - - + + + Confirm Exit Xác nhận thoát - + A deck is currently playing. Exit Mixxx? Một sân hiện đang phát. Thoát khỏi Mixxx? - + A sampler is currently playing. Exit Mixxx? Một sampler hiện đang phát. Thoát khỏi Mixxx? - + The preferences window is still open. Cửa sổ tùy chọn là vẫn còn mở. - + Discard any changes and exit Mixxx? Loại bỏ bất kỳ thay đổi và thoát Mixxx? @@ -10118,7 +10129,7 @@ Do you want to select an input device? - + Playlists Danh sách phát @@ -10159,27 +10170,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. Một số DJ xây dựng danh sách phát trước khi họ thực hiện trực tiếp, nhưng những người khác muốn xây dựng họ on-the-fly. - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. Khi sử dụng một danh sách trong bộ DJ sống, hãy nhớ luôn luôn chú ý chặt chẽ đến như thế nào đối tượng của bạn phản ứng với âm nhạc bạn đã chọn để chơi. - + Create New Playlist Tạo danh sách chơi mới @@ -11804,7 +11815,7 @@ Hint: compensates "chipmunk" or "growling" voices - + Passthrough @@ -15552,323 +15563,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist Tạo & danh sách chơi mới - + Create a new playlist Tạo một danh sách mới - + Ctrl+n Ctrl + n - + Create New &Crate Tạo mới & thùng - + Create a new crate Tạo một thùng mới - + Ctrl+Shift+N Ctrl + Shift + N - - + + &View & Xem - + Auto-hide menu bar - + Auto-hide the main menu bar when it's not used. - + May not be supported on all skins. Có thể không được hỗ trợ trên tất cả da. - + Show Skin Settings Menu - + Show the Skin Settings Menu of the currently selected Skin - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl + 1 - + Show Microphone Section Hiển thị Micro phần - + Show the microphone section of the Mixxx interface. Hiển thị phần micro của giao diện Mixxx. - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl + 2 - + Show Vinyl Control Section Hiển thị Vinyl kiểm soát phần - + Show the vinyl control section of the Mixxx interface. Hiển thị phần vinyl kiểm soát của giao diện Mixxx. - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl + 3 - + Show Preview Deck Hiển thị xem trước sàn - + Show the preview deck in the Mixxx interface. Hiển thị xem trước sàn trong giao diện Mixxx. - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl + 4 - + Show Cover Art Bìa đĩa Hiển thị - + Show cover art in the Mixxx interface. Hiển thị nghệ thuật bao gồm trong giao diện Mixxx. - + Ctrl+6 Menubar|View|Show Cover Art Ctrl + 6 - + Maximize Library Tối đa hóa thư viện - + Maximize the track library to take up all the available screen space. Tối đa hóa thư viện theo dõi để mất tất cả không gian màn hình có sẵn. - + Space Menubar|View|Maximize Library - + &Full Screen & Toàn màn hình - + Display Mixxx using the full screen Hiển thị Mixxx bằng cách sử dụng toàn màn hình - + &Options & Tùy chọn - + &Vinyl Control & Vinyl kiểm soát - + Use timecoded vinyls on external turntables to control Mixxx Sử dụng timecoded vinyls trên bên ngoài xoay để kiểm soát Mixxx - + Enable Vinyl Control &%1 Kích hoạt tính năng Vinyl kiểm soát & %1 - + &Record Mix & Ghi kết hợp - + Record your mix to a file Ghi lại hỗn hợp của bạn vào một tập tin - + Ctrl+R Ctrl + R - + Enable Live &Broadcasting Sử sống & phát thanh truyền - + Stream your mixes to a shoutcast or icecast server Dòng hỗn hợp của bạn đến một máy chủ shoutcast hoặc icecast - + Ctrl+L Ctrl + L - + Enable &Keyboard Shortcuts Kích hoạt tính năng & phím tắt - + Toggles keyboard shortcuts on or off Chuyển phím tắt Baät hoaëc taét - + Ctrl+` Ctrl +' - + &Preferences & Sở thích - + Change Mixxx settings (e.g. playback, MIDI, controls) Thay đổi cài đặt Mixxx (ví dụ như các điều khiển phát lại, MIDI) - + &Developer & Phát triển - + &Reload Skin & Tải lại da - + Reload the skin Tải lại da - + Ctrl+Shift+R Ctrl + Shift + R - + Developer &Tools Công cụ phát triển & - + Opens the developer tools dialog Mở hộp thoại công cụ phát triển - + Ctrl+Shift+T Ctrl + Shift + T - + Stats: &Experiment Bucket Thống kê: & thử nghiệm Xô - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. Cho phép thử nghiệm chế độ. Thu thập số liệu thống kê trong thử nghiệm theo dõi thùng. - + Ctrl+Shift+E Ctrl + Shift + E - + Stats: &Base Bucket Thống kê: & căn cứ Xô - + Enables base mode. Collects stats in the BASE tracking bucket. Cho phép cơ sở chế độ. Thu thập số liệu thống kê căn cứ theo dõi Xô. - + Ctrl+Shift+B Ctrl + Shift + B - + Deb&ugger Enabled Deb & ugger đã bật - + Enables the debugger during skin parsing Cho phép trình gỡ lỗi trong da phân tích - + Ctrl+Shift+D Ctrl + Shift + D - + &Help & Trợ giúp - + Show Keywheel menu title @@ -15885,74 +15926,74 @@ This can not be undone! - + Show keywheel tooltip text - + F12 Menubar|View|Show Keywheel - + &Community Support & Hỗ trợ cộng đồng - + Get help with Mixxx Nhận trợ giúp với Mixxx - + &User Manual & Hướng dẫn sử dụng - + Read the Mixxx user manual. Đọc hướng dẫn sử dụng Mixxx. - + &Keyboard Shortcuts & Phím tắt - + Speed up your workflow with keyboard shortcuts. Tăng tốc độ công việc của bạn với phím tắt. - + &Settings directory - + Open the Mixxx user settings directory. - + &Translate This Application & Dịch ứng dụng này - + Help translate this application into your language. Giúp chúng tôi dịch ứng dụng này sang ngôn ngữ của bạn. - + &About & Giới thiệu - + About the application Về ứng dụng @@ -15987,25 +16028,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - Rõ ràng đầu vào - - - - Ctrl+F - Search|Focus - Ctrl + F - - - + Search noun Tìm - + Clear input Rõ ràng đầu vào @@ -16016,93 +16045,87 @@ This can not be undone! Tìm... - + Clear the search bar input field - - Enter a string to search for - Nhập một chuỗi tìm kiếm + + Return + - - Use operators like bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. - - For more information see User Manual > Mixxx Library + + Use operators like bpm:115-128, artist:BooFar, -year:1990. - Shortcut - Lối tắt + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl + F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - Tập trung + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace + + Additional Shortcuts When Focused: - Shortcuts + Trigger search before search-as-you-type timeout or focus tracks view afterwards - Return + Esc or Ctrl+Return - Trigger search before search-as-you-type timeout orjump to tracks view afterwards + Immediately trigger search and focus tracks view + Exit search bar and leave focus - + Ctrl+Space - + Toggle search history Shows/hides the search history entries - + Delete or Backspace - - Delete query from history + + in search history - - Esc - Esc - - - - Exit search - Exit search bar and leave focus - Tìm lối ra + + Delete query from history + @@ -16909,52 +16932,52 @@ This can not be undone! mixxx::CoreServices - + fonts - + database - + effects - + audio interface - + decks - + library - + Choose music library directory Chọn âm nhạc thư viện thư mục - + controllers - + Cannot open database Không thể mở cơ sở dữ liệu - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_zh.qm b/res/translations/mixxx_zh.qm index c8154f146399..231edd1d299d 100644 Binary files a/res/translations/mixxx_zh.qm and b/res/translations/mixxx_zh.qm differ diff --git a/res/translations/mixxx_zh.ts b/res/translations/mixxx_zh.ts index 09a656b13952..8fad9e39aa11 100644 --- a/res/translations/mixxx_zh.ts +++ b/res/translations/mixxx_zh.ts @@ -103,8 +103,7 @@ Add to Auto DJ Queue (bottom) - 將添加到自動 DJ 佇列 (底部) - + 添加到自自动 DJ 队列 (底部) @@ -3655,32 +3654,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. 在問題解決之前,此控制器映射提供的功能將被禁用。 - + You can ignore this error for this session but you may experience erratic behavior. 您可以在此會話中忽略此錯誤,但可能會出現不穩定的行為。 - + Try to recover by resetting your controller. 嘗試恢復通過重置您的控制器。 - + Controller Mapping Error 控制器映射錯誤 - + The mapping for your controller "%1" is not working properly. 控制器“%1”的映射工作不正常。 - + The script code needs to be fixed. 脚本代码需要被修复。 @@ -5664,6 +5663,16 @@ Apply settings and continue? Multi-Sampling 多重采样 + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6272,62 +6281,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. 所選的外觀的最小大小大於您的螢幕解析度。 - + Allow screensaver to run 允许屏幕保护程序运行 - + Prevent screensaver from running 防止屏幕保护程序运行 - + Prevent screensaver while playing 播放时防止屏幕保护程序运行 - + Disabled 禁用 - + 2x MSAA 2倍采样抗锯齿 - + 4x MSAA 4倍采样抗锯齿 - + 8x MSAA 8倍采样抗锯齿 - + 16x MSAA 16倍采样抗锯齿 - + This skin does not support color schemes 這種皮膚不支援色彩配置 - + Information 資訊 - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. 在新的区域设置、缩放或多重采样设置生效之前,必须重新启动Mixxx。 @@ -7264,7 +7273,7 @@ and allows you to pitch adjust them for harmonic mixing. All settings take effect on next track load. Currently loaded tracks are not affected. For an explanation of these settings, see the %1 - + 所有设置都会在下一次轨道加载时生效。当前加载的轨迹不受影响。有关这些设置的说明,请参阅 %1 @@ -9625,57 +9634,57 @@ Shown when VuMeter can not be displayed. Please keep 支持。 - + activate 启用 - + toggle 切換 - + right - + left - + right small 右小 - + left small 左小 - + up 向上 - + down - + up small 小了 - + down small 下小 - + Shortcut 快捷方式 @@ -9754,23 +9763,23 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist 輸入播放清單 - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) 播放清單檔 (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? 覆盖文件? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10041,131 +10050,131 @@ Do you really want to overwrite it? 继续 - + Load track to Deck %1 加载音轨到碟机 %1 - + Deck %1 is currently playing a track. 甲板 %1 當前播放的曲目。 - + Are you sure you want to load a new track? 你確定你想要載入一個新的軌道? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. 尚未选择用于唱盘控制的输入设备。 请在声音硬件的首选项中选择一个输入设备。 - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. 有是沒有為此直通控制項選擇的輸入的設備。 請先在聲音硬體首選項中選擇一種輸入的設備。 - + There is no input device selected for this microphone. Do you want to select an input device? 没有为此麦克风选择输入设备。是否要选择输入设备? - + There is no input device selected for this auxiliary. Do you want to select an input device? 没有为此辅助设备选择输入设备。是否要选择输入设备? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file 皮膚檔中的錯誤 - + The selected skin cannot be loaded. 無法載入所選的外觀。 - + OpenGL Direct Rendering OpenGL 直接繪製 - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. 您的计算机上未启用直接渲染。<br><br>这意味着波形显示将非常<br><b>速度慢,并且可能会严重占用您的 CPU</b>.要么更新您的<br>配置以启用直接渲染或禁用<br>波形将通过选择 Mixxx 首选项显示在<br>“空”作为“界面”部分的波形显示。 - - - + + + Confirm Exit 确认退出 - + A deck is currently playing. Exit Mixxx? 有唱机正在播放。确定退出 Mixxx 吗? - + A sampler is currently playing. Exit Mixxx? 當前現正播放採樣器。退出 Mixxx 嗎? - + The preferences window is still open. 首選項視窗是仍處於打開狀態。 - + Discard any changes and exit Mixxx? 放棄所有更改並退出 Mixxx? @@ -10187,7 +10196,7 @@ Do you want to select an input device? - + Playlists 播放列表 @@ -10228,27 +10237,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. 播放列表是有序的曲目列表,允许您规划 DJ 集。 - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. 可能需要跳过您准备好的播放列表中的一些曲目或添加一些不同的曲目,以保持观众的活力。 - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. 一些DJ在他们表演之前创建播放列表,但其他人更倾向于即兴表演。 - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. 在在线 Dj 集中使用播放列表时,请时刻注意您的听众对所选音乐的反应。 - + Create New Playlist 創建新的播放清單 @@ -11907,7 +11916,7 @@ Hint: compensates "chipmunk" or "growling" voices 应用于音频信号的放大量。在更高的级别上,音频将更加分散。 - + Passthrough 直通 @@ -12234,7 +12243,7 @@ may introduce a 'pumping' effect and/or distortion. Hot cues - + Hot cues @@ -15182,7 +15191,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Beatloop - + 节拍循环 @@ -15666,323 +15675,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist 創建與新的播放清單 - + Create a new playlist 新建播放列表 - + Ctrl+n Ctrl n + - + Create New &Crate 創建新 & 箱 - + Create a new crate 創建一個新的箱子 - + Ctrl+Shift+N Ctrl + Shift + N - - + + &View 查看(&V) - + Auto-hide menu bar 自动隐藏菜单栏 - + Auto-hide the main menu bar when it's not used. 不使用主菜单栏时自动隐藏主菜单栏。 - + May not be supported on all skins. 并非所有皮肤均支持。 - + Show Skin Settings Menu 皮肤设置菜单 - + Show the Skin Settings Menu of the currently selected Skin 显示当前选定皮肤的皮肤设置菜单 - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl 1 + - + Show Microphone Section 顯示麥克風節 - + Show the microphone section of the Mixxx interface. 顯示 Mixxx 介面的麥克風部分。 - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section 显示唱盘控制界面 - + Show the vinyl control section of the Mixxx interface. 顯示 Mixxx 介面的乙烯基控制部分。 - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl 3 + - + Show Preview Deck 顯示預覽甲板 - + Show the preview deck in the Mixxx interface. 在 Mixxx 内显示显示预览用碟机。 - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art 显示封面 - + Show cover art in the Mixxx interface. 在 Mixxx 介面中顯示封面藝術。 - + Ctrl+6 Menubar|View|Show Cover Art Ctrl 6 + - + Maximize Library 最大化音乐库 - + Maximize the track library to take up all the available screen space. 最大化音樂庫以佔用所有可用的螢幕空間。 - + Space Menubar|View|Maximize Library 空間 - + &Full Screen 全屏(&F) - + Display Mixxx using the full screen 使用全螢幕的顯示 Mixxx - + &Options 选项(&O) - + &Vinyl Control 與乙烯基控制 - + Use timecoded vinyls on external turntables to control Mixxx 对外部转盘使用时间编码的唱盘控制,以便控制 Mixxx - + Enable Vinyl Control &%1 啟用乙烯控制 & %1 - + &Record Mix 與記錄組合 - + Record your mix to a file 記錄你組合到一個檔 - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting 啟用即時 & 廣播 - + Stream your mixes to a shoutcast or icecast server 将混音通过流输出到 shoutcast 或 icecast 服务器 - + Ctrl+L 按 Ctrl + L - + Enable &Keyboard Shortcuts 启用键快捷键(&K) - + Toggles keyboard shortcuts on or off 键盘快捷键开关 - + Ctrl+` 按 Ctrl +' - + &Preferences 首选项(&P) - + Change Mixxx settings (e.g. playback, MIDI, controls) 改變 Mixxx 的設置 (例如播放 MIDI,控制項) - + &Developer 與開發人員 - + &Reload Skin 重载皮肤(&R) - + Reload the skin 重新載入皮膚 - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools 开发者工具(&T) - + Opens the developer tools dialog 打開開發人員工具對話方塊 - + Ctrl+Shift+T Ctrl + Shift + T - + Stats: &Experiment Bucket 統計: & 實驗鬥 - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. 使實驗模式。收集統計實驗跟蹤存儲桶中。 - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket 統計: & 基地鬥 - + Enables base mode. Collects stats in the BASE tracking bucket. 启用基础模式。统计数据将会收集到基础跟踪桶中。 - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled 调试器已启用(&U) - + Enables the debugger during skin parsing 在皮膚分析過程中啟用調試器 - + Ctrl+Shift+D 按 Ctrl + Shift + D - + &Help 與説明 - + Show Keywheel menu title 显示 Keywheel @@ -15999,74 +16038,74 @@ This can not be undone! 将库导出为 Engine DJ 格式 - + Show keywheel tooltip text 显示 Keywheel - + F12 Menubar|View|Show Keywheel F12 - + &Community Support 社区帮助(&C) - + Get help with Mixxx 獲得 Mixxx 的説明 - + &User Manual 與使用者手冊 - + Read the Mixxx user manual. 閱讀 Mixxx 使用者手冊。 - + &Keyboard Shortcuts 键盘快捷键(&K) - + Speed up your workflow with keyboard shortcuts. 加快您的工作流使用鍵盤快速鍵。 - + &Settings directory &设置目录 - + Open the Mixxx user settings directory. 打开 Mixxx 用户设置目录。 - + &Translate This Application 翻译这个程序(&T) - + Help translate this application into your language. 幫忙翻譯成您的語言此應用程式。 - + &About 关于(&A) - + About the application 有關應用程式 @@ -16101,25 +16140,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - 清除輸入 - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun 搜索 - + Clear input 清除輸入 @@ -16130,93 +16157,87 @@ This can not be undone! 搜索... - + Clear the search bar input field 清除搜索栏输入字段 - - Enter a string to search for - 輸入要搜索的字串 + + Return + 返回 - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - 使用运算符,如 bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - 有关更多信息,请参阅 Mixxx Library >用户手册 + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - 快捷方式 + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - 焦點 + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl + 倒退鍵 + + Additional Shortcuts When Focused: + - Shortcuts - 快捷方式 + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - 返回 + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - 在键入时搜索超时之前触发搜索,或在之后跳转到轨道视图 + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl + 空格键 - + Toggle search history Shows/hides the search history entries 切换搜索历史记录 - + Delete or Backspace 删除或退格 - - Delete query from history - 从历史记录中删除查询 - - - - Esc - 按 esc 鍵 + + in search history + - - Exit search - Exit search bar and leave focus - 退出搜索 + + Delete query from history + 从历史记录中删除查询 @@ -17025,52 +17046,52 @@ This can not be undone! mixxx::CoreServices - + fonts 字体 - + database 数据库 - + effects 效果 - + audio interface 音频接口 - + decks 甲板 - + library 媒体库 - + Choose music library directory 選擇音樂庫目錄 - + controllers 控制器 - + Cannot open database 無法打開資料庫 - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_zh_CN.qm b/res/translations/mixxx_zh_CN.qm index 94600db8c5d8..0731f04add53 100644 Binary files a/res/translations/mixxx_zh_CN.qm and b/res/translations/mixxx_zh_CN.qm differ diff --git a/res/translations/mixxx_zh_CN.ts b/res/translations/mixxx_zh_CN.ts index 73c911abf3f6..9776ca30a6a8 100644 --- a/res/translations/mixxx_zh_CN.ts +++ b/res/translations/mixxx_zh_CN.ts @@ -3649,32 +3649,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. 在問題解決之前,此控制器映射提供的功能將被禁用。 - + You can ignore this error for this session but you may experience erratic behavior. 您可以在此會話中忽略此錯誤,但可能會出現不穩定的行為。 - + Try to recover by resetting your controller. 请尝试重置控制器来恢复原先的状态。 - + Controller Mapping Error 控制器映射錯誤 - + The mapping for your controller "%1" is not working properly. 控制器“%1”的映射工作不正常。 - + The script code needs to be fixed. 脚本代码需要被修复。 @@ -5658,6 +5658,16 @@ Apply settings and continue? Multi-Sampling 多重采样 + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6266,62 +6276,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. 您的屏幕分辨率太低,无法容纳所选皮肤的最小尺寸。 - + Allow screensaver to run 允许屏幕保护程序运行 - + Prevent screensaver from running 防止屏幕保护程序运行 - + Prevent screensaver while playing 播放时防止屏幕保护程序运行 - + Disabled 禁用 - + 2x MSAA 2倍采样抗锯齿 - + 4x MSAA 4倍采样抗锯齿 - + 8x MSAA 8倍采样抗锯齿 - + 16x MSAA 16倍采样抗锯齿 - + This skin does not support color schemes 该皮肤不支持色彩方案 - + Information 信息 - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. 在新的区域设置、缩放或多重采样设置生效之前,必须重新启动Mixxx。 @@ -7258,7 +7268,7 @@ and allows you to pitch adjust them for harmonic mixing. All settings take effect on next track load. Currently loaded tracks are not affected. For an explanation of these settings, see the %1 - + 所有设置都会在下一次轨道加载时生效。当前加载的轨迹不受影响。有关这些设置的说明,请参阅 %1 @@ -9618,57 +9628,57 @@ Shown when VuMeter can not be displayed. Please keep 支持。 - + activate 启用 - + toggle 切换 - + right - + left - + right small 右小 - + left small 左小 - + up - + down - + up small 上小 - + down small 下小 - + Shortcut 快捷键 @@ -9747,22 +9757,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist 导入播放列表 - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) 播放列表文件(*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? 覆盖文件? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10033,131 +10043,131 @@ Do you really want to overwrite it? 继续 - + Load track to Deck %1 加载音轨到碟机 %1 - + Deck %1 is currently playing a track. 碟机 %1 当前正在播放。 - + Are you sure you want to load a new track? 您确定要加载新音轨吗? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. 尚未选择用于唱盘控制的输入设备。 请在声音硬件的首选项中选择一个输入设备。 - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. 尚未选择用于唱盘控制的输入设备。 请在声音硬件的首选项中选择一个输入设备。 - + There is no input device selected for this microphone. Do you want to select an input device? 没有为此麦克风选择输入设备。是否要选择输入设备? - + There is no input device selected for this auxiliary. Do you want to select an input device? 没有为此辅助设备选择输入设备。是否要选择输入设备? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file 皮肤文件错误 - + The selected skin cannot be loaded. 无法加载所选皮肤。 - + OpenGL Direct Rendering OpenGL 直接渲染 - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. 您的计算机上未启用直接渲染。<br><br>这意味着波形显示将非常<br><b>速度慢,并且可能会严重占用您的 CPU</b>.要么更新您的<br>配置以启用直接渲染或禁用<br>波形将通过选择 Mixxx 首选项显示在<br>“空”作为“界面”部分的波形显示。 - - - + + + Confirm Exit 确认退出 - + A deck is currently playing. Exit Mixxx? 有唱机正在播放。确定退出 Mixxx 吗? - + A sampler is currently playing. Exit Mixxx? 有采样器正在播放。确定退出 Mixxx 吗? - + The preferences window is still open. 首选项窗口尚未关闭。 - + Discard any changes and exit Mixxx? 取消所作更改并退出 Mixxx 吗? @@ -10179,7 +10189,7 @@ Do you want to select an input device? - + Playlists 播放列表 @@ -10220,27 +10230,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. 播放列表是有序的曲目列表,允许您规划 DJ 集。 - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. 可能需要跳过您准备好的播放列表中的一些曲目或添加一些不同的曲目,以保持观众的活力。 - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. 一些DJ在他们表演之前创建播放列表,但其他人更倾向于即兴表演。 - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. 在在线 Dj 集中使用播放列表时,请时刻注意您的听众对所选音乐的反应。 - + Create New Playlist 新建播放列表 @@ -11880,7 +11890,7 @@ Hint: compensates "chipmunk" or "growling" voices Soft Clipping - + Soft Clipping @@ -11899,7 +11909,7 @@ Hint: compensates "chipmunk" or "growling" voices 应用于音频信号的放大量。在更高的级别上,音频将更加分散。 - + Passthrough 直通 @@ -12226,7 +12236,7 @@ may introduce a 'pumping' effect and/or distortion. Hot cues - + Hot cues @@ -15658,323 +15668,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist 新建播放列表(&N) - + Create a new playlist 新建播放列表 - + Ctrl+n Ctrl+N - + Create New &Crate 新建分类列表(&N) - + Create a new crate 创建新分类列表 - + Ctrl+Shift+N Ctrl+Shift+N - - + + &View 查看(&V) - + Auto-hide menu bar 自动隐藏菜单栏 - + Auto-hide the main menu bar when it's not used. 不使用主菜单栏时自动隐藏主菜单栏。 - + May not be supported on all skins. 并非所有皮肤均支持。 - + Show Skin Settings Menu 皮肤设置菜单 - + Show the Skin Settings Menu of the currently selected Skin 显示当前选定皮肤的皮肤设置菜单 - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl+1 - + Show Microphone Section 显示麦克风界面 - + Show the microphone section of the Mixxx interface. 在 Mixxx 内显示麦克风界面。 - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section 显示唱盘控制界面 - + Show the vinyl control section of the Mixxx interface. 在 Mixxx 内显示唱盘控制界面。 - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl+3 - + Show Preview Deck 显示预览用碟机 - + Show the preview deck in the Mixxx interface. 在 Mixxx 内显示显示预览用碟机。 - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art 显示封面 - + Show cover art in the Mixxx interface. 在 Mixxx 内显示封面。 - + Ctrl+6 Menubar|View|Show Cover Art Ctrl+6 - + Maximize Library 最大化音乐库 - + Maximize the track library to take up all the available screen space. 最大化音乐库以占用所有可用的屏幕空间。 - + Space Menubar|View|Maximize Library 空格键 - + &Full Screen 全屏(&F) - + Display Mixxx using the full screen 全屏模式显示 Mixxx - + &Options 选项(&O) - + &Vinyl Control 唱盘控制(&V) - + Use timecoded vinyls on external turntables to control Mixxx 对外部转盘使用时间编码的唱盘控制,以便控制 Mixxx - + Enable Vinyl Control &%1 启用Vinyl控制 &%1 - + &Record Mix 录制混音(&M) - + Record your mix to a file 将混音输出到文件 - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting 启用在线广播(&B) - + Stream your mixes to a shoutcast or icecast server 将混音通过流输出到 shoutcast 或 icecast 服务器 - + Ctrl+L Ctrl+L - + Enable &Keyboard Shortcuts 启用键快捷键(&K) - + Toggles keyboard shortcuts on or off 键盘快捷键开关 - + Ctrl+` Ctrl+` - + &Preferences 首选项(&P) - + Change Mixxx settings (e.g. playback, MIDI, controls) 改变 Mixxx 设定(回放、MIDI、控制器等) - + &Developer 开发者(&D) - + &Reload Skin 重载皮肤(&R) - + Reload the skin 重新载入皮肤 - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools 开发者工具(&T) - + Opens the developer tools dialog 打开开发者工具对话框 - + Ctrl+Shift+T Ctrl+Shift+T - + Stats: &Experiment Bucket 统计:实验桶(&E) - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. 启用实验模式。统计数据将会收集到实验跟踪桶中。 - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket 统计:基础桶(&B) - + Enables base mode. Collects stats in the BASE tracking bucket. 启用基础模式。统计数据将会收集到基础跟踪桶中。 - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled 调试器已启用(&U) - + Enables the debugger during skin parsing 在解析皮肤时启用调试器 - + Ctrl+Shift+D Ctrl+Shift+D - + &Help 帮助(&H) - + Show Keywheel menu title 显示 Keywheel @@ -15991,74 +16031,74 @@ This can not be undone! 将库导出为 Engine DJ 格式 - + Show keywheel tooltip text 显示 Keywheel - + F12 Menubar|View|Show Keywheel F12 - + &Community Support 社区帮助(&C) - + Get help with Mixxx 获取 Mixxx 帮助 - + &User Manual 用户手册(&U) - + Read the Mixxx user manual. 阅读Mixxx用户手册。 - + &Keyboard Shortcuts 键盘快捷键(&K) - + Speed up your workflow with keyboard shortcuts. 使用键盘快捷键提高你的效率。 - + &Settings directory &设置目录 - + Open the Mixxx user settings directory. 打开 Mixxx 用户设置目录。 - + &Translate This Application 翻译这个程序(&T) - + Help translate this application into your language. 帮助翻译此程序。 - + &About 关于(&A) - + About the application 关于此应用程序 @@ -16093,25 +16133,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - 清除输入 - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun 搜索 - + Clear input 清除输入 @@ -16122,93 +16150,87 @@ This can not be undone! 查找... - + Clear the search bar input field 清除搜索栏输入字段 - - Enter a string to search for - 输入要搜索的字符串 + + Return + 返回 - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - 使用运算符,如 bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - 有关更多信息,请参阅 Mixxx Library >用户手册 + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - 快捷键 + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - 焦点 + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl+退格键 + + Additional Shortcuts When Focused: + - Shortcuts - 快捷方式 + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - 返回 + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - 在键入时搜索超时之前触发搜索,或在之后跳转到轨道视图 + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl + 空格键 - + Toggle search history Shows/hides the search history entries 切换搜索历史记录 - + Delete or Backspace 删除或退格 - - Delete query from history - 从历史记录中删除查询 - - - - Esc - Esc + + in search history + - - Exit search - Exit search bar and leave focus - 退出查找 + + Delete query from history + 从历史记录中删除查询 @@ -17015,52 +17037,52 @@ This can not be undone! mixxx::CoreServices - + fonts 字体 - + database 数据库 - + effects 效果 - + audio interface 音频接口 - + decks 甲板 - + library 媒体库 - + Choose music library directory 选择音乐库目录 - + controllers 控制器 - + Cannot open database 无法打开数据库 - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_zh_HK.qm b/res/translations/mixxx_zh_HK.qm index b1499a30962f..028d3619dd3f 100644 Binary files a/res/translations/mixxx_zh_HK.qm and b/res/translations/mixxx_zh_HK.qm differ diff --git a/res/translations/mixxx_zh_HK.ts b/res/translations/mixxx_zh_HK.ts index f1b21ebadb57..3e6afe942954 100644 --- a/res/translations/mixxx_zh_HK.ts +++ b/res/translations/mixxx_zh_HK.ts @@ -3662,32 +3662,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. 在問題解決之前,此控制器映射提供的功能將被禁用。 - + You can ignore this error for this session but you may experience erratic behavior. 您可以在此會話中忽略此錯誤,但可能會出現不穩定的行為。 - + Try to recover by resetting your controller. 嘗試恢復通過重置您的控制器。 - + Controller Mapping Error 控制器映射錯誤 - + The mapping for your controller "%1" is not working properly. 控制器“%1”的映射工作不正常。 - + The script code needs to be fixed. 脚本代码需要被修复。 @@ -5675,6 +5675,16 @@ Apply settings and continue? Multi-Sampling 多重采样 + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6283,62 +6293,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. 所選的外觀的最小大小大於您的螢幕解析度。 - + Allow screensaver to run 允许屏幕保护程序运行 - + Prevent screensaver from running 防止屏幕保护程序运行 - + Prevent screensaver while playing 播放时防止屏幕保护程序运行 - + Disabled 禁用 - + 2x MSAA 2倍采样抗锯齿 - + 4x MSAA 4倍采样抗锯齿 - + 8x MSAA 8倍采样抗锯齿 - + 16x MSAA 16倍采样抗锯齿 - + This skin does not support color schemes 這種皮膚不支援色彩配置 - + Information 資訊 - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. 在新的区域设置、缩放或多重采样设置生效之前,必须重新启动Mixxx。 @@ -7276,7 +7286,7 @@ and allows you to pitch adjust them for harmonic mixing. All settings take effect on next track load. Currently loaded tracks are not affected. For an explanation of these settings, see the %1 - + 所有设置都会在下一次轨道加载时生效。当前加载的轨迹不受影响。有关这些设置的说明,请参阅 %1 @@ -9637,57 +9647,57 @@ Shown when VuMeter can not be displayed. Please keep 支持。 - + activate 启用 - + toggle 切換 - + right - + left - + right small 右小 - + left small 左小 - + up 向上 - + down - + up small 小了 - + down small 下小 - + Shortcut 快捷方式 @@ -9766,23 +9776,23 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist 輸入播放清單 - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) 播放清單檔 (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? 覆盖文件? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10053,131 +10063,131 @@ Do you really want to overwrite it? 继续 - + Load track to Deck %1 加载音轨到碟机 %1 - + Deck %1 is currently playing a track. 甲板 %1 當前播放的曲目。 - + Are you sure you want to load a new track? 你確定你想要載入一個新的軌道? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. 尚未选择用于唱盘控制的输入设备。 请在声音硬件的首选项中选择一个输入设备。 - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. 有是沒有為此直通控制項選擇的輸入的設備。 請先在聲音硬體首選項中選擇一種輸入的設備。 - + There is no input device selected for this microphone. Do you want to select an input device? 没有为此麦克风选择输入设备。是否要选择输入设备? - + There is no input device selected for this auxiliary. Do you want to select an input device? 没有为此辅助设备选择输入设备。是否要选择输入设备? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file 皮膚檔中的錯誤 - + The selected skin cannot be loaded. 無法載入所選的外觀。 - + OpenGL Direct Rendering OpenGL 直接繪製 - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. 您的计算机上未启用直接渲染。<br><br>这意味着波形显示将非常<br><b>速度慢,并且可能会严重占用您的 CPU</b>.要么更新您的<br>配置以启用直接渲染或禁用<br>波形将通过选择 Mixxx 首选项显示在<br>“空”作为“界面”部分的波形显示。 - - - + + + Confirm Exit 确认退出 - + A deck is currently playing. Exit Mixxx? 有唱机正在播放。确定退出 Mixxx 吗? - + A sampler is currently playing. Exit Mixxx? 當前現正播放採樣器。退出 Mixxx 嗎? - + The preferences window is still open. 首選項視窗是仍處於打開狀態。 - + Discard any changes and exit Mixxx? 放棄所有更改並退出 Mixxx? @@ -10200,7 +10210,7 @@ Do you want to select an input device? - + Playlists 播放列表 @@ -10241,27 +10251,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. 播放列表是有序的曲目列表,允许您规划 DJ 集。 - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. 可能需要跳过您准备好的播放列表中的一些曲目或添加一些不同的曲目,以保持观众的活力。 - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. 一些DJ在他们表演之前创建播放列表,但其他人更倾向于即兴表演。 - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. 在在线 Dj 集中使用播放列表时,请时刻注意您的听众对所选音乐的反应。 - + Create New Playlist 建立新的播放清單 @@ -11901,7 +11911,7 @@ Hint: compensates "chipmunk" or "growling" voices Soft Clipping - + Soft Clipping @@ -11920,7 +11930,7 @@ Hint: compensates "chipmunk" or "growling" voices 应用于音频信号的放大量。在更高的级别上,音频将更加分散。 - + Passthrough 直通 @@ -12247,7 +12257,7 @@ may introduce a 'pumping' effect and/or distortion. Hot cues - + Hot cues @@ -15197,7 +15207,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Beatloop - + 节拍循环 @@ -15681,323 +15691,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist 創建與新的播放清單 - + Create a new playlist 新建播放列表 - + Ctrl+n Ctrl n + - + Create New &Crate 創建新 & 箱 - + Create a new crate 創建一個新的箱子 - + Ctrl+Shift+N Ctrl + Shift + N - - + + &View 查看(&V) - + Auto-hide menu bar 自动隐藏菜单栏 - + Auto-hide the main menu bar when it's not used. 不使用主菜单栏时自动隐藏主菜单栏。 - + May not be supported on all skins. 并非所有皮肤均支持。 - + Show Skin Settings Menu 皮肤设置菜单 - + Show the Skin Settings Menu of the currently selected Skin 显示当前选定皮肤的皮肤设置菜单 - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl 1 + - + Show Microphone Section 顯示麥克風節 - + Show the microphone section of the Mixxx interface. 顯示 Mixxx 介面的麥克風部分。 - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl+2 - + Show Vinyl Control Section 显示唱盘控制界面 - + Show the vinyl control section of the Mixxx interface. 顯示 Mixxx 介面的乙烯基控制部分。 - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl 3 + - + Show Preview Deck 顯示預覽甲板 - + Show the preview deck in the Mixxx interface. 在 Mixxx 内显示显示预览用碟机。 - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl+4 - + Show Cover Art 显示封面 - + Show cover art in the Mixxx interface. 在 Mixxx 介面中顯示封面藝術。 - + Ctrl+6 Menubar|View|Show Cover Art Ctrl 6 + - + Maximize Library 最大化音乐库 - + Maximize the track library to take up all the available screen space. 最大化音樂庫以佔用所有可用的螢幕空間。 - + Space Menubar|View|Maximize Library 空間 - + &Full Screen 全屏(&F) - + Display Mixxx using the full screen 使用全螢幕的顯示 Mixxx - + &Options 选项(&O) - + &Vinyl Control 與乙烯基控制 - + Use timecoded vinyls on external turntables to control Mixxx 对外部转盘使用时间编码的唱盘控制,以便控制 Mixxx - + Enable Vinyl Control &%1 啟用乙烯控制 & %1 - + &Record Mix 與記錄組合 - + Record your mix to a file 記錄你組合到一個檔 - + Ctrl+R Ctrl+R - + Enable Live &Broadcasting 啟用即時 & 廣播 - + Stream your mixes to a shoutcast or icecast server 将混音通过流输出到 shoutcast 或 icecast 服务器 - + Ctrl+L 按 Ctrl + L - + Enable &Keyboard Shortcuts 启用键快捷键(&K) - + Toggles keyboard shortcuts on or off 键盘快捷键开关 - + Ctrl+` 按 Ctrl +' - + &Preferences 首选项(&P) - + Change Mixxx settings (e.g. playback, MIDI, controls) 改變 Mixxx 的設置 (例如播放 MIDI,控制項) - + &Developer 與開發人員 - + &Reload Skin 重载皮肤(&R) - + Reload the skin 重新載入皮膚 - + Ctrl+Shift+R Ctrl+Shift+R - + Developer &Tools 开发者工具(&T) - + Opens the developer tools dialog 打開開發人員工具對話方塊 - + Ctrl+Shift+T Ctrl + Shift + T - + Stats: &Experiment Bucket 統計: & 實驗鬥 - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. 使實驗模式。收集統計實驗跟蹤存儲桶中。 - + Ctrl+Shift+E Ctrl+Shift+E - + Stats: &Base Bucket 統計: & 基地鬥 - + Enables base mode. Collects stats in the BASE tracking bucket. 启用基础模式。统计数据将会收集到基础跟踪桶中。 - + Ctrl+Shift+B Ctrl+Shift+B - + Deb&ugger Enabled 调试器已启用(&U) - + Enables the debugger during skin parsing 在皮膚分析過程中啟用調試器 - + Ctrl+Shift+D 按 Ctrl + Shift + D - + &Help 與説明 - + Show Keywheel menu title 显示 Keywheel @@ -16014,74 +16054,74 @@ This can not be undone! 将库导出为 Engine DJ 格式 - + Show keywheel tooltip text 显示 Keywheel - + F12 Menubar|View|Show Keywheel F12 - + &Community Support 社区帮助(&C) - + Get help with Mixxx 獲得 Mixxx 的説明 - + &User Manual 與使用者手冊 - + Read the Mixxx user manual. 閱讀 Mixxx 使用者手冊。 - + &Keyboard Shortcuts 键盘快捷键(&K) - + Speed up your workflow with keyboard shortcuts. 加快您的工作流使用鍵盤快速鍵。 - + &Settings directory &设置目录 - + Open the Mixxx user settings directory. 打开 Mixxx 用户设置目录。 - + &Translate This Application 翻译这个程序(&T) - + Help translate this application into your language. 幫忙翻譯成您的語言此應用程式。 - + &About 关于(&A) - + About the application 有關應用程式 @@ -16116,25 +16156,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - 清除輸入 - - - - Ctrl+F - Search|Focus - Ctrl+F - - - + Search noun 搜索 - + Clear input 清除輸入 @@ -16145,93 +16173,87 @@ This can not be undone! 搜索... - + Clear the search bar input field 清除搜索栏输入字段 - - Enter a string to search for - 輸入要搜索的字串 + + Return + 返回 - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - 使用运算符,如 bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - 有关更多信息,请参阅 Mixxx Library >用户手册 + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - 快捷方式 + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl+F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - 焦點 + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl + 倒退鍵 + + Additional Shortcuts When Focused: + - Shortcuts - 快捷方式 + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - 返回 + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - 在键入时搜索超时之前触发搜索,或在之后跳转到轨道视图 + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl + 空格键 - + Toggle search history Shows/hides the search history entries 切换搜索历史记录 - + Delete or Backspace 删除或退格 - - Delete query from history - 从历史记录中删除查询 - - - - Esc - 按 esc 鍵 + + in search history + - - Exit search - Exit search bar and leave focus - 退出搜索 + + Delete query from history + 从历史记录中删除查询 @@ -17044,52 +17066,52 @@ This can not be undone! mixxx::CoreServices - + fonts 字体 - + database 数据库 - + effects 效果 - + audio interface 音频接口 - + decks 甲板 - + library 媒体库 - + Choose music library directory 選擇音樂庫目錄 - + controllers 控制器 - + Cannot open database 無法打開資料庫 - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/mixxx_zh_TW.qm b/res/translations/mixxx_zh_TW.qm index 203c483ba499..a7c22a302364 100644 Binary files a/res/translations/mixxx_zh_TW.qm and b/res/translations/mixxx_zh_TW.qm differ diff --git a/res/translations/mixxx_zh_TW.ts b/res/translations/mixxx_zh_TW.ts index b68acdd2c98b..1e26e430fae3 100644 --- a/res/translations/mixxx_zh_TW.ts +++ b/res/translations/mixxx_zh_TW.ts @@ -3649,32 +3649,32 @@ trace - Above + Profiling messages ControllerScriptEngineBase - + The functionality provided by this controller mapping will be disabled until the issue has been resolved. 在問題解決之前,此控制器映射提供的功能將被禁用。 - + You can ignore this error for this session but you may experience erratic behavior. 您可以在此會話中忽略此錯誤,但可能會出現不穩定的行為。 - + Try to recover by resetting your controller. 嘗試恢復通過重置您的控制器。 - + Controller Mapping Error 控制器映射錯誤 - + The mapping for your controller "%1" is not working properly. 控制器“%1”的映射工作不正常。 - + The script code needs to be fixed. 腳本代碼需要修理。 @@ -5658,6 +5658,16 @@ Apply settings and continue? Multi-Sampling 多重采样 + + + Force 3D acceleration + + + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + Start in full-screen mode @@ -6266,62 +6276,62 @@ You can always drag-and-drop tracks on screen to clone a deck. DlgPrefInterface - + The minimum size of the selected skin is bigger than your screen resolution. 所選的外觀的最小大小大於您的螢幕解析度。 - + Allow screensaver to run 允許螢幕保護程式執行 - + Prevent screensaver from running 在程式運行中防止螢幕保護程式 - + Prevent screensaver while playing 當播放歌曲時禁止螢幕保護程式 - + Disabled 禁用 - + 2x MSAA 2倍采样抗锯齿 - + 4x MSAA 4倍采样抗锯齿 - + 8x MSAA 8倍采样抗锯齿 - + 16x MSAA 16倍采样抗锯齿 - + This skin does not support color schemes 這種皮膚不支援色彩配置 - + Information 資訊 - + Mixxx must be restarted before the new locale, scaling or multi-sampling settings will take effect. 在新的区域设置、缩放或多重采样设置生效之前,必须重新启动Mixxx。 @@ -7251,7 +7261,7 @@ and allows you to pitch adjust them for harmonic mixing. All settings take effect on next track load. Currently loaded tracks are not affected. For an explanation of these settings, see the %1 - + 所有设置都会在下一次轨道加载时生效。当前加载的轨迹不受影响。有关这些设置的说明,请参阅 %1 @@ -9611,57 +9621,57 @@ Shown when VuMeter can not be displayed. Please keep 沒有 OpenGL 支援。 - + activate 啟動 - + toggle 切換 - + right 權利 - + left - + right small 右小 - + left small 左小 - + up 向上 - + down 向下 - + up small 小了 - + down small 下小 - + Shortcut 快捷方式 @@ -9740,22 +9750,22 @@ Aborting the operation to avoid library inconsistencies LibraryFeature - + Import Playlist 匯入播放清單 - + Playlist Files (*.m3u *.m3u8 *.pls *.csv) 播放清單檔 (*.m3u *.m3u8 *.pls *.csv) - + Overwrite File? 覆盖文件? - + A playlist file with the name "%1" already exists. The default "m3u" extension was added because none was specified. @@ -10025,131 +10035,131 @@ Do you really want to overwrite it? 繼續 - + Load track to Deck %1 負荷跟蹤到甲板 %1 - + Deck %1 is currently playing a track. 甲板 %1 當前播放的曲目。 - + Are you sure you want to load a new track? 你確定你想要載入一個新的軌道? - + There is no input device selected for this vinyl control. Please select an input device in the sound hardware preferences first. 有是沒有為此乙烯基控制項選擇的輸入的設備。 請先在聲音硬體首選項中選擇一種輸入的設備。 - + There is no input device selected for this passthrough control. Please select an input device in the sound hardware preferences first. 有是沒有為此直通控制項選擇的輸入的設備。 請先在聲音硬體首選項中選擇一種輸入的設備。 - + There is no input device selected for this microphone. Do you want to select an input device? 没有为此麦克风选择输入设备。是否要选择输入设备? - + There is no input device selected for this auxiliary. Do you want to select an input device? 没有为此辅助设备选择输入设备。是否要选择输入设备? - + Scan took %1 - + No changes detected. - - + + %1 tracks in total - + %1 new tracks found - + %1 moved tracks detected - + %1 tracks are missing (%2 total) - + %1 tracks have been rediscovered - + Library scan finished - + Error in skin file 皮膚檔中的錯誤 - + The selected skin cannot be loaded. 無法載入所選的外觀。 - + OpenGL Direct Rendering OpenGL 直接繪製 - + Direct rendering is not enabled on your machine.<br><br>This means that the waveform displays will be very<br><b>slow and may tax your CPU heavily</b>. Either update your<br>configuration to enable direct rendering, or disable<br>the waveform displays in the Mixxx preferences by selecting<br>"Empty" as the waveform display in the 'Interface' section. 您的计算机上未启用直接渲染。<br><br>这意味着波形显示将非常<br><b>速度慢,并且可能会严重占用您的 CPU</b>.要么更新您的<br>配置以启用直接渲染或禁用<br>波形将通过选择 Mixxx 首选项显示在<br>“空”作为“界面”部分的波形显示。 - - - + + + Confirm Exit 確認退出 - + A deck is currently playing. Exit Mixxx? 當前現正播放的甲板。退出 Mixxx 嗎? - + A sampler is currently playing. Exit Mixxx? 當前現正播放採樣器。退出 Mixxx 嗎? - + The preferences window is still open. 首選項視窗是仍處於打開狀態。 - + Discard any changes and exit Mixxx? 放棄所有更改並退出 Mixxx? @@ -10171,7 +10181,7 @@ Do you want to select an input device? - + Playlists 播放清單 @@ -10212,27 +10222,27 @@ Do you want to select an input device? - + Playlists are ordered lists of tracks that allow you to plan your DJ sets. 播放列表是有序的曲目列表,允许您规划 DJ 集。 - + It may be necessary to skip some tracks in your prepared playlist or add some different tracks in order to maintain the energy of your audience. 可能需要跳过您准备好的播放列表中的一些曲目或添加一些不同的曲目,以保持观众的活力。 - + Some DJs construct playlists before they perform live, but others prefer to build them on-the-fly. 一些 Dj 構建播放清單之前他們表演,但其他人則傾向建立他們的蒼蠅。 - + When using a playlist during a live DJ set, remember to always pay close attention to how your audience reacts to the music you've chosen to play. 當在一個活的 DJ 集,使用播放清單記得總是密切關注你的聽眾對音樂的反應您已經選擇玩。 - + Create New Playlist 創建新的播放清單 @@ -11891,7 +11901,7 @@ Hint: compensates "chipmunk" or "growling" voices 应用于音频信号的放大量。在更高的级别上,音频将更加分散。 - + Passthrough 直通 @@ -12218,7 +12228,7 @@ may introduce a 'pumping' effect and/or distortion. Hot cues - + Hot cues @@ -15166,7 +15176,7 @@ Use this to change only the effected (wet) signal with EQ and filter effects. Beatloop - + 节拍循环 @@ -15650,323 +15660,353 @@ This can not be undone! + Search in Current View... + + + + + Search for tracks in the current library view + + + + + Ctrl+f + + + + + Search in Tracks Library... + + + + + Search in the internal track collection under "Tracks" in the library + + + + + Ctrl+Shift+F + + + + Create &New Playlist 創建與新的播放清單 - + Create a new playlist 創建一個新的播放清單 - + Ctrl+n Ctrl n + - + Create New &Crate 創建新 & 箱 - + Create a new crate 創建一個新的箱子 - + Ctrl+Shift+N Ctrl + Shift + N - - + + &View 與視圖 - + Auto-hide menu bar 自动隐藏菜单栏 - + Auto-hide the main menu bar when it's not used. 不使用主菜单栏时自动隐藏主菜单栏。 - + May not be supported on all skins. 在所有的皮膚上可能不支援。 - + Show Skin Settings Menu 皮肤设置菜单 - + Show the Skin Settings Menu of the currently selected Skin 显示当前选定皮肤的皮肤设置菜单 - + Ctrl+1 Menubar|View|Show Skin Settings Ctrl 1 + - + Show Microphone Section 顯示麥克風節 - + Show the microphone section of the Mixxx interface. 顯示 Mixxx 介面的麥克風部分。 - + Ctrl+2 Menubar|View|Show Microphone Section Ctrl 2 + - + Show Vinyl Control Section 顯示乙烯控制節 - + Show the vinyl control section of the Mixxx interface. 顯示 Mixxx 介面的乙烯基控制部分。 - + Ctrl+3 Menubar|View|Show Vinyl Control Section Ctrl 3 + - + Show Preview Deck 顯示預覽甲板 - + Show the preview deck in the Mixxx interface. 在 Mixxx 介面中顯示預覽甲板。 - + Ctrl+4 Menubar|View|Show Preview Deck Ctrl 4 + - + Show Cover Art 顯示封面藝術 - + Show cover art in the Mixxx interface. 在 Mixxx 介面中顯示封面藝術。 - + Ctrl+6 Menubar|View|Show Cover Art Ctrl 6 + - + Maximize Library 最大限度地庫 - + Maximize the track library to take up all the available screen space. 最大化音樂庫以佔用所有可用的螢幕空間。 - + Space Menubar|View|Maximize Library 空間 - + &Full Screen 與全螢幕 - + Display Mixxx using the full screen 使用全螢幕的顯示 Mixxx - + &Options 與選項 - + &Vinyl Control 與乙烯基控制 - + Use timecoded vinyls on external turntables to control Mixxx 在外部轉盤控制 Mixxx 上使用時間乙烯基 - + Enable Vinyl Control &%1 啟用乙烯控制 & %1 - + &Record Mix 與記錄組合 - + Record your mix to a file 記錄你組合到一個檔 - + Ctrl+R Ctrl + R - + Enable Live &Broadcasting 啟用即時 & 廣播 - + Stream your mixes to a shoutcast or icecast server 流到 shoutcast 或 icecast 伺服器你混合 - + Ctrl+L 按 Ctrl + L - + Enable &Keyboard Shortcuts 啟用與鍵盤快速鍵 - + Toggles keyboard shortcuts on or off 切換鍵盤快速鍵打開或關閉 - + Ctrl+` 按 Ctrl +' - + &Preferences 與首選項 - + Change Mixxx settings (e.g. playback, MIDI, controls) 改變 Mixxx 的設置 (例如播放 MIDI,控制項) - + &Developer 與開發人員 - + &Reload Skin & 重新載入皮膚 - + Reload the skin 重新載入皮膚 - + Ctrl+Shift+R Ctrl + Shift + R - + Developer &Tools 開發人員與工具 - + Opens the developer tools dialog 打開開發人員工具對話方塊 - + Ctrl+Shift+T Ctrl + Shift + T - + Stats: &Experiment Bucket 統計: & 實驗鬥 - + Enables experiment mode. Collects stats in the EXPERIMENT tracking bucket. 使實驗模式。收集統計實驗跟蹤存儲桶中。 - + Ctrl+Shift+E Ctrl + Shift + E - + Stats: &Base Bucket 統計: & 基地鬥 - + Enables base mode. Collects stats in the BASE tracking bucket. 啟用的基礎模式。收集統計基礎跟蹤桶內。 - + Ctrl+Shift+B Ctrl + Shift + B - + Deb&ugger Enabled Deb & ugger 啟用 - + Enables the debugger during skin parsing 在皮膚分析過程中啟用調試器 - + Ctrl+Shift+D 按 Ctrl + Shift + D - + &Help 與説明 - + Show Keywheel menu title 显示 Keywheel @@ -15983,74 +16023,74 @@ This can not be undone! 将库导出为 Engine DJ 格式 - + Show keywheel tooltip text 显示 Keywheel - + F12 Menubar|View|Show Keywheel F12 - + &Community Support 與社區的支援 - + Get help with Mixxx 獲得 Mixxx 的説明 - + &User Manual 與使用者手冊 - + Read the Mixxx user manual. 閱讀 Mixxx 使用者手冊。 - + &Keyboard Shortcuts 與鍵盤快速鍵 - + Speed up your workflow with keyboard shortcuts. 加快您的工作流使用鍵盤快速鍵。 - + &Settings directory &设置目录 - + Open the Mixxx user settings directory. 打开 Mixxx 用户设置目录。 - + &Translate This Application & 翻譯此應用程式 - + Help translate this application into your language. 幫忙翻譯成您的語言此應用程式。 - + &About & 約 - + About the application 有關應用程式 @@ -16085,25 +16125,13 @@ This can not be undone! WSearchLineEdit - - Clear input - Clear the search bar input field - 清除輸入 - - - - Ctrl+F - Search|Focus - Ctrl + F - - - + Search noun 搜索 - + Clear input 清除輸入 @@ -16114,93 +16142,87 @@ This can not be undone! 搜索... - + Clear the search bar input field 清除搜索栏输入字段 - - Enter a string to search for - 輸入要搜索的字串 + + Return + 返回 - - Use operators like bpm:115-128, artist:BooFar, -year:1990 - 使用运算符,如 bpm:115-128, artist:BooFar, -year:1990 + + Enter a string to search for. + - - For more information see User Manual > Mixxx Library - 有关更多信息,请参阅 Mixxx Library >用户手册 + + Use operators like bpm:115-128, artist:BooFar, -year:1990. + - Shortcut - 快捷方式 + See User Manual > Mixxx Library for more information. + - - Ctrl+F - Ctrl + F + + Focus/Select All (Search in current view) + Give search bar input focus + - - Focus - Give search bar input focus - 焦點 + + Focus/Select All (Search in 'Tracks' library view) + - - - Ctrl+Backspace - Ctrl + 倒退鍵 + + Additional Shortcuts When Focused: + - Shortcuts - 快捷方式 + Trigger search before search-as-you-type timeout or focus tracks view afterwards + - Return - 返回 + Esc or Ctrl+Return + - Trigger search before search-as-you-type timeout orjump to tracks view afterwards - 在键入时搜索超时之前触发搜索,或在之后跳转到轨道视图 + Immediately trigger search and focus tracks view + Exit search bar and leave focus + - + Ctrl+Space Ctrl + 空格键 - + Toggle search history Shows/hides the search history entries 切换搜索历史记录 - + Delete or Backspace 删除或退格 - - Delete query from history - 从历史记录中删除查询 - - - - Esc - 按 esc 鍵 + + in search history + - - Exit search - Exit search bar and leave focus - 退出搜索 + + Delete query from history + 从历史记录中删除查询 @@ -17007,52 +17029,52 @@ This can not be undone! mixxx::CoreServices - + fonts 字体 - + database 数据库 - + effects 效果 - + audio interface 音频接口 - + decks 甲板 - + library 媒体库 - + Choose music library directory 選擇音樂庫目錄 - + controllers 控制器 - + Cannot open database 無法打開資料庫 - + Unable to establish a database connection. Mixxx requires QT with SQLite support. Please read the Qt SQL driver documentation for information on how to build it. diff --git a/res/translations/source_copy_allow_list.tsv b/res/translations/source_copy_allow_list.tsv index 9d717120198f..a8062b987ba5 100644 --- a/res/translations/source_copy_allow_list.tsv +++ b/res/translations/source_copy_allow_list.tsv @@ -170,7 +170,7 @@ ca,de,el,en_CA,en_GB,es*,fr_CA,fr_CI,hu,it,nl,pt*,sl,sv Res * FPS: %0/%1 * \u276f * \u276e -de,hu,bs,cs,da,fr,hr,id,it,lb,ms,nb,nl,nn,oc,pl,ro,sk,sl,sv,vi,sq_AL Album +de,hu,bs,cs,da,fr,hr,id,it,lb,ms,nb,nl,nn,oc,pl,ro,sk,sl,sv,vi,sq_AL,pt* Album de,da,fr,lb,ms,nl,oc,sv Genre de,it,pl Bitrate: es,es_419,es_AR,es_CO,es_MX,ca,es_ES Error: @@ -183,26 +183,26 @@ hu,ca,de,et,fr,nb,pl,ro,sv,tr Port hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh* A hu,pt,pt_PT,et,fi,nl,pl,pt_BR,ro,zh* Bb hu,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh* B -hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh* C -hu,fi,nl,pl,pt_BR,ro,sl,zh* Db +hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh*,pt C +hu,fi,nl,pl,pt_BR,ro,sl,zh*,pt Db hu,pt,pt_PT,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh* D hu,et,fi,nl,pl,pt_BR,ro,sl,zh* Eb -hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh* E -hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh* F +hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh*,pt E +hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh*,pt F hu,et,fi,nl,pl,pt_BR,ro,sl,zh_CN F# hu,cs,de,et,fi,fr,nl,pl,pt_BR,ro,ru,sl,vi,zh* G -hu,et,fi,nl,pl,pt_BR,ro,sl,zh* Ab +hu,et,fi,nl,pl,pt_BR,ro,sl,zh*,pt Ab hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK Am -hu,et,fi,nl,pl,pt_BR,ro,zh* Bbm -hu,et,fi,nl,pl,pt_BR,ro,zh* Bm +hu,et,fi,nl,pl,pt_BR,ro,zh*,pt Bbm +hu,et,fi,nl,pl,pt_BR,ro,zh*,pt Bm hu,et,fi,nl,pl,pt_BR,ro,sl,vi,zh,zh_CN,zh_HK Cm -hu,et,fi,nl,pl,pt_BR,ro,sl,zh_CN C#m -hu,et,fi,nl,pl,pt_BR,ro,sl,zh* Dm -hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK Ebm -hu,de,et,fi,nl,pl,pt_BR,ro,sl,vi,zh* Em +hu,et,fi,nl,pl,pt_BR,ro,sl,zh_CN,pt C#m +hu,et,fi,nl,pl,pt_BR,ro,sl,zh*,pt Dm +hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK,pt Ebm +hu,de,et,fi,nl,pl,pt_BR,ro,sl,vi,zh*,pt Em hu,et,fi,nl,pl,pt_BR,ro,sl,zh_CN Fm -hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK F#m -hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK Gm +hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK,pt F#m +hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK,pt Gm hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK G#m * 10Hz * 10ms @@ -213,8 +213,8 @@ hu,et,fi,nl,pl,pt_BR,ro,sl,zh,zh_CN,zh_HK G#m hu,bs,de,eo,eu,fr,hr,it,lb,lt,lv,nb,nl,pt_PT,ro,sk,sv,vi Min hu,bs,de,eu,fr,hr,it,lb,nl,ro,sk,sv,vi Max pt,pt_BR,ca,de,fr,it,nl,pl,pt_PT,sl,sv Tremolo -pt_BR,da,de,id,it,nl,pt,ro Mixer -pt_BR,de,it,nl,pt_PT Reloop +pt_BR,da,de,id,it,nl,pt*,ro Mixer +pt_BR,de,it,nl,pt* Reloop de,es*,nl,pt_BR,vi Hotcues de,es* Hotcues %1-%2 nl,pl Hotcue index @@ -275,12 +275,12 @@ nl Intro start nl Type: nl Equalizer Plugin nl,sv,vi Reverb -nl Encoder +nl,it Encoder it,nl,pl,ro,vi Downsampling it,nl 32 bits float -nl Queen Mary Key Detector +nl,it Queen Mary Key Detector it Pitch -it,nl Hot cues +it,nl,zh* Hot cues it &File it,nl database sn Key @@ -329,8 +329,8 @@ fr Question fr Microphone fr %1 minutes fr,it Bypass Fr. -fr Gain 1 -fr Gain 2 +fr,sv Gain 1 +fr,sv Gain 2 fr,it,ru,es* Queen Mary University London fr,nl Distortion fr,de Ratio (:1) @@ -351,16 +351,16 @@ it Fine it Deck Equalizers it,nl,es* Lead-In it Frame rate -it,nl,pt_BR Caching +it,nl,pt* Caching it,nl skin -it decks +it,es* decks de Timer (Fallback) de,fr,it,nl,pl,sv,es* Outro de,nl Loops el,pt_BR Tool tips el,es*,eu,id,it,lb,nb,pt*,tr Scratching es*,fr,it,nl,pt*,sq_AL &Ok -es*,pt_BR Switch +es*,pt_BR,sv Switch es*,pt* Manual et,hr,it,tr,vi BPM Tap fr,it,nl,zh* pt @@ -371,7 +371,7 @@ nl Audio Buffer nl,sv OpenGL Direct Rendering nl,zh* Hard Clip nl,zh* Hard -sv (status text) +sv,de (status text) da Input de,nl Moog Filter de,fr,it,nl,pt*,ro,sv Phaser @@ -384,7 +384,7 @@ de,it,nl,es* Drive de,fr,it,pl Passthrough de,it,nl Glitch de,it Beatgrids -de,nl,pt_BR,pt_PT,ro,vi,pl Sampler +de,nl,pt_BR,pt_PT,ro,vi Sampler de,es*,it,nl,pt_BR,ro,vi Hotcue de Loop-In Marker de Loop-Out Marker @@ -441,20 +441,27 @@ nl,de Release (ms) it Tempo Tap zh* Soft Clipping zh* Hard Clipping -es* No -nl,sq_AL,es*,pl VID: +es,es_419,es_AR,es_CO,es_ES,es_MX No +nl,sq_AL,es,es_419,es_AR,es_CO,es_ES,es_MX VID: nl Product ID -nl,sq_AL,es*,pl PID: +nl,sq_AL,es,es_419,es_AR,es_CO,es_ES,es_MX PID: nl Lossy nl Lossless nl Top -nl OpenGL Status +nl,de OpenGL Status nl Stem Label nl Stem Mute sq_AL Artist + Album -sq_AL Off +sq_AL,it Off de Attack (ms) de Attack +fr,it Ctrl+f +fr Ctrl+Shift+F +it Mixxx %1.%2 Development Team it Okay +sv Decay +sv Kill Low +sv Kill Mid +sv Kill High +tr Mount vi Samplerate -fr Stem diff --git a/src/controllers/bulk/bulksupported.h b/src/controllers/bulk/bulksupported.h index a7bf6c916d60..f10673e87ba4 100644 --- a/src/controllers/bulk/bulksupported.h +++ b/src/controllers/bulk/bulksupported.h @@ -28,4 +28,5 @@ constexpr static bulk_support_lookup bulk_supported[] = { {{0x06f8, 0xb107}, {0x83, 0x03, std::nullopt}}, // Hercules Mk4 {{0x06f8, 0xb100}, {0x86, 0x06, std::nullopt}}, // Hercules Mk2 {{0x06f8, 0xb120}, {0x82, 0x03, std::nullopt}}, // Hercules MP3 LE / Glow + {{0x17cc, 0x1720}, {0x00, 0x03, 0x04}}, // Traktor NI S4 Mk3 }; diff --git a/src/controllers/controllerhidreporttabsmanager.cpp b/src/controllers/controllerhidreporttabsmanager.cpp new file mode 100644 index 000000000000..3194e5bd211b --- /dev/null +++ b/src/controllers/controllerhidreporttabsmanager.cpp @@ -0,0 +1,547 @@ +#include "controllerhidreporttabsmanager.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "controllers/hid/hidusagetables.h" +#include "moc_controllerhidreporttabsmanager.cpp" +#include "util/parented_ptr.h" + +namespace { +QTableWidgetItem* createReadOnlyItem(const QString& text, bool rightAlign = false) { + auto* item = new QTableWidgetItem(text); + item->setFlags(item->flags() & ~Qt::ItemIsEditable); + if (rightAlign) { + item->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); + } + return item; +} + +QTableWidgetItem* createValueItem( + hid::reportDescriptor::HidReportType reportType, + int minVal, + int maxVal) { + auto* item = new QTableWidgetItem; + QFont font = item->font(); + font.setBold(true); + item->setFont(font); + if (reportType == hid::reportDescriptor::HidReportType::Input) { + item->setFlags(item->flags() & ~Qt::ItemIsEditable); + } else { + item->setFlags(item->flags() | Qt::ItemIsEditable); + item->setData(Qt::UserRole, QVariant::fromValue(QPair(minVal, maxVal))); + } + return item; +} +} // anonymous namespace + +ControllerHidReportTabsManager::ControllerHidReportTabsManager( + QTabWidget* pParentTabWidget, HidController* pHidController) + : m_pParentControllerTab(pParentTabWidget), + m_pHidController(pHidController) { +} + +void ControllerHidReportTabsManager::createReportTypeTabs() { + VERIFY_OR_DEBUG_ASSERT(m_pParentControllerTab) { + return; + } + auto reportTypeTabs = make_parented(m_pParentControllerTab); + + QMetaEnum metaEnum = QMetaEnum::fromType(); + + for (int reportTypeIdx = 0; reportTypeIdx < metaEnum.keyCount(); ++reportTypeIdx) { + auto reportType = static_cast( + metaEnum.value(reportTypeIdx)); + auto reportTypeTab = make_parented(reportTypeTabs.get()); + createHidReportTab(reportTypeTab.get(), reportType); + if (reportTypeTab->count() > 0) { + QString tabName = QStringLiteral("%1 Reports") + .arg(metaEnum.key(reportTypeIdx)); + m_pParentControllerTab->addTab(std::move(reportTypeTab), tabName); + } + } +} + +void ControllerHidReportTabsManager::createHidReportTab(QTabWidget* pParentReportTypeTab, + hid::reportDescriptor::HidReportType reportType) { + VERIFY_OR_DEBUG_ASSERT(m_pHidController) { + return; + } + auto reportDescriptor = m_pHidController->getReportDescriptor(); + if (!reportDescriptor) { + return; + } + + QMetaEnum metaEnum = QMetaEnum::fromType(); + + for (const auto& reportInfo : reportDescriptor->getListOfReports()) { + auto [index, type, reportId] = reportInfo; + if (type == reportType) { + // Report is a fixed HID term and shouldn't be translated + QString tabName = QStringLiteral("%1 Report 0x%2") + .arg(metaEnum.valueToKey(static_cast( + reportType)), + QString::number(reportId, 16) + .rightJustified(2, '0') + .toUpper()); + + auto pTabWidget = make_parented(pParentReportTypeTab); + auto pLayout = make_parented(pTabWidget); + auto* pTopWidgetRow = new QHBoxLayout(); + + // Create buttons + auto pReadButton = make_parented(tr("Read"), pTabWidget); + auto pSendButton = make_parented(tr("Send"), pTabWidget); + + // Adjust visibility/enable state based on the report type + if (reportType == hid::reportDescriptor::HidReportType::Input) { + pSendButton->hide(); + pReadButton->hide(); + } else if (reportType == hid::reportDescriptor::HidReportType::Output) { + pReadButton->hide(); + } + + pTopWidgetRow->addWidget(pReadButton); + pTopWidgetRow->addWidget(pSendButton); + pLayout->addLayout(pTopWidgetRow); + + auto pTable = make_parented(pTabWidget); + pLayout->addWidget(pTable); + + auto reportOpt = reportDescriptor->getReport(reportType, reportId); + if (reportOpt) { + const auto& report = reportOpt->get(); + // Show payload size + auto pSizeLabel = make_parented(pTabWidget); + pSizeLabel->setText( + QStringLiteral("%1: %2 %3") + .arg(tr("Payload Size")) + .arg(report.getReportSize()) + .arg(tr("bytes"))); + pTopWidgetRow->insertWidget(0, pSizeLabel); + + populateHidReportTable(pTable, report, reportType); + } + + if (reportType != hid::reportDescriptor::HidReportType::Output) { + connect(pReadButton, + &QPushButton::clicked, + this, + [this, pTable = pTable.get(), reportId, reportType]() { + slotReadReport(pTable, reportId, reportType); + }); + // Read once on tab creation + slotReadReport(pTable, reportId, reportType); + } + if (reportType != hid::reportDescriptor::HidReportType::Input) { + connect(pSendButton, + &QPushButton::clicked, + this, + [this, pTable = pTable.get(), reportId, reportType]() { + slotSendReport(pTable, reportId, reportType); + }); + } + + pParentReportTypeTab->addTab(pTabWidget, tabName); + + if (reportType == hid::reportDescriptor::HidReportType::Input) { + // Store the pTable pointer associated with the reportId + m_reportIdToTableMap[reportId] = pTable; + // Ensure that the table entry gets deleted when the table is destroyed + connect(pTable, &QObject::destroyed, this, [this, reportId]() { + m_reportIdToTableMap.erase(reportId); + }); + } + + // Connect the signal for the reportId + HidIoThread* hidIoThread = m_pHidController->getHidIoThread(); + if (hidIoThread) { + connect(hidIoThread, + &HidIoThread::reportReceived, + this, + &ControllerHidReportTabsManager::slotProcessInputReport); + } + } + } +} + +void ControllerHidReportTabsManager::updateTableWithReportData( + QTableWidget* pTable, + const QByteArray& reportData) { + // Temporarily disable updates to speed up processing + pTable->setUpdatesEnabled(false); + + // Process the report data and update the table + for (int row = 0; row < pTable->rowCount(); ++row) { + auto* pItem = pTable->item(row, 5); // Value column is at index 5 + if (pItem) { + // Retrieve custom data from the first cell + QVariant customData = pTable->item(row, 0)->data(Qt::UserRole + 1); + if (customData.isValid()) { + const auto* pControl = customData.value(); + VERIFY_OR_DEBUG_ASSERT(pControl) { + continue; + } + // Use the custom data as needed + int64_t controlValue = + hid::reportDescriptor::extractLogicalValue( + reportData, *pControl); + pItem->setText(QString::number(controlValue)); + } + } + } + + pTable->setUpdatesEnabled(true); +} + +void ControllerHidReportTabsManager::slotProcessInputReport( + quint8 reportId, const QByteArray& data) { + VERIFY_OR_DEBUG_ASSERT(m_pHidController) { + return; + } + // Find the table associated with the reportId + auto it = m_reportIdToTableMap.find(reportId); + if (it == m_reportIdToTableMap.end()) { + qWarning() << "No table found for reportId" << reportId; + return; + } + QTableWidget* pTable = it->second; + + VERIFY_OR_DEBUG_ASSERT(pTable) { + return; + } + + auto reportDescriptor = m_pHidController->getReportDescriptor(); + if (!reportDescriptor) { + return; + } + + auto reportOpt = reportDescriptor->getReport( + hid::reportDescriptor::HidReportType::Input, reportId); + if (reportOpt) { + updateTableWithReportData(pTable, data); + } +} + +void ControllerHidReportTabsManager::slotReadReport(QTableWidget* pTable, + quint8 reportId, + hid::reportDescriptor::HidReportType reportType) { + VERIFY_OR_DEBUG_ASSERT(m_pHidController) { + return; + } + if (!m_pHidController->isOpen()) { + qWarning() << "HID controller is not open."; + return; + } + + HidControllerJSProxy* pJsProxy = + static_cast(m_pHidController->jsProxy()); + VERIFY_OR_DEBUG_ASSERT(pJsProxy) { + return; + } + + QByteArray reportData; + if (reportType == hid::reportDescriptor::HidReportType::Input) { + reportData = pJsProxy->getInputReport(reportId); + } else if (reportType == hid::reportDescriptor::HidReportType::Feature) { + reportData = pJsProxy->getFeatureReport(reportId); + } else { + return; + } + + auto reportDescriptor = m_pHidController->getReportDescriptor(); + if (!reportDescriptor) { + return; + } + + auto reportOpt = reportDescriptor->getReport(reportType, reportId); + VERIFY_OR_DEBUG_ASSERT(reportOpt) { + return; + } + const auto& report = reportOpt->get(); + if (reportData.size() < report.getReportSize()) { + qWarning() << "Failed to get report. Read only " << reportData.size() + << " instead of expected " << report.getReportSize() + << " bytes."; + return; + } + + updateTableWithReportData(pTable, reportData); +} + +void ControllerHidReportTabsManager::slotSendReport(QTableWidget* pTable, + quint8 reportId, + hid::reportDescriptor::HidReportType reportType) { + VERIFY_OR_DEBUG_ASSERT(m_pHidController) { + return; + } + if (!m_pHidController->isOpen()) { + qWarning() << "HID controller is not open."; + return; + } + + HidControllerJSProxy* pJsProxy = + static_cast(m_pHidController->jsProxy()); + VERIFY_OR_DEBUG_ASSERT(pJsProxy) { + return; + } + + auto reportDescriptor = m_pHidController->getReportDescriptor(); + if (!reportDescriptor) { + return; + } + + auto reportOpt = reportDescriptor->getReport(reportType, reportId); + VERIFY_OR_DEBUG_ASSERT(reportOpt) { + return; + } + const auto& report = reportOpt->get(); + + // Create a QByteArray of the size of the report + QByteArray reportData(report.getReportSize(), 0); + + // Iterate through each row in the table + for (int row = 0; row < pTable->rowCount(); ++row) { + auto* pItem = pTable->item(row, 5); // Value column is at index 5 + if (pItem) { + // Retrieve custom data from the first cell + QVariant customData = pTable->item(row, 0)->data(Qt::UserRole + 1); + if (customData.isValid()) { + const auto* pControl = customData.value(); + VERIFY_OR_DEBUG_ASSERT(pControl) { + continue; + } + bool success = hid::reportDescriptor::applyLogicalValue( + reportData, *pControl, pItem->text().toLongLong()); + if (!success) { + qWarning() << "Failed to set control value for row" << row; + continue; + } + } + } + } + + // Send the reportData + if (reportType == hid::reportDescriptor::HidReportType::Feature) { + pJsProxy->sendFeatureReport(reportId, reportData); + } else if (reportType == hid::reportDescriptor::HidReportType::Output) { + pJsProxy->sendOutputReport(reportId, reportData); + } +} + +void ControllerHidReportTabsManager::populateHidReportTable( + QTableWidget* pTable, + const hid::reportDescriptor::Report& pReport, + hid::reportDescriptor::HidReportType reportType) { + // Temporarily disable updates to speed up populating + pTable->setUpdatesEnabled(false); + + // Reserve rows up-front + const auto& controls = pReport.getControls(); + pTable->setRowCount(static_cast(controls.size())); + + // Set the delegate once if needed + if (reportType != hid::reportDescriptor::HidReportType::Input) { + pTable->setItemDelegateForColumn(5, make_parented(pTable)); + } + + bool showVolatileColumn = (reportType == hid::reportDescriptor::HidReportType::Feature || + reportType == hid::reportDescriptor::HidReportType::Output); + + // Set headers + QStringList headers = {tr("Byte Position"), + tr("Bit Position"), + tr("Bit Size"), + tr("Logical Min"), + tr("Logical Max"), + tr("Value"), + tr("Physical Min"), + tr("Physical Max"), + tr("Unit Scaling"), + tr("Unit"), + tr("Abs/Rel"), + tr("Wrap"), + tr("Linear"), + tr("Preferred"), + tr("Null")}; + if (showVolatileColumn) { + headers << tr("Volatile"); + } + headers << tr("Usage Page") << tr("Usage"); + + pTable->setColumnCount(headers.size()); + pTable->setHorizontalHeaderLabels(headers); + pTable->verticalHeader()->setVisible(false); + + int row = 0; + for (const auto& control : controls) { + // Column 0 - Byte Position + QTableWidgetItem* pBytePositionItem = createReadOnlyItem( + QStringLiteral("0x%1").arg( + QString::number(control.m_bytePosition, 16) + .rightJustified(2, '0') + .toUpper()), + true); + pTable->setItem(row, 0, pBytePositionItem); + // Store custom data for the row in the first cell + pBytePositionItem->setData(Qt::UserRole + 1, + QVariant::fromValue(&control)); + + // Column 1 - Bit Position + pTable->setItem(row, 1, createReadOnlyItem(QString::number(control.m_bitPosition), true)); + // Column 2 - Bit Size + pTable->setItem(row, 2, createReadOnlyItem(QString::number(control.m_bitSize), true)); + // Column 3 - Logical Min + pTable->setItem(row, + 3, + createReadOnlyItem( + QString::number(control.m_logicalMinimum), true)); + // Column 4 - Logical Max + pTable->setItem(row, + 4, + createReadOnlyItem( + QString::number(control.m_logicalMaximum), true)); + // Column 5 - Value + pTable->setItem(row, + 5, + createValueItem(reportType, control.m_logicalMinimum, control.m_logicalMaximum)); + // Column 6 - Physical Min + pTable->setItem(row, + 6, + createReadOnlyItem( + QString::number(control.m_physicalMinimum), true)); + // Column 7 - Physical Max + pTable->setItem(row, + 7, + createReadOnlyItem( + QString::number(control.m_physicalMaximum), true)); + // Column 8 - Unit Scaling + pTable->setItem(row, + 8, + createReadOnlyItem(control.m_unitExponent != 0 + ? QStringLiteral("10^%1").arg( + control.m_unitExponent) + : QString(), + true)); + // Column 9 - Unit + pTable->setItem(row, + 9, + createReadOnlyItem(hid::reportDescriptor::getScaledUnitString( + control.m_unit))); + // Column 10 - Abs/Rel + pTable->setItem(row, + 10, + createReadOnlyItem(control.m_flags.absolute_relative + ? tr("Relative") + : tr("Absolute"))); + // Column 11 - Wrap + pTable->setItem(row, + 11, + createReadOnlyItem(control.m_flags.no_wrap_wrap + ? tr("Wrap") + : tr("No Wrap"))); + // Column 12 - Linear + pTable->setItem(row, + 12, + createReadOnlyItem(control.m_flags.linear_non_linear + ? tr("Non Linear") + : tr("Linear"))); + // Column 13 - Preferred + pTable->setItem(row, + 13, + createReadOnlyItem(control.m_flags.preferred_no_preferred + ? tr("No Preferred") + : tr("Preferred"))); + // Column 14 - Null + pTable->setItem(row, + 14, + createReadOnlyItem(control.m_flags.no_null_null + ? tr("Null") + : tr("No Null"))); + + // Volatile column (if present) + int volatileIndex = (showVolatileColumn ? 15 : -1); + if (volatileIndex != -1) { + pTable->setItem(row, + volatileIndex, + createReadOnlyItem(control.m_flags.non_volatile_volatile + ? tr("Volatile") + : tr("Non Volatile"))); + } + + // Usage Page / Usage + int usagePageIdx = showVolatileColumn ? 16 : 15; + int usageDescIdx = showVolatileColumn ? 17 : 16; + uint16_t usagePage = static_cast((control.m_usage & 0xFFFF0000) >> 16); + uint16_t usage = static_cast(control.m_usage & 0x0000FFFF); + + pTable->setItem(row, + usagePageIdx, + createReadOnlyItem( + mixxx::hid::HidUsageTables::getUsagePageDescription( + usagePage))); + pTable->setItem(row, + usageDescIdx, + createReadOnlyItem( + mixxx::hid::HidUsageTables::getUsageDescription( + usagePage, usage))); + + ++row; + } + + // Resize columns to contents once, store width and set column width fixed for performance + for (int colIdx = 0; colIdx < pTable->columnCount(); ++colIdx) { + pTable->horizontalHeader()->setSectionResizeMode(colIdx, QHeaderView::ResizeToContents); + } + QVector columnWidths; + columnWidths.reserve(pTable->columnCount()); + for (int colIdx = 0; colIdx < pTable->columnCount(); ++colIdx) { + columnWidths.push_back(pTable->columnWidth(colIdx)); + } + // Set the width of the "Value" column (5) to fit 11 digits (int32 minimum in decimal) + // This is the only column in the table with dynamic content, therefore we need to + // set the width with enough reserved space. + QFontMetrics metrics(pTable->font()); + int width = metrics.horizontalAdvance(QStringLiteral("0").repeated(11)); + columnWidths[5] = width; // The column "Value" is at index 5 + for (int colIdx = 0; colIdx < pTable->columnCount(); ++colIdx) { + pTable->horizontalHeader()->setSectionResizeMode(colIdx, QHeaderView::Fixed); + pTable->setColumnWidth(colIdx, columnWidths[colIdx]); + } + + pTable->setUpdatesEnabled(true); +} + +QWidget* ValueItemDelegate::createEditor(QWidget* pParent, + const QStyleOptionViewItem&, + const QModelIndex& index) const { + // Create a line edit restricted by (logical min, logical max) + auto dataRange = index.data(Qt::UserRole).value>(); + auto pEditor = make_parented(pParent); + pEditor->setValidator(make_parented(dataRange.first, dataRange.second, pEditor)); + return pEditor; +} + +void ValueItemDelegate::setModelData(QWidget* pEditor, + QAbstractItemModel* pModel, + const QModelIndex& index) const { + auto* pLineEdit = qobject_cast(pEditor); + if (!pLineEdit) { + return; + } + + // Confirm the text is an integer within the expected range + bool ok = false; + const int value = pLineEdit->text().toInt(&ok); + if (ok) { + auto dataRange = index.data(Qt::UserRole).value>(); + if (value >= dataRange.first && value <= dataRange.second) { + pModel->setData(index, value, Qt::EditRole); + } + } +} diff --git a/src/controllers/controllerhidreporttabsmanager.h b/src/controllers/controllerhidreporttabsmanager.h new file mode 100644 index 000000000000..434276bb3a6e --- /dev/null +++ b/src/controllers/controllerhidreporttabsmanager.h @@ -0,0 +1,54 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include "controllers/hid/hidcontroller.h" +#include "controllers/hid/hidreportdescriptor.h" + +class ControllerHidReportTabsManager : public QObject { + Q_OBJECT + + public: + ControllerHidReportTabsManager(QTabWidget* pParentTabWidget, HidController* pHidController); + + void createReportTypeTabs(); + void createHidReportTab(QTabWidget* pParentTab, + hid::reportDescriptor::HidReportType reportType); + void slotSendReport(QTableWidget* pTable, + quint8 reportId, + hid::reportDescriptor::HidReportType reportType); + void populateHidReportTable(QTableWidget* pTable, + const hid::reportDescriptor::Report& report, + hid::reportDescriptor::HidReportType reportType); + + private slots: + void slotReadReport(QTableWidget* pTable, + quint8 reportId, + hid::reportDescriptor::HidReportType reportType); + + public slots: + void slotProcessInputReport(quint8 reportId, const QByteArray& reportData); + + private: + void updateTableWithReportData(QTableWidget* pTable, const QByteArray& reportData); + QPointer m_pParentControllerTab; + QPointer m_pHidController; + std::unordered_map> m_reportIdToTableMap; +}; + +class ValueItemDelegate : public QStyledItemDelegate { + public: + using QStyledItemDelegate::QStyledItemDelegate; + + QWidget* createEditor(QWidget* pParent, + const QStyleOptionViewItem& option, + const QModelIndex& index) const override; + + void setModelData(QWidget* pEditor, + QAbstractItemModel* pModel, + const QModelIndex& index) const override; +}; diff --git a/src/controllers/dlgprefcontroller.cpp b/src/controllers/dlgprefcontroller.cpp index e17cb938c494..1854faef4611 100644 --- a/src/controllers/dlgprefcontroller.cpp +++ b/src/controllers/dlgprefcontroller.cpp @@ -90,7 +90,15 @@ DlgPrefController::DlgPrefController( m_inputMappingsTabIndex(-1), m_outputMappingsTabIndex(-1), m_settingsTabIndex(-1), - m_screensTabIndex(-1) { + m_screensTabIndex(-1) +#ifdef __HID__ + , + m_hidReportTabsManager(nullptr) { + qRegisterMetaType(); +#else +{ +#endif + m_ui.setupUi(this); // Create text color for the file and wiki links createLinkColor(); @@ -182,7 +190,7 @@ DlgPrefController::DlgPrefController( #ifdef __HID__ // Display HID UsagePage and Usage if the controller is an HidController - if (auto* hidController = dynamic_cast(m_pController)) { + if (auto* hidController = qobject_cast(m_pController)) { m_ui.labelHidUsagePageValue->setText(QStringLiteral("%1 (%2)") .arg(formatHex(hidController->getUsagePage()), hidController->getUsagePageDescription())); @@ -194,6 +202,12 @@ DlgPrefController::DlgPrefController( m_ui.labelHidUsagePageValue->setVisible(true); m_ui.labelHidUsage->setVisible(true); m_ui.labelHidUsageValue->setVisible(true); + + // Create HID report tabs + m_hidReportTabsManager = + std::make_unique( + m_ui.controllerTabs, hidController); + m_hidReportTabsManager->createReportTypeTabs(); } else #endif { @@ -1161,7 +1175,7 @@ void DlgPrefController::showMapping(std::shared_ptr pMa } #endif - // Inputs tab + // MIDI Inputs tab ControllerInputMappingTableModel* pInputModel = new ControllerInputMappingTableModel(this, m_pControlPickerMenu, @@ -1189,7 +1203,7 @@ void DlgPrefController::showMapping(std::shared_ptr pMa // Trigger search when the model was recreated after hitting Apply slotInputControlSearch(); - // Outputs tab + // MIDI Outputs tab ControllerOutputMappingTableModel* pOutputModel = new ControllerOutputMappingTableModel(this, m_pControlPickerMenu, diff --git a/src/controllers/dlgprefcontroller.h b/src/controllers/dlgprefcontroller.h index 518c9ab6ad40..546165356a30 100644 --- a/src/controllers/dlgprefcontroller.h +++ b/src/controllers/dlgprefcontroller.h @@ -2,6 +2,9 @@ #include +#ifdef __HID__ +#include "controllers/controllerhidreporttabsmanager.h" +#endif #include "controllers/controllermappinginfo.h" #include "controllers/midi/midimessage.h" #include "controllers/ui_dlgprefcontrollerdlg.h" @@ -147,4 +150,8 @@ class DlgPrefController : public DlgPreferencePage { int m_settingsTabIndex; // Index of the settings tab int m_screensTabIndex; // Index of the screens tab QHash m_settingsCollapsedStates; + +#ifdef __HID__ + std::unique_ptr m_hidReportTabsManager; +#endif }; diff --git a/src/controllers/hid/hidcontroller.cpp b/src/controllers/hid/hidcontroller.cpp index d699de35cff4..4807a9807297 100644 --- a/src/controllers/hid/hidcontroller.cpp +++ b/src/controllers/hid/hidcontroller.cpp @@ -162,7 +162,22 @@ int HidController::open(const QString& resourcePath) { return -1; } - m_pHidIoThread = std::make_unique(pHidDevice, m_deviceInfo); + // When fetching the report descriptor, from m_deviceInfo or if not read yet from the device + const std::vector& rawReportDescriptor = + m_deviceInfo.fetchRawReportDescriptor(pHidDevice); + + if (!rawReportDescriptor.empty()) { + m_reportDescriptor = + std::make_shared( + rawReportDescriptor); + m_reportDescriptor->parse(); + m_deviceUsesReportIds = m_reportDescriptor->isDeviceWithReportIds(); + } else { + m_reportDescriptor.reset(); + m_deviceUsesReportIds = std::nullopt; + } + + m_pHidIoThread = std::make_unique(pHidDevice, m_deviceInfo, m_deviceUsesReportIds); m_pHidIoThread->setObjectName(QStringLiteral("HidIoThread ") + getName()); connect(m_pHidIoThread.get(), diff --git a/src/controllers/hid/hidcontroller.h b/src/controllers/hid/hidcontroller.h index e8a5f9b79f2d..b8805bf180ac 100644 --- a/src/controllers/hid/hidcontroller.h +++ b/src/controllers/hid/hidcontroller.h @@ -1,8 +1,11 @@ #pragma once +#include + #include "controllers/controller.h" #include "controllers/hid/hiddevice.h" #include "controllers/hid/hidiothread.h" +#include "controllers/hid/hidreportdescriptor.h" #include "controllers/hid/legacyhidcontrollermapping.h" /// HID controller backend @@ -70,6 +73,15 @@ class HidController final : public Controller { QString getUsageDescription() const { return m_deviceInfo.getUsageDescription(); } + + std::shared_ptr getReportDescriptor() const { + return m_reportDescriptor; + } + + HidIoThread* getHidIoThread() const { + return m_pHidIoThread.get(); + } + bool isMappable() const override { if (!m_pMapping) { return false; @@ -87,7 +99,10 @@ class HidController final : public Controller { // 0x0. bool sendBytes(const QByteArray& data) override; - const mixxx::hid::DeviceInfo m_deviceInfo; + mixxx::hid::DeviceInfo m_deviceInfo; + // These optional members are not set before opening the device + std::shared_ptr m_reportDescriptor; + std::optional m_deviceUsesReportIds; std::unique_ptr m_pHidIoThread; std::unique_ptr m_pMapping; diff --git a/src/controllers/hid/hiddevice.cpp b/src/controllers/hid/hiddevice.cpp index 82576f3aee56..276345c24295 100644 --- a/src/controllers/hid/hiddevice.cpp +++ b/src/controllers/hid/hiddevice.cpp @@ -1,7 +1,5 @@ #include "controllers/hid/hiddevice.h" -#include - #include #include "controllers/controllermappinginfo.h" @@ -54,6 +52,30 @@ DeviceInfo::DeviceInfo(const hid_device_info& device_info) m_serialNumberRaw.data(), m_serialNumberRaw.size())) { } +const std::vector& DeviceInfo::fetchRawReportDescriptor(hid_device* pHidDevice) { + if (!pHidDevice) { + static const std::vector emptyDescriptor; + return emptyDescriptor; + } + if (!m_reportDescriptor.empty()) { + // + return m_reportDescriptor; + } + + uint8_t tempReportDescriptor[HID_API_MAX_REPORT_DESCRIPTOR_SIZE]; + int descriptorSize = hid_get_report_descriptor(pHidDevice, + tempReportDescriptor, + HID_API_MAX_REPORT_DESCRIPTOR_SIZE); + if (descriptorSize <= 0) { + static const std::vector emptyDescriptor; + return emptyDescriptor; + } + m_reportDescriptor = std::vector(tempReportDescriptor, + tempReportDescriptor + descriptorSize); + + return m_reportDescriptor; +} + QString DeviceInfo::formatName() const { // We include the last 4 digits of the serial number and the // interface number to allow the user (and Mixxx!) to keep diff --git a/src/controllers/hid/hiddevice.h b/src/controllers/hid/hiddevice.h index a4a4d52c18d2..194be47969bd 100644 --- a/src/controllers/hid/hiddevice.h +++ b/src/controllers/hid/hiddevice.h @@ -1,8 +1,12 @@ #pragma once +#include + #include #include +#include #include +#include #include "controllers/controller.h" #include "controllers/hid/hidusagetables.h" @@ -101,6 +105,11 @@ class DeviceInfo final { return mixxx::hid::HidUsageTables::getUsageDescription(usage_page, usage); } + // We need an opened hid_device here, + // but the lifetime of the data is as long as DeviceInfo exists, + // means the reportDescriptor data remains valid after closing the hid_device + const std::vector& fetchRawReportDescriptor(hid_device* pHidDevice); + bool isValid() const { return !getProductString().isNull() && !getSerialNumber().isNull(); } @@ -131,6 +140,8 @@ class DeviceInfo final { QString m_manufacturerString; QString m_productString; QString m_serialNumber; + + std::vector m_reportDescriptor; }; } // namespace hid diff --git a/src/controllers/hid/hidiothread.cpp b/src/controllers/hid/hidiothread.cpp index 7b0aff2b3aba..f4d05000c745 100644 --- a/src/controllers/hid/hidiothread.cpp +++ b/src/controllers/hid/hidiothread.cpp @@ -27,11 +27,13 @@ QString loggingCategoryPrefix(const QString& deviceName) { } } // namespace -HidIoThread::HidIoThread( - hid_device* pHidDevice, const mixxx::hid::DeviceInfo& deviceInfo) +HidIoThread::HidIoThread(hid_device* pHidDevice, + const mixxx::hid::DeviceInfo& deviceInfo, + std::optional deviceUsesReportIds) : QThread(), m_deviceInfo(deviceInfo), - // Defining RuntimeLoggingCategories locally in this thread improves runtime performance significiantly + // Defining RuntimeLoggingCategories locally in this thread improves + // runtime performance significantly m_logBase(loggingCategoryPrefix(deviceInfo.formatName())), m_logInput(loggingCategoryPrefix(deviceInfo.formatName()) + QStringLiteral(".input")), @@ -41,6 +43,7 @@ HidIoThread::HidIoThread( m_lastPollSize(0), m_pollingBufferIndex(0), m_hidReadErrorLogged(false), + m_deviceUsesReportIds(deviceUsesReportIds), m_globalOutputReportFifo(), m_runLoopSemaphore(1) { // Initializing isn't strictly necessary but is good practice. @@ -151,6 +154,22 @@ void HidIoThread::processInputReport(int bytesRead) { emit receive(QByteArray(reinterpret_cast(pCurrentBuffer), bytesRead), mixxx::Time::elapsed()); + + if (m_deviceUsesReportIds.has_value() && bytesRead > 0) { + if (m_deviceUsesReportIds.value()) { + // Extract the ReportId from the buffer + quint8 reportId = pCurrentBuffer[0]; + emit reportReceived(reportId, + QByteArray( + reinterpret_cast(pCurrentBuffer + 1), + bytesRead - 1)); + } else { + quint8 reportId = 0; + emit reportReceived(reportId, + QByteArray(reinterpret_cast(pCurrentBuffer), + bytesRead)); + } + } } QByteArray HidIoThread::getInputReport(quint8 reportID) { diff --git a/src/controllers/hid/hidiothread.h b/src/controllers/hid/hidiothread.h index f0cece04a144..4520a9d26899 100644 --- a/src/controllers/hid/hidiothread.h +++ b/src/controllers/hid/hidiothread.h @@ -24,7 +24,8 @@ class HidIoThread : public QThread { Q_OBJECT public: HidIoThread(hid_device* pDevice, - const mixxx::hid::DeviceInfo& deviceInfo); + const mixxx::hid::DeviceInfo& deviceInfo, + std::optional deviceUsesReportIds); ~HidIoThread() override; void run() override; @@ -52,6 +53,7 @@ class HidIoThread : public QThread { signals: /// Signals that a HID InputReport received by Interrupt triggered from HID device void receive(const QByteArray& data, mixxx::Duration timestamp); + void reportReceived(quint8 reportId, const QByteArray& data); private: bool sendNextCachedOutputReport(); @@ -81,6 +83,8 @@ class HidIoThread : public QThread { int m_pollingBufferIndex; bool m_hidReadErrorLogged; + std::optional m_deviceUsesReportIds; + /// Must be locked when a operation changes the size of the m_outputReports map, /// or when modify the m_outputReportIterator QMutex m_outputReportMapMutex; diff --git a/src/controllers/hid/hidreportdescriptor.cpp b/src/controllers/hid/hidreportdescriptor.cpp new file mode 100644 index 000000000000..ecd32f1c15e4 --- /dev/null +++ b/src/controllers/hid/hidreportdescriptor.cpp @@ -0,0 +1,546 @@ +#include "controllers/hid/hidreportdescriptor.h" + +#include +#include +#include + +#include "moc_hidreportdescriptor.cpp" +#include "util/assert.h" + +namespace hid::reportDescriptor { + +/// Extracts the value of the specified control in logical scale, +/// from the given report data +int32_t extractLogicalValue(const QByteArray& reportData, const Control& control) { + VERIFY_OR_DEBUG_ASSERT(control.m_bitSize > 0 && control.m_bitSize <= 32) { + return control.m_logicalMinimum; // Safe value in allowed range + } + + uint8_t numberOfBytesToCopy = ((control.m_bitPosition + control.m_bitSize - 1) / 8) + 1; + + int64_t value = 0; + std::memcpy(&value, reportData.data() + control.m_bytePosition, numberOfBytesToCopy); + + value >>= control.m_bitPosition; + + bool isSigned = control.m_logicalMinimum < 0; + // Mask out the bits that are not part of the control + if (isSigned) { + bool isNegative = value & (1ULL << (control.m_bitSize - 1)); + value &= (1ULL << (control.m_bitSize - 1)) - 1; + if (isNegative) { + value = ((1ULL << (control.m_bitSize - 1)) - value) * -1; + } + } else { + value &= (1ULL << control.m_bitSize) - 1; + } + + return value; +} + +/// Sets the bits in the report data of the specified control, +/// to the given value in logical scale +bool applyLogicalValue(QByteArray& reportData, const Control& control, int32_t controlValue) { + VERIFY_OR_DEBUG_ASSERT(control.m_bitSize > 0 && control.m_bitSize <= 32) { + return false; + } + + if (control.m_flags.no_null_null) { + // Nullable controls allow any possible value in the bitrange + if (control.m_logicalMinimum < 0) { + if (controlValue < -std::pow(2, control.m_bitSize - 1) || + controlValue > std::pow(2, control.m_bitSize - 1) - 1) { + return false; + } + } else { + if (controlValue < 0 || controlValue > std::pow(2, control.m_bitSize)) { + return false; + } + } + } else { + // Non-Nullable controls only allow values in the logical range + if (controlValue < control.m_logicalMinimum || controlValue > control.m_logicalMaximum) { + return false; + } + } + + uint64_t mask = ((1ULL << control.m_bitSize) - 1) << control.m_bitPosition; + uint64_t value = (static_cast(controlValue) << control.m_bitPosition) & mask; + + // Check if the value fits into the data (position + bitSize) + uint8_t lastByteToCopy = control.m_bytePosition + + (control.m_bitPosition + control.m_bitSize - 1) / 8; + + if (lastByteToCopy >= reportData.size()) { + return false; + } + + for (uint8_t byteIdx = control.m_bytePosition; byteIdx <= lastByteToCopy; ++byteIdx) { + // Clear the bits that are part of the control + reportData[byteIdx] &= ~static_cast(mask & 0xFF); + // Set the new value + reportData[byteIdx] |= static_cast(value & 0xFF); + mask >>= 8; + value >>= 8; + } + + return true; +} + +QString getScaledUnitString(uint32_t unit) { + struct UnitInfo { + const char* pPhysicalQuantity[5]; + }; + + // This table of physical units is derived from the unit item table + // in chapter 6.2.2.7 of HID class definition 1.11 + // These official unit symbols are not translateable + const UnitInfo unitInfos[] = { + {"", "cm", "rad", "″", "°"}, // length/angle + {"", "g", "g", "slug", "slug"}, // mass + {"", "s", "s", "s", "s"}, // time + {"", "K", "K", "°F", "°F"}, // temperature + {"", "A", "A", "A", "A"}, // current + {"", "cd", "cd", "cd", "cd"} // luminous intensity + }; + + int8_t exponents[] = {0, 1, 2, 3, 4, 5, 6, 7, -8, -7, -6, -5, -4, -3, -2, -1}; + + QString unitString; + + auto appendQuantity = [&](int shift, const UnitInfo& unitInfo) { + int8_t value = (unit >> shift) & 0xF; + if (value != 0) { + if (!unitString.isEmpty()) { + unitString += "*"; + } + unitString += unitInfo.pPhysicalQuantity[(unit & 0xF)]; + if (exponents[value] != 1) { + unitString += "^" + QString::number(exponents[value]); + } + } + }; + + for (int quantityIdx = 0; quantityIdx < 6; ++quantityIdx) { + appendQuantity(4 + quantityIdx * 4, unitInfos[quantityIdx]); + } + + return unitString; +} + +// Class for Controls + +Control::Control(const ControlFlags flags, + const uint32_t usage, + const int32_t logicalMinimum, + const int32_t logicalMaximum, + const int32_t physicalMinimum, + const int32_t physicalMaximum, + const int8_t unitExponent, + const uint32_t unit, + const uint16_t bytePosition, + const uint8_t bitPosition, + const uint8_t bitSize) + : m_flags(flags), + m_usage(usage), + m_logicalMinimum(logicalMinimum), + m_logicalMaximum(logicalMaximum), + m_physicalMinimum(physicalMinimum), + m_physicalMaximum(physicalMaximum), + m_unitExponent(unitExponent), + m_unit(unit), + m_bytePosition(bytePosition), + m_bitPosition(bitPosition), + m_bitSize(bitSize) { +} + +Report::Report(const HidReportType& reportType, const uint8_t& reportId) + : m_reportType(reportType), + m_reportId(reportId), + m_lastBytePosition(0), + m_lastBitPosition(0) { +} + +void Report::addControl(const Control& item) { + m_controls.push_back(item); +} + +void Report::increasePosition(unsigned int bitSize) { + // Calculate the new bit position + m_lastBitPosition += bitSize; + + // If the bit position exceeds 8 bits, adjust the byte position + m_lastBytePosition += m_lastBitPosition / 8; + m_lastBitPosition %= 8; +} + +// Class for Collections +void Collection::addReport(const Report& report) { + m_reports.push_back(report); +} + +std::optional> +Collection::getReport( + const HidReportType& reportType, const uint8_t& reportId) const { + for (const auto& report : m_reports) { + if (report.m_reportType == reportType && report.m_reportId == reportId) { + return report; + } + } + return std::nullopt; +} + +// HID Report Descriptor Parser +HidReportDescriptor::HidReportDescriptor(const std::vector& data) + : m_data(data), + m_pos(0), + m_deviceUsesReportIds(kNotSet), + m_collectionLevel(0) { +} + +std::pair HidReportDescriptor::readTag() { + uint8_t byte = m_data[m_pos++]; + + VERIFY_OR_DEBUG_ASSERT(byte != + static_cast(HidItemSize::LongItemKeyword)){ + // Long items are only reserved for future use, they can't be used + // according to HID class definition 1.11 + }; + + HidItemTag tag = static_cast( + byte & static_cast(HidItemTag::AllTagBitsMask)); + HidItemSize size = static_cast( + byte & static_cast(HidItemSize::AllSizeBitsMask)); + + return {tag, size}; +} + +uint32_t HidReportDescriptor::readPayload(HidItemSize payloadSize) { + uint32_t payload; + + switch (payloadSize) { + case HidItemSize::ZeroBytePayload: + return 0; + case HidItemSize::OneBytePayload: + VERIFY_OR_DEBUG_ASSERT(m_pos + 1 <= m_data.size()) { + return 0; + } + return m_data[m_pos++]; + case HidItemSize::TwoBytePayload: + VERIFY_OR_DEBUG_ASSERT(m_pos + 2 <= m_data.size()) { + return 0; + } + payload = m_data[m_pos++]; + payload |= m_data[m_pos++] << 8; + return payload; + case HidItemSize::FourBytePayload: + VERIFY_OR_DEBUG_ASSERT(m_pos + 4 <= m_data.size()) { + return 0; + } + payload = m_data[m_pos++]; + payload |= m_data[m_pos++] << 8; + payload |= m_data[m_pos++] << 16; + payload |= m_data[m_pos++] << 24; + return payload; + default: + DEBUG_ASSERT(true); + return 0; + } +} + +int32_t HidReportDescriptor::getSignedValue(uint32_t payload, HidItemSize payloadSize) { + switch (payloadSize) { + case HidItemSize::ZeroBytePayload: + return 0; + case HidItemSize::OneBytePayload: + if (payload & 0x80) { // Check if the sign bit is set + return static_cast(payload | 0xFFFFFF00); // Sign extend to 32 bits + } + return static_cast(payload); + case HidItemSize::TwoBytePayload: + if (payload & 0x8000) { // Check if the sign bit is set + return static_cast(payload | 0xFFFF0000); // Sign extend to 32 bits + } + return static_cast(payload); + case HidItemSize::FourBytePayload: + return static_cast(payload); // Already 32 bits, no need to sign extend + default: + DEBUG_ASSERT(true); + return 0; + } +} + +uint32_t HidReportDescriptor::getDecodedUsage( + uint16_t usagePage, uint32_t usage, HidItemSize usageSize) { + switch (usageSize) { + case HidItemSize::ZeroBytePayload: + return usagePage << 16; + case HidItemSize::OneBytePayload: + case HidItemSize::TwoBytePayload: + return (usagePage << 16) + usage; + case HidItemSize::FourBytePayload: + return usage; // Full 32bit usage superseds Usage Page + default: + DEBUG_ASSERT(true); + return usagePage << 16; + } +} + +HidReportType HidReportDescriptor::getReportType(HidItemTag tag) { + switch (tag) { + case HidItemTag::Input: + return HidReportType::Input; + case HidItemTag::Output: + return HidReportType::Output; + break; + case HidItemTag::Feature: + return HidReportType::Feature; + default: + DEBUG_ASSERT(true); + return HidReportType::Input; // Dummy value for error case + } +} + +Collection HidReportDescriptor::parse() { + Collection collection; // Top level collection + std::unique_ptr pCurrentReport = nullptr; // Use a unique_ptr for pCurrentReport + + // Global item values + GlobalItems globalItems; + + // Local item values + LocalItems localItems; + + while (m_pos < m_data.size()) { + auto [tag, size] = readTag(); + auto payload = readPayload(size); + + switch (tag) { + // Global Items + case HidItemTag::UsagePage: + globalItems.usagePage = payload; + break; + case HidItemTag::LogicalMinimum: + globalItems.logicalMinimum = getSignedValue(payload, size); + break; + case HidItemTag::LogicalMaximum: + globalItems.logicalMaximum = getSignedValue(payload, size); + break; + case HidItemTag::PhysicalMinimum: + globalItems.physicalMinimum = getSignedValue(payload, size); + break; + case HidItemTag::PhysicalMaximum: + globalItems.physicalMaximum = getSignedValue(payload, size); + break; + case HidItemTag::UnitExponent: + // HID class definition restricts the unit exponent range to -8 to +7 + globalItems.unitExponent = static_cast(payload & 0x0F); + if (globalItems.unitExponent >= 8) { + globalItems.unitExponent -= 16; + } + break; + case HidItemTag::Unit: + globalItems.unit = payload; + break; + case HidItemTag::ReportSize: + globalItems.reportSize = payload; + break; + case HidItemTag::ReportId: + globalItems.reportId = static_cast(payload); + break; + case HidItemTag::ReportCount: + globalItems.reportCount = payload; + break; + case HidItemTag::Push: + // Places a copy of the global item state table on the stack + globalItemsStack.push_back(globalItems); + break; + case HidItemTag::Pop: + // Replaces the item state table with the top structure from the stack + VERIFY_OR_DEBUG_ASSERT(!globalItemsStack.empty()) { + globalItems = globalItemsStack.back(); + globalItemsStack.pop_back(); + } + break; + + // Local Items + case HidItemTag::Usage: + localItems.Usage.push_back(getDecodedUsage(globalItems.usagePage, payload, size)); + break; + case HidItemTag::UsageMinimum: + localItems.UsageMinimum = getDecodedUsage(globalItems.usagePage, payload, size); + break; + case HidItemTag::UsageMaximum: + localItems.UsageMaximum = getDecodedUsage(globalItems.usagePage, payload, size); + break; + case HidItemTag::DesignatorIndex: + localItems.DesignatorIndex = payload; + break; + case HidItemTag::DesignatorMinimum: + localItems.DesignatorMinimum = payload; + break; + case HidItemTag::DesignatorMaximum: + localItems.DesignatorMaximum = payload; + break; + case HidItemTag::StringIndex: + localItems.StringIndex = payload; + break; + case HidItemTag::StringMinimum: + localItems.StringMinimum = payload; + break; + case HidItemTag::StringMaximum: + localItems.StringMaximum = payload; + break; + case HidItemTag::Delimiter: + localItems.Delimiter = payload; + break; + + // Main Items + case HidItemTag::Input: + case HidItemTag::Output: + case HidItemTag::Feature: { + if (pCurrentReport == nullptr) { + // First control of this device + if (globalItems.reportId == kNoReportId) { + m_deviceUsesReportIds = false; + } else { + m_deviceUsesReportIds = true; + } + pCurrentReport = std::make_unique(getReportType(tag), globalItems.reportId); + } else if (pCurrentReport->m_reportType != getReportType(tag) || + globalItems.reportId != pCurrentReport->m_reportId) { + // First control of a new report + collection.addReport(*pCurrentReport); + pCurrentReport = std::make_unique(getReportType(tag), globalItems.reportId); + } + + int32_t physicalMinimum; + int32_t physicalMaximum; + if (globalItems.physicalMinimum == 0 && globalItems.physicalMaximum == 0) { + // According remark in chapter 6.2.2.7 of HID class definition 1.11 + physicalMinimum = globalItems.logicalMinimum; + physicalMaximum = globalItems.logicalMaximum; + } else { + physicalMinimum = globalItems.physicalMinimum; + physicalMaximum = globalItems.physicalMaximum; + } + + auto flags = std::bit_cast(payload); + + if (flags.data_constant == 1) { + // Constant value padding - Usually for byte alignment + pCurrentReport->increasePosition(globalItems.reportSize * globalItems.reportCount); + } else if (flags.array_variable == 0) { + // Array (e.g. list of pressed keys of a computer keyboard) + // NOT IMPLEMENTED as not relevant for mapping wizard, + // but could be implemented by overloaded Control class + pCurrentReport->increasePosition(globalItems.reportSize * globalItems.reportCount); + } else { + // Normal variable control + uint32_t usage = 0; + unsigned int numOfControls = + (localItems.UsageMinimum != kNotSet && + localItems.UsageMaximum != kNotSet) + ? localItems.UsageMaximum - localItems.UsageMinimum + 1 + : globalItems.reportCount; + for (unsigned int controlIdx = 0; + controlIdx < numOfControls; + controlIdx++) { + if (localItems.UsageMinimum != kNotSet && localItems.UsageMaximum != kNotSet) { + if (controlIdx == 0) { + usage = localItems.UsageMinimum; + } else if (usage < localItems.UsageMaximum) { + usage++; + } + } else if (!localItems.Usage.empty()) { + // If there are less usages than reportCount, + // the last usage value is valid for the remaining + usage = localItems.Usage.front(); + localItems.Usage.erase(localItems.Usage.begin()); + } + + Control control(flags, + usage, + globalItems.logicalMinimum, + globalItems.logicalMaximum, + physicalMinimum, + physicalMaximum, + globalItems.unitExponent, + globalItems.unit, + pCurrentReport->getLastBytePosition(), + pCurrentReport->getLastBitPosition(), + globalItems.reportSize); + pCurrentReport->addControl(control); + pCurrentReport->increasePosition(globalItems.reportSize); + } + pCurrentReport->increasePosition( + (globalItems.reportCount - numOfControls) * + globalItems.reportSize); + } + + localItems = LocalItems(); + break; + } + + case HidItemTag::Collection: + m_collectionLevel++; + + // We only handle top-level-collections + // according to chapter 8.4 "Report Constraints" HID class definition 1.11 + if (m_collectionLevel == 1) { + DEBUG_ASSERT(payload == static_cast(CollectionType::Application)); + } + // Local items are only valid for the actual control definition, reset them + localItems = LocalItems(); + break; + case HidItemTag::EndCollection: + if (m_collectionLevel == 1) { + if (pCurrentReport) { + collection.addReport(*pCurrentReport); + pCurrentReport.reset(); + } + m_topLevelCollections.push_back(collection); + collection = Collection(); + } + if (m_collectionLevel > 0) { + m_collectionLevel--; + } + break; + + default: + DEBUG_ASSERT(true); + break; + } + } + + if (pCurrentReport) { + collection.addReport(*pCurrentReport); + } + + return collection; +} + +std::optional> +HidReportDescriptor::getReport( + const HidReportType& reportType, const uint8_t& reportId) const { + for (const auto& collection : m_topLevelCollections) { + auto report = collection.getReport(reportType, reportId); + if (report) { + return report; + } + } + return std::nullopt; +} + +std::vector> +HidReportDescriptor::getListOfReports() const { + std::vector> orderedList; + for (size_t i = 0; i < m_topLevelCollections.size(); ++i) { + for (const auto& report : m_topLevelCollections[i].getReports()) { + orderedList.emplace_back(i, report.m_reportType, report.m_reportId); + } + } + return orderedList; +} + +} // namespace hid::reportDescriptor diff --git a/src/controllers/hid/hidreportdescriptor.h b/src/controllers/hid/hidreportdescriptor.h new file mode 100644 index 000000000000..cd51e33adf10 --- /dev/null +++ b/src/controllers/hid/hidreportdescriptor.h @@ -0,0 +1,266 @@ +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace hid::reportDescriptor { + +Q_NAMESPACE + +QString getScaledUnitString(std::uint32_t unit); + +constexpr int kNotSet = -1; +// Value used instead of the ReportID, if device don't have ReportIDs +constexpr int kNoReportId = 0x00; + +enum class HidReportType { + Input, + Output, + Feature +}; +Q_ENUM_NS(HidReportType) + +// clang-format off +// Enum class for HID Item Tags (incl. the two type bits) +enum class HidItemTag : std::uint8_t { + // "Main Items" according to chapter 6.2.2.4 of HID class definition 1.11 + Input = 0b1000'00'00, + Output = 0b1001'00'00, + Feature = 0b1011'00'00, + + Collection = 0b1010'00'00, + EndCollection = 0b1100'00'00, + + // "Global Items" according to chapter 6.2.2.7 of HID class definition 1.11 + UsagePage = 0b0000'01'00, + + LogicalMinimum = 0b0001'01'00, + LogicalMaximum = 0b0010'01'00, + PhysicalMinimum = 0b0011'01'00, + PhysicalMaximum = 0b0100'01'00, + + UnitExponent = 0b0101'01'00, + Unit = 0b0110'01'00, + + ReportSize = 0b0111'01'00, + ReportId = 0b1000'01'00, + ReportCount = 0b1001'01'00, + + Push = 0b1010'01'00, + Pop = 0b1011'01'00, + + // "Local Items" according to chapter 6.2.2.8 of HID class definition 1.11 + Usage = 0b0000'10'00, + UsageMinimum = 0b0001'10'00, + UsageMaximum = 0b0010'10'00, + + DesignatorIndex = 0b0011'10'00, + DesignatorMinimum = 0b0100'10'00, + DesignatorMaximum = 0b0101'10'00, + + StringIndex = 0b0111'10'00, + StringMinimum = 0b1000'10'00, + StringMaximum = 0b1001'10'00, + + Delimiter = 0b1010'10'00, + + + AllTagBitsMask = 0b1111'11'00 +}; + +// Enum class for HID Item Sizes +enum class HidItemSize : std::uint8_t { + // "Short Items" sizes according to chapter 6.2.2.2 of HID class definition 1.11 + ZeroBytePayload = 0b0000'00'00, + OneBytePayload = 0b0000'00'01, + TwoBytePayload = 0b0000'00'10, + FourBytePayload = 0b0000'00'11, + + + // Special value for "Long Items" according to chapter 6.2.2.3 of HID class definition 1.11 + LongItemKeyword = 0b1111'11'10, + + AllSizeBitsMask = 0b0000'00'11 +}; + +// Collection types according to chapter 6.2.2.6 of HID class definition 1.11 +enum class CollectionType : std::uint8_t { + Physical = 0x00, // e.g. group of axes + Application = 0x01, // e.g. mouse or keyboard + Logical = 0x02, // interrelated data + Report = 0x03, + NamedArray = 0x04, + UsageSwitch = 0x05, + UsageModifier = 0x06, + Reserved = 0x07, // range of 0x07-0x7F + VendorDefined = 0x80 // range of 0x80-0xFF +}; +// clang-format on + +struct ControlFlags { + std::uint32_t data_constant : 1; // Data (0) | Constant (1) + std::uint32_t array_variable : 1; // Array (0) | Variable (1) + std::uint32_t absolute_relative : 1; // Absolute (0) | Relative (1) + std::uint32_t no_wrap_wrap : 1; // No Wrap (0) | Wrap (1) + std::uint32_t linear_non_linear : 1; // Linear (0) | Non Linear (1) + std::uint32_t preferred_no_preferred : 1; // Preferred State (0) | No Preferred (1) + std::uint32_t no_null_null : 1; // No Null position (0) | Null state(1) + std::uint32_t non_volatile_volatile : 1; // Non Volatile (0) | Volatile (1) + std::uint32_t bit_field_buffered : 1; // Bit Field (0) | Buffered Bytes (1) + std::uint32_t reserved : 23; +}; + +// Class representing a control described in the HID report descriptor +class Control { + public: + Control(const ControlFlags flags, + const std::uint32_t usage, + const std::int32_t logicalMinimum, + const std::int32_t logicalMaximum, + const std::int32_t physicalMinimum, + const std::int32_t physicalMaximum, + const std::int8_t unitExponent, + const std::uint32_t unit, + const std::uint16_t bytePosition, // Position of the first byte in the report + const std::uint8_t bitPosition, // Position of first bit in first byte + const std::uint8_t bitSize); + + const ControlFlags m_flags; + + const std::uint32_t m_usage; + const std::int32_t m_logicalMinimum; + const std::int32_t m_logicalMaximum; + const std::int32_t m_physicalMinimum; + const std::int32_t m_physicalMaximum; + const std::int8_t m_unitExponent; + const std::uint32_t m_unit; + const std::uint16_t m_bytePosition; // Position of the first byte in the report + const std::uint8_t m_bitPosition; // Position of first bit in first byte + const std::uint8_t m_bitSize; + + private: +}; + +std::int32_t extractLogicalValue(const QByteArray& data, const Control& control); +bool applyLogicalValue(QByteArray& data, const Control& control, std::int32_t controlValue); + +// Class representing a report in the HID report descriptor +class Report { + public: + Report(const HidReportType& reportType, const std::uint8_t& reportId); + + void addControl(const Control& item); + void increasePosition(unsigned int bitSize); + std::uint16_t getLastBytePosition() const { + return m_lastBytePosition; + } + std::uint8_t getLastBitPosition() const { + return m_lastBitPosition; + } + + const std::vector& getControls() const { + return m_controls; + } + + const HidReportType m_reportType; + const std::uint8_t m_reportId; + std::uint16_t getReportSize() const { + return m_lastBytePosition; + } + + private: + std::vector m_controls; + std::uint16_t m_lastBytePosition; + std::uint8_t m_lastBitPosition; // Last bit position inside last byte +}; + +// Class representing a collection of HID items +class Collection { + public: + Collection() = default; + void addReport(const Report& report); + std::optional> getReport( + const HidReportType& reportType, + const std::uint8_t& reportId) const; + const std::vector& getReports() const { + return m_reports; + } + + private: + std::vector m_reports; +}; + +// Class for parsing HID report descriptors +class HidReportDescriptor { + public: + explicit HidReportDescriptor(const std::vector& data); + + bool isDeviceWithReportIds() const { + return m_deviceUsesReportIds; + } + + Collection parse(); + std::optional> getReport( + const HidReportType& reportType, + const std::uint8_t& reportId) const; + std::vector> getListOfReports() const; + + private: + // Define the struct for global items + struct GlobalItems { + std::int32_t logicalMinimum = 0; + std::int32_t logicalMaximum = 0; + std::int32_t physicalMinimum = 0; + std::int32_t physicalMaximum = 0; + std::uint32_t reportSize = 0; + std::uint32_t reportCount = 0; + std::uint32_t unit = 0; + std::int8_t unitExponent = 0; + std::uint8_t reportId = 0; + std::uint16_t usagePage = 0; + }; + + struct LocalItems { + std::vector Usage; + std::int64_t UsageMinimum = kNotSet; + std::int64_t UsageMaximum = kNotSet; + std::int64_t DesignatorIndex = kNotSet; + std::int64_t DesignatorMinimum = kNotSet; + std::int64_t DesignatorMaximum = kNotSet; + std::int64_t StringIndex = kNotSet; + std::int64_t StringMinimum = kNotSet; + std::int64_t StringMaximum = kNotSet; + std::int64_t Delimiter = kNotSet; + }; + + std::pair readTag(); + std::uint32_t readPayload(HidItemSize payloadSize); + + std::int32_t getSignedValue(std::uint32_t payload, HidItemSize payloadSize); + std::uint32_t getDecodedUsage(std::uint16_t usagePage, + std::uint32_t usage, + HidItemSize usageSize); + + HidReportType getReportType(HidItemTag tag); + + const std::vector& m_data; + std::size_t m_pos; + + bool m_deviceUsesReportIds; + + std::vector globalItemsStack; + + unsigned int m_collectionLevel; + std::vector m_topLevelCollections; +}; + +} // namespace hid::reportDescriptor + +Q_DECLARE_METATYPE(hid::reportDescriptor::Control); diff --git a/src/controllers/rendering/controllerrenderingengine.cpp b/src/controllers/rendering/controllerrenderingengine.cpp index 2f162bdcd92b..c1a2767d5f77 100644 --- a/src/controllers/rendering/controllerrenderingengine.cpp +++ b/src/controllers/rendering/controllerrenderingengine.cpp @@ -1,5 +1,6 @@ #include "controllers/rendering/controllerrenderingengine.h" +#include #include #include #include @@ -10,17 +11,15 @@ #include #include #include +#include #include "controllers/controller.h" #include "controllers/controllerenginethreadcontrol.h" #include "controllers/scripting/legacy/controllerscriptenginelegacy.h" -#include "controllers/scripting/legacy/controllerscriptinterfacelegacy.h" #include "moc_controllerrenderingengine.cpp" -#include "qml/qmlwaveformoverview.h" #include "util/cmdlineargs.h" #include "util/logger.h" #include "util/thread_affinity.h" -#include "util/time.h" #include "util/timer.h" // Used in the renderFrame method to properly abort the rendering and terminate the engine. @@ -179,7 +178,15 @@ void ControllerRenderingEngine::setup(std::shared_ptr qmlEngine) { return; } QSurfaceFormat format; - format.setSamples(m_screenInfo.msaa); + // FIXME multi sampling appears to be unsupported when using offscreen + // rendering on Wayland QPA: + // warning [CtrlScreen_rightdeck] QWaylandGLContext::makeCurrent: + // eglError: 0x3009, this: 0x7ffd9c001770 warning [CtrlScreen_rightdeck] + // QRhiGles2: Failed to make context current. Expect bad things to happen. + // warning [CtrlScreen_rightdeck] Failed to create RHI (backend 2) + if (QGuiApplication::platformName() != QStringLiteral("wayland")) { + format.setSamples(m_screenInfo.msaa); + } format.setDepthBufferSize(16); format.setStencilBufferSize(8); diff --git a/src/controllers/scripting/controllerscriptenginebase.cpp b/src/controllers/scripting/controllerscriptenginebase.cpp index 075ef6f5a8a9..2137803be3e2 100644 --- a/src/controllers/scripting/controllerscriptenginebase.cpp +++ b/src/controllers/scripting/controllerscriptenginebase.cpp @@ -30,12 +30,17 @@ ControllerScriptEngineBase::ControllerScriptEngineBase( qRegisterMetaType("QMessageBox::StandardButton"); } -#ifdef MIXXX_USE_QML +void ControllerScriptEngineBase::registerPlayerManager( + std::shared_ptr pPlayerManager) { + ControllerScriptEngineBase::s_pPlayerManager = pPlayerManager; +} + void ControllerScriptEngineBase::registerTrackCollectionManager( std::shared_ptr pTrackCollectionManager) { s_pTrackCollectionManager = std::move(pTrackCollectionManager); } +#ifdef MIXXX_USE_QML void ControllerScriptEngineBase::handleQMLErrors(const QList& qmlErrors) { for (const QQmlError& error : std::as_const(qmlErrors)) { showQMLExceptionDialog(error, m_bErrorsAreFatal); @@ -116,6 +121,24 @@ void ControllerScriptEngineBase::reload() { initialize(); } +QObject* ControllerScriptEngineBase::getPlayer(const QString& group) { + VERIFY_OR_DEBUG_ASSERT(s_pPlayerManager != nullptr) { + qCritical() << "Uninitialized PlayerManager"; + return nullptr; + } + auto* const player = s_pPlayerManager->getPlayer(group); + if (!player) { + qWarning() << "PlayerManagerProxy failed to find player for group" << group; + return nullptr; + } + + // Don't set a parent here, so that the QML engine deletes the object when + // the corresponding JS object is garbage collected. + JavascriptPlayerProxy* pPlayerProxy = new JavascriptPlayerProxy(player, nullptr); + QJSEngine::setObjectOwnership(pPlayerProxy, QJSEngine::JavaScriptOwnership); + return pPlayerProxy; +} + bool ControllerScriptEngineBase::executeFunction( QJSValue* pFunctionObject, const QJSValueList& args) { // This function is called from outside the controller engine, so we can't diff --git a/src/controllers/scripting/controllerscriptenginebase.h b/src/controllers/scripting/controllerscriptenginebase.h index 2129184b641b..05bdaba7a92f 100644 --- a/src/controllers/scripting/controllerscriptenginebase.h +++ b/src/controllers/scripting/controllerscriptenginebase.h @@ -7,6 +7,8 @@ #include #include +#include "javascriptplayerproxy.h" +#include "mixer/playermanager.h" #include "util/runtimeloggingcategory.h" #ifdef MIXXX_USE_QML #include "controllers/controllerenginethreadcontrol.h" @@ -14,9 +16,7 @@ class Controller; class QJSEngine; -#ifdef MIXXX_USE_QML class TrackCollectionManager; -#endif /// ControllerScriptEngineBase manages the JavaScript engine for controller scripts. /// ControllerScriptModuleEngine implements the current system using JS modules. @@ -32,6 +32,8 @@ class ControllerScriptEngineBase : public QObject { bool executeFunction(QJSValue* pFunctionObject, const QJSValueList& arguments = {}); + QObject* getPlayer(const QString& group); + /// Shows a UI dialog notifying of a script evaluation error. /// Precondition: QJSValue.isError() == true void showScriptExceptionDialog(const QJSValue& evaluationResult, bool bFatal = false); @@ -53,10 +55,11 @@ class ControllerScriptEngineBase : public QObject { return m_bTesting; } -#ifdef MIXXX_USE_QML + static void registerPlayerManager(std::shared_ptr pPlayerManager); + static void registerTrackCollectionManager( std::shared_ptr pTrackCollectionManager); -#endif + signals: void beforeShutdown(); @@ -91,10 +94,11 @@ class ControllerScriptEngineBase : public QObject { #endif bool m_bTesting; -#ifdef MIXXX_USE_QML private: + static inline std::shared_ptr s_pPlayerManager; static inline std::shared_ptr s_pTrackCollectionManager; +#ifdef MIXXX_USE_QML protected: /// Pause the GUI main thread. Pause is required by rendering /// thread (https://doc.qt.io/qt-6/qquickrendercontrol.html#sync). This diff --git a/src/controllers/scripting/javascriptplayerproxy.cpp b/src/controllers/scripting/javascriptplayerproxy.cpp new file mode 100644 index 000000000000..7a81146d1500 --- /dev/null +++ b/src/controllers/scripting/javascriptplayerproxy.cpp @@ -0,0 +1,119 @@ +#include "javascriptplayerproxy.h" + +#include "moc_javascriptplayerproxy.cpp" + +JavascriptPlayerProxy::JavascriptPlayerProxy(BaseTrackPlayer* pTrackPlayer, QObject* parent) + : QObject(parent), + m_pTrackPlayer(pTrackPlayer) { + if (m_pTrackPlayer && m_pTrackPlayer->getLoadedTrack()) { + slotTrackLoaded(pTrackPlayer->getLoadedTrack()); + } + + connect(m_pTrackPlayer, + &BaseTrackPlayer::loadingTrack, + this, + &JavascriptPlayerProxy::slotLoadingTrack); + connect(m_pTrackPlayer, + &BaseTrackPlayer::newTrackLoaded, + this, + &JavascriptPlayerProxy::slotTrackLoaded); + connect(m_pTrackPlayer, + &BaseTrackPlayer::playerEmpty, + this, + [this]() { + disconnectTrack(); + emit trackUnloaded(); + }); +} + +void JavascriptPlayerProxy::slotTrackLoaded(TrackPointer pTrack) { + m_pCurrentTrack = pTrack; + if (pTrack == nullptr) { + emit trackUnloaded(); + return; + } + + connect(pTrack.get(), + &Track::artistChanged, + this, + &JavascriptPlayerProxy::artistChanged); + connect(pTrack.get(), + &Track::titleChanged, + this, + &JavascriptPlayerProxy::titleChanged); + connect(pTrack.get(), + &Track::albumChanged, + this, + &JavascriptPlayerProxy::albumChanged); + connect(pTrack.get(), + &Track::albumArtistChanged, + this, + &JavascriptPlayerProxy::albumArtistChanged); + connect(pTrack.get(), + &Track::genreChanged, + this, + &JavascriptPlayerProxy::genreChanged); + connect(pTrack.get(), + &Track::composerChanged, + this, + &JavascriptPlayerProxy::composerChanged); + connect(pTrack.get(), + &Track::groupingChanged, + this, + &JavascriptPlayerProxy::groupingChanged); + connect(pTrack.get(), + &Track::yearChanged, + this, + &JavascriptPlayerProxy::yearChanged); + connect(pTrack.get(), + &Track::trackNumberChanged, + this, + &JavascriptPlayerProxy::trackNumberChanged); + connect(pTrack.get(), + &Track::trackTotalChanged, + this, + &JavascriptPlayerProxy::trackTotalChanged); + + emit artistChanged(m_pCurrentTrack->getArtist()); + emit titleChanged(m_pCurrentTrack->getTitle()); + emit albumChanged(m_pCurrentTrack->getAlbum()); + emit albumArtistChanged(m_pCurrentTrack->getAlbumArtist()); + emit genreChanged(m_pCurrentTrack->getGenre()); + emit composerChanged(m_pCurrentTrack->getComposer()); + emit groupingChanged(m_pCurrentTrack->getGrouping()); + emit yearChanged(m_pCurrentTrack->getYear()); + emit trackNumberChanged(m_pCurrentTrack->getTrackNumber()); + emit trackTotalChanged(m_pCurrentTrack->getTrackTotal()); +} + +void JavascriptPlayerProxy::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack) { + VERIFY_OR_DEBUG_ASSERT(pOldTrack == m_pCurrentTrack) { + qWarning() << "Javascript Player proxy was expected to contain " + << pOldTrack.get() << "as active track but got" + << m_pCurrentTrack.get(); + } + + if (pNewTrack == m_pCurrentTrack) { + return; + } + + disconnectTrack(); + m_pCurrentTrack = pNewTrack; +} + +void JavascriptPlayerProxy::disconnectTrack() { + if (m_pCurrentTrack != nullptr) { + m_pCurrentTrack->disconnect(this); + } +} + +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, artist, getArtist) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, title, getTitle) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, album, getAlbum) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, albumArtist, getAlbumArtist) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, genre, getGenre) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, composer, getComposer) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, grouping, getGrouping) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, year, getYear) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, trackNumber, getTrackNumber) +PROPERTY_IMPL_GETTER(JavascriptPlayerProxy, QString, trackTotal, getTrackTotal) diff --git a/src/controllers/scripting/javascriptplayerproxy.h b/src/controllers/scripting/javascriptplayerproxy.h new file mode 100644 index 000000000000..da2d04260d13 --- /dev/null +++ b/src/controllers/scripting/javascriptplayerproxy.h @@ -0,0 +1,62 @@ +#pragma once + +#include "mixer/basetrackplayer.h" +#include "track/track.h" + +#define PROPERTY_IMPL_GETTER(NAMESPACE, TYPE, NAME, GETTER) \ + TYPE NAMESPACE::GETTER() const { \ + const TrackPointer pTrack = m_pCurrentTrack; \ + if (pTrack == nullptr) { \ + return TYPE(); \ + } \ + return pTrack->GETTER(); \ + } + +class JavascriptPlayerProxy : public QObject { + Q_OBJECT + Q_PROPERTY(QString artist READ getArtist NOTIFY artistChanged) + Q_PROPERTY(QString title READ getTitle NOTIFY titleChanged) + Q_PROPERTY(QString album READ getAlbum NOTIFY albumChanged) + Q_PROPERTY(QString albumArtist READ getAlbumArtist NOTIFY albumArtistChanged) + Q_PROPERTY(QString genre READ getGenre STORED false NOTIFY genreChanged) + Q_PROPERTY(QString composer READ getComposer NOTIFY composerChanged) + Q_PROPERTY(QString grouping READ getGrouping NOTIFY groupingChanged) + Q_PROPERTY(QString year READ getYear NOTIFY yearChanged) + Q_PROPERTY(QString trackNumber READ getTrackNumber NOTIFY trackNumberChanged) + Q_PROPERTY(QString trackTotal READ getTrackTotal NOTIFY trackTotalChanged) + public: + explicit JavascriptPlayerProxy(BaseTrackPlayer* pTrackPlayer, QObject* parent); + + QString getTitle() const; + QString getArtist() const; + QString getAlbum() const; + QString getAlbumArtist() const; + QString getGenre() const; + QString getComposer() const; + QString getGrouping() const; + QString getYear() const; + QString getTrackNumber() const; + QString getTrackTotal() const; + + public slots: + void slotTrackLoaded(TrackPointer pTrack); + void slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack); + + signals: + void trackUnloaded(); + void albumChanged(QString newAlbum); + void titleChanged(QString newTitle); + void artistChanged(QString newArtist); + void albumArtistChanged(QString newAlbumArtist); + void genreChanged(QString newGenre); + void composerChanged(QString newComposer); + void groupingChanged(QString grouping); + void yearChanged(QString newYear); + void trackNumberChanged(QString newTrackNumber); + void trackTotalChanged(QString newTrackTotal); + + protected: + void disconnectTrack(); + QPointer m_pTrackPlayer; + TrackPointer m_pCurrentTrack; +}; diff --git a/src/controllers/scripting/legacy/controllerscriptenginelegacy.cpp b/src/controllers/scripting/legacy/controllerscriptenginelegacy.cpp index f36405696830..93f1a1d92879 100644 --- a/src/controllers/scripting/legacy/controllerscriptenginelegacy.cpp +++ b/src/controllers/scripting/legacy/controllerscriptenginelegacy.cpp @@ -1,5 +1,8 @@ #include "controllers/scripting/legacy/controllerscriptenginelegacy.h" +#include + +#include #include #ifdef MIXXX_USE_QML @@ -11,12 +14,9 @@ #include #endif -#include "control/controlobject.h" #include "controllers/controller.h" -#include "controllers/scripting/colormapperjsproxy.h" #include "controllers/scripting/legacy/controllerscriptinterfacelegacy.h" #include "errordialoghandler.h" -#include "mixer/playermanager.h" #include "moc_controllerscriptenginelegacy.cpp" #ifdef MIXXX_USE_QML #include "qml/qmlmixxxcontrollerscreen.h" @@ -358,7 +358,7 @@ bool ControllerScriptEngineLegacy::initialize() { watchFilePath(path); auto pQmlEngine = std::dynamic_pointer_cast(m_pJSEngine); pQmlEngine->addImportPath(path); - qCWarning(m_logger) << pQmlEngine->importPathList(); + qCDebug(m_logger) << "The QML import path is" << pQmlEngine->importPathList(); } } else if (!m_modules.isEmpty()) { qCWarning(m_logger) << "Controller mapping has QML library definitions but no " diff --git a/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.cpp b/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.cpp index 753dfe3e70a8..899e9988e914 100644 --- a/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.cpp +++ b/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.cpp @@ -136,6 +136,10 @@ QJSValue ControllerScriptInterfaceLegacy::getSetting(const QString& name) { } } +QObject* ControllerScriptInterfaceLegacy::getPlayer(const QString& group) { + return m_pScriptEngineLegacy->getPlayer(group); +} + double ControllerScriptInterfaceLegacy::getValue(const QString& group, const QString& name) { ControlObjectScript* coScript = getControlObjectScript(group, name); if (coScript == nullptr) { diff --git a/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.h b/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.h index 3585c3692df4..809d01cbd8e8 100644 --- a/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.h +++ b/src/controllers/scripting/legacy/controllerscriptinterfacelegacy.h @@ -56,6 +56,7 @@ class ControllerScriptInterfaceLegacy : public QObject { virtual ~ControllerScriptInterfaceLegacy(); Q_INVOKABLE QJSValue getSetting(const QString& name); + Q_INVOKABLE QObject* getPlayer(const QString& group); Q_INVOKABLE double getValue(const QString& group, const QString& name); Q_INVOKABLE void setValue(const QString& group, const QString& name, double newValue); Q_INVOKABLE double getParameter(const QString& group, const QString& name); diff --git a/src/coreservices.cpp b/src/coreservices.cpp index fd8bd8e44fe9..a96a9e286404 100644 --- a/src/coreservices.cpp +++ b/src/coreservices.cpp @@ -14,6 +14,7 @@ #include "control/controlindicatortimer.h" #include "controllers/controllermanager.h" #include "controllers/keyboard/keyboardeventfilter.h" +#include "controllers/scripting/controllerscriptenginebase.h" #include "database/mixxxdb.h" #include "effects/effectsmanager.h" #include "engine/enginemixer.h" @@ -40,15 +41,11 @@ #include #include -#include "controllers/scripting/controllerscriptenginebase.h" #include "qml/qmlconfigproxy.h" -#include "qml/qmlcontrolproxy.h" -#include "qml/qmldlgpreferencesproxy.h" -#include "qml/qmleffectslotproxy.h" #include "qml/qmleffectsmanagerproxy.h" #include "qml/qmllibraryproxy.h" #include "qml/qmlplayermanagerproxy.h" -#include "qml/qmlplayerproxy.h" +#include "qml/qmlsoundmanagerproxy.h" #endif #include "soundio/soundmanager.h" #include "sources/soundsourceproxy.h" @@ -67,7 +64,7 @@ #include "util/sandbox.h" #endif -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) && defined(__X11__) #include #endif @@ -122,7 +119,7 @@ Bool __xErrorHandler(Display* display, XErrorEvent* event, xError* error) { #endif -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) && defined(__X11__) QLocale localeFromXkbSymbol(const QString& xkbLayout) { // This maps XKB layouts to locales of keyboard mappings that are shipped with Mixxx static const QMap xkbToLocaleMap = { @@ -272,7 +269,7 @@ QString getCurrentXkbLayoutName() { // to "ibus engine". QGuiApplication::inputMethod() does not work with GNOME and XFCE // https://bugreports.qt.io/browse/QTBUG-137302 inline QLocale inputLocale() { -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) && defined(__X11__) QString layoutName = getCurrentXkbLayoutName(); if (!layoutName.isEmpty()) { qDebug() << "Keyboard Layout from XKB:" << layoutName; @@ -726,6 +723,8 @@ void CoreServices::initialize(QApplication* pApp) { m_isInitialized = true; + ControllerScriptEngineBase::registerPlayerManager(getPlayerManager()); + #ifdef MIXXX_USE_QML initializeQMLSingletons(); } @@ -744,6 +743,7 @@ void CoreServices::initializeQMLSingletons() { mixxx::qml::QmlPlayerManagerProxy::registerPlayerManager(getPlayerManager()); mixxx::qml::QmlConfigProxy::registerUserSettings(getSettings()); mixxx::qml::QmlLibraryProxy::registerLibrary(getLibrary()); + mixxx::qml::QmlSoundManagerProxy::registerManager(getSoundManager()); ControllerScriptEngineBase::registerTrackCollectionManager(getTrackCollectionManager()); @@ -865,9 +865,11 @@ void CoreServices::finalize() { mixxx::qml::QmlPlayerManagerProxy::registerPlayerManager(nullptr); mixxx::qml::QmlConfigProxy::registerUserSettings(nullptr); mixxx::qml::QmlLibraryProxy::registerLibrary(nullptr); + mixxx::qml::QmlSoundManagerProxy::registerManager(nullptr); ControllerScriptEngineBase::registerTrackCollectionManager(nullptr); #endif + ControllerScriptEngineBase::registerPlayerManager(nullptr); // Stop all pending library operations qDebug() << t.elapsed(false).debugMillisWithUnit() << "stopping pending Library tasks"; diff --git a/src/effects/backends/builtin/autogaincontroleffect.cpp b/src/effects/backends/builtin/autogaincontroleffect.cpp new file mode 100644 index 000000000000..2ea42eef06dc --- /dev/null +++ b/src/effects/backends/builtin/autogaincontroleffect.cpp @@ -0,0 +1,242 @@ +#include "effects/backends/builtin/autogaincontroleffect.h" + +#include "util/math.h" + +namespace { +using namespace std::chrono_literals; +constexpr std::chrono::milliseconds kDefaultAttack = 1ms; +constexpr std::chrono::milliseconds kDefaultRelease = 500ms; +constexpr double kDefaultThresholdDB = -40; +constexpr double kDefaultTargetDB = -5; +constexpr double kDefaultGainDB = 20; +constexpr double kDefaultKneeDB = 10; + +double calculateBallistics(double paramMs, const mixxx::EngineParameters& engineParameters) { + return exp(-1000.0 / (paramMs * engineParameters.sampleRate())); +} +} // anonymous namespace + +// static +QString AutoGainControlEffect::getId() { + return "org.mixxx.effects.autogaincontrol"; +} + +// static +EffectManifestPointer AutoGainControlEffect::getManifest() { + auto pManifest = EffectManifestPointer::create(); + pManifest->setId(getId()); + pManifest->setName(QObject::tr("Auto Gain Control")); + pManifest->setShortName(QObject::tr("AGC")); + pManifest->setAuthor(QObject::tr("The Mixxx Team")); + pManifest->setVersion("1.0"); + pManifest->setDescription(QObject::tr( + "Auto Gain Control (AGC) automatically adjusts the gain of an " + "audio signal to maintain a consistent output level.")); + pManifest->setEffectRampsFromDry(true); + pManifest->setMetaknobDefault(0.0); + + EffectManifestParameterPointer threshold = pManifest->addParameter(); + threshold->setId("threshold"); + threshold->setName(QObject::tr("Threshold (dBFS)")); + threshold->setShortName(QObject::tr("Threshold")); + threshold->setDescription( + QObject::tr("The Threshold knob adjusts the level above which the " + "effect starts enhancing the input signal")); + threshold->setValueScaler(EffectManifestParameter::ValueScaler::Linear); + threshold->setUnitsHint(EffectManifestParameter::UnitsHint::Decibel); + threshold->setNeutralPointOnScale(0); + threshold->setRange(-70, kDefaultThresholdDB, 0); + + EffectManifestParameterPointer target = pManifest->addParameter(); + target->setId("target"); + target->setName(QObject::tr("Target (dBFS)")); + target->setShortName(QObject::tr("Target")); + target->setDescription( + QObject::tr("The Target knob adjusts the desired target level of the output signal")); + target->setValueScaler(EffectManifestParameter::ValueScaler::Linear); + target->setUnitsHint(EffectManifestParameter::UnitsHint::Decibel); + target->setNeutralPointOnScale(0); + target->setRange(-20, kDefaultTargetDB, 10); + + EffectManifestParameterPointer gain = pManifest->addParameter(); + gain->setId("gain"); + gain->setName(QObject::tr("Gain (dB)")); + gain->setShortName(QObject::tr("Gain")); + gain->setDescription( + QObject::tr("The Gain knob adjusts the maximum amount of gain that " + "the effect will apply")); + gain->setValueScaler(EffectManifestParameter::ValueScaler::Linear); + gain->setUnitsHint(EffectManifestParameter::UnitsHint::Decibel); + gain->setRange(1, kDefaultGainDB, 40); + + EffectManifestParameterPointer knee = pManifest->addParameter(); + knee->setId("knee"); + knee->setName(QObject::tr("Knee (dB)")); + knee->setShortName(QObject::tr("Knee")); + knee->setDescription(QObject::tr( + "The Knee knob defines the range around the Threshold where gain " + "changes are applied gradually,\nensuring smooth transitions and " + "avoiding abrupt level shifts.")); + knee->setValueScaler(EffectManifestParameter::ValueScaler::Linear); + knee->setUnitsHint(EffectManifestParameter::UnitsHint::Coefficient); + knee->setNeutralPointOnScale(0); + knee->setRange(0.0, kDefaultKneeDB, 24); + + EffectManifestParameterPointer attack = pManifest->addParameter(); + attack->setId("attack"); + attack->setName(QObject::tr("Attack (ms)")); + attack->setShortName(QObject::tr("Attack")); + attack->setDescription(QObject::tr( + "The Attack knob sets the time that determines how fast the " + "auto gain \nwill set in once the signal exceeds the threshold")); + attack->setValueScaler(EffectManifestParameter::ValueScaler::Logarithmic); + attack->setUnitsHint(EffectManifestParameter::UnitsHint::Millisecond); + attack->setRange(0, kDefaultAttack.count(), 250); + + EffectManifestParameterPointer release = pManifest->addParameter(); + release->setId("release"); + release->setName(QObject::tr("Release (ms)")); + release->setShortName(QObject::tr("Release")); + release->setDescription( + QObject::tr("The Release knob sets the time that determines how " + "fast the auto gain will recover from the gain\n" + "adjustment once the signal falls under the threshold. " + "Depending on the input signal, short release times\n" + "may introduce a 'pumping' effect and/or distortion.")); + release->setValueScaler(EffectManifestParameter::ValueScaler::Integral); + release->setUnitsHint(EffectManifestParameter::UnitsHint::Millisecond); + release->setRange(0, kDefaultRelease.count(), 1500); + + return pManifest; +} + +void AutoGainControlGroupState::clear(const mixxx::EngineParameters& engineParameters) { + state = CSAMPLE_ONE; + attackCoeff = calculateBallistics(kDefaultAttack.count(), engineParameters); + releaseCoeff = calculateBallistics(kDefaultRelease.count(), engineParameters); + + previousAttackParamMs = kDefaultAttack.count(); + previousReleaseParamMs = kDefaultRelease.count(); + previousSampleRate = engineParameters.sampleRate(); +} + +void AutoGainControlGroupState::calculateCoeffsIfChanged( + const mixxx::EngineParameters& engineParameters, + double attackParamMs, + double releaseParamMs) { + if (engineParameters.sampleRate() != previousSampleRate) { + attackCoeff = calculateBallistics(attackParamMs, engineParameters); + previousAttackParamMs = attackParamMs; + + releaseCoeff = calculateBallistics(releaseParamMs, engineParameters); + previousReleaseParamMs = releaseParamMs; + + previousSampleRate = engineParameters.sampleRate(); + } else { + if (attackParamMs != previousAttackParamMs) { + attackCoeff = calculateBallistics(attackParamMs, engineParameters); + previousAttackParamMs = attackParamMs; + } + + if (releaseParamMs != previousReleaseParamMs) { + releaseCoeff = calculateBallistics(releaseParamMs, engineParameters); + previousReleaseParamMs = releaseParamMs; + } + } +} + +void AutoGainControlEffect::loadEngineEffectParameters( + const QMap& parameters) { + m_pThreshold = parameters.value("threshold"); + m_pTarget = parameters.value("target"); + m_pGain = parameters.value("gain"); + m_pKnee = parameters.value("knee"); + m_pAttack = parameters.value("attack"); + m_pRelease = parameters.value("release"); +} + +void AutoGainControlEffect::processChannel( + AutoGainControlGroupState* pState, + const CSAMPLE* pInput, + CSAMPLE* pOutput, + const mixxx::EngineParameters& engineParameters, + const EffectEnableState enableState, + const GroupFeatureState& groupFeatures) { + Q_UNUSED(groupFeatures); + + if (enableState == EffectEnableState::Enabling) { + pState->clear(engineParameters); + } else { + pState->calculateCoeffsIfChanged(engineParameters, m_pAttack->value(), m_pRelease->value()); + } + + applyAutoGainControl(pState, engineParameters, pInput, pOutput); +} + +void AutoGainControlEffect::applyAutoGainControl(AutoGainControlGroupState* pState, + const mixxx::EngineParameters& engineParameters, + const CSAMPLE* pInput, + CSAMPLE* pOutput) { + // Get user-defined parameters + double thresholdDB = m_pThreshold->value(); + double targetLevelDB = m_pTarget->value(); + double maxGainDB = m_pGain->value(); + double kneeDB = m_pKnee->value(); + + // Define the upper and lower boundaries of the knee region + double upperKneeDB = thresholdDB + 0.5 * kneeDB; + double lowerKneeDB = thresholdDB - 0.5 * kneeDB; + + // Initialize the envelope state + double state = pState->state; + + SINT numSamples = engineParameters.samplesPerBuffer(); + int channelCount = engineParameters.channelCount(); + for (SINT i = 0; i < numSamples; i += channelCount) { + // Detect peak level across stereo channels + CSAMPLE maxSample = std::max(fabs(pInput[i]), fabs(pInput[i + 1])); + + // If the input is silent, output silence + if (maxSample == CSAMPLE_ZERO) { + pOutput[i] = CSAMPLE_ZERO; + pOutput[i + 1] = CSAMPLE_ZERO; + continue; + } + + // Smooth the level detector using attack/release envelope + if (maxSample > state) { + state = pState->attackCoeff * state + (1 - pState->attackCoeff) * maxSample; + } else { + state = pState->releaseCoeff * state + (1 - pState->releaseCoeff) * maxSample; + } + + // Convert current signal level to decibels + double inputLevelDB = ratio2db(state); + + // Determine the appropriate gain based on the input level + double desiredGainDB; + if (inputLevelDB > upperKneeDB) { + // Above the knee range: apply full gain reduction + desiredGainDB = targetLevelDB - inputLevelDB; + } else if (inputLevelDB < lowerKneeDB) { + // Below the knee range: no gain applied + desiredGainDB = 0.0; + } else { + // Within the knee: interpolate gain smoothly + double kneePosition = (inputLevelDB - lowerKneeDB) / kneeDB; + desiredGainDB = (targetLevelDB - upperKneeDB) * kneePosition; + } + + // Limit the gain to the maximum allowed value + desiredGainDB = std::min(desiredGainDB, maxGainDB); + + // Convert gain from decibels to linear amplitude ratio + CSAMPLE_GAIN gain = static_cast(db2ratio(desiredGainDB)); + + pOutput[i] = pInput[i] * gain; + pOutput[i + 1] = pInput[i + 1] * gain; + } + + // Store the envelope state for the next buffer + pState->state = state; +} diff --git a/src/effects/backends/builtin/autogaincontroleffect.h b/src/effects/backends/builtin/autogaincontroleffect.h new file mode 100644 index 000000000000..f00ea90d32f8 --- /dev/null +++ b/src/effects/backends/builtin/autogaincontroleffect.h @@ -0,0 +1,70 @@ +#pragma once + +#include "effects/backends/effectprocessor.h" +#include "engine/effects/engineeffect.h" +#include "engine/effects/engineeffectparameter.h" +#include "util/class.h" +#include "util/defs.h" +#include "util/sample.h" +#include "util/types.h" + +class AutoGainControlGroupState : public EffectState { + public: + AutoGainControlGroupState(const mixxx::EngineParameters& engineParameters) + : EffectState(engineParameters) { + clear(engineParameters); + } + + void clear(const mixxx::EngineParameters& engineParameters); + + void calculateCoeffsIfChanged( + const mixxx::EngineParameters& engineParameters, + double attackParamMs, + double releaseParamMs); + + double state; + double attackCoeff; + double releaseCoeff; + + double previousAttackParamMs; + double previousReleaseParamMs; + mixxx::audio::SampleRate previousSampleRate; +}; + +class AutoGainControlEffect : public EffectProcessorImpl { + public: + AutoGainControlEffect() = default; + + static QString getId(); + static EffectManifestPointer getManifest(); + + void loadEngineEffectParameters( + const QMap& parameters) override; + + void processChannel( + AutoGainControlGroupState* pState, + const CSAMPLE* pInput, + CSAMPLE* pOutput, + const mixxx::EngineParameters& engineParameters, + const EffectEnableState enableState, + const GroupFeatureState& groupFeatures) override; + + private: + QString debugString() const { + return getId(); + } + + EngineEffectParameterPointer m_pThreshold; + EngineEffectParameterPointer m_pTarget; + EngineEffectParameterPointer m_pGain; + EngineEffectParameterPointer m_pKnee; + EngineEffectParameterPointer m_pAttack; + EngineEffectParameterPointer m_pRelease; + + DISALLOW_COPY_AND_ASSIGN(AutoGainControlEffect); + + void applyAutoGainControl(AutoGainControlGroupState* pState, + const mixxx::EngineParameters& engineParameters, + const CSAMPLE* pInput, + CSAMPLE* pOutput); +}; diff --git a/src/effects/backends/builtin/builtinbackend.cpp b/src/effects/backends/builtin/builtinbackend.cpp index b4b71425301a..908440f78132 100644 --- a/src/effects/backends/builtin/builtinbackend.cpp +++ b/src/effects/backends/builtin/builtinbackend.cpp @@ -16,6 +16,7 @@ #ifndef __MACAPPSTORE__ #include "effects/backends/builtin/reverbeffect.h" #endif +#include "effects/backends/builtin/autogaincontroleffect.h" #include "effects/backends/builtin/autopaneffect.h" #include "effects/backends/builtin/compressoreffect.h" #include "effects/backends/builtin/distortioneffect.h" @@ -64,6 +65,7 @@ BuiltInBackend::BuiltInBackend() { registerEffect(); registerEffect(); registerEffect(); + registerEffect(); } std::unique_ptr BuiltInBackend::createProcessor( diff --git a/src/engine/controls/cuecontrol.cpp b/src/engine/controls/cuecontrol.cpp index c625d7cbe7fc..955b23c6aa1e 100644 --- a/src/engine/controls/cuecontrol.cpp +++ b/src/engine/controls/cuecontrol.cpp @@ -7,7 +7,9 @@ #include "mixer/playermanager.h" #include "moc_cuecontrol.cpp" #include "preferences/colorpalettesettings.h" +#include "track/cueinfo.h" #include "track/track.h" +#include "util/assert.h" #include "util/color/predefinedcolorpalettes.h" #include "util/defs.h" #include "vinylcontrol/defs_vinylcontrol.h" @@ -76,6 +78,16 @@ void appendCueHint(gsl::not_null pHintList, const double playPos, H appendCueHint(pHintList, frame, type); } +bool isValidJumpCue(HotcueControl* pControl, + HotcueControl::Status desiredStatus = HotcueControl::Status::Active) { + DEBUG_ASSERT(pControl != nullptr); + return pControl->getCue() != nullptr && + pControl->getCue()->getType() == mixxx::CueType::Jump && + pControl->getStatus() == desiredStatus && + pControl->getPosition().isValid() && + pControl->getEndPosition().isValid(); +} + } // namespace CueControl::CueControl(const QString& group, @@ -139,6 +151,73 @@ CueControl::~CueControl() { qDeleteAll(m_hotcueControls); } +mixxx::audio::FramePos CueControl::nextTrigger(bool reverse, + mixxx::audio::FramePos currentPosition, + mixxx::audio::FramePos* pTargetPosition, + mixxx::audio::FrameDiff_t lookAheadFrames) { + VERIFY_OR_DEBUG_ASSERT(pTargetPosition) { + return mixxx::audio::kInvalidFramePos; + } + *pTargetPosition = mixxx::audio::kInvalidFramePos; + mixxx::audio::FramePos triggerPosition = mixxx::audio::kInvalidFramePos; + HotcueControl* pNextJump = nullptr; + // Find the first saved cue that is next to be played (either first after + // the play position, or first before in playing in reverse) + for (const auto& pControl : std::as_const(m_hotcueControls)) { + if (!isValidJumpCue(pControl)) { + continue; + } + + if (!reverse) { + // Saved jumps store the position to jump from as their end position + if (pControl->getEndPosition() >= currentPosition && + (!triggerPosition.isValid() || pControl->getEndPosition() < triggerPosition)) { + triggerPosition = quantizeCuePoint(pControl->getEndPosition()); + *pTargetPosition = quantizeCuePoint(pControl->getPosition()); + pNextJump = pControl; + } + } else { + // Saved jumps store the position to jump from as their end + // position, but here we want to take the jump backward + if (pControl->getPosition() <= currentPosition && + (!triggerPosition.isValid() || pControl->getPosition() > triggerPosition)) { + triggerPosition = quantizeCuePoint(pControl->getPosition()); + *pTargetPosition = quantizeCuePoint(pControl->getEndPosition()); + pNextJump = pControl; + } + } + } + + if (pNextJump != nullptr && + pNextJump->getPosition() < pNextJump->getEndPosition() && + currentPosition + lookAheadFrames > pNextJump->getEndPosition()) { + // If the saved jump is backward, we reset the Active status after the jump + // to prevent jumping again like a loop + pNextJump->setStatus(HotcueControl::Status::Set); + } + return triggerPosition; +} + +void CueControl::notifySeek(mixxx::audio::FramePos position) { + // Iterate over all the hotcues to find saved jump. If we sought inside the + // jump range, ensure the jump is disabled to prevent double seek + for (const auto& pControl : std::as_const(m_hotcueControls)) { + if (!isValidJumpCue(pControl)) { + continue; + } + const auto isBackwardJump = pControl->getPosition() > pControl->getEndPosition(); + if (!isBackwardJump && position < pControl->getPosition() && + position >= pControl->getEndPosition()) { + // is in the range of a forward jump + pControl->setStatus(HotcueControl::Status::Set); + } else if (isBackwardJump && position >= pControl->getPosition() && + position < pControl->getEndPosition()) { + // is in the range of a backward jump + pControl->setStatus(HotcueControl::Status::Set); + } + } +} + void CueControl::createControls() { m_pCueSet = std::make_unique(ConfigKey(m_group, "cue_set")); m_pCueSet->setButtonMode(mixxx::control::ButtonMode::Trigger); @@ -672,6 +751,7 @@ void CueControl::loadCuesFromTrack() { pOutroCue = pCue; break; case mixxx::CueType::HotCue: + case mixxx::CueType::Jump: case mixxx::CueType::Loop: { if (pCue->getHotCue() == Cue::kNoHotCue) { continue; @@ -709,7 +789,6 @@ void CueControl::loadCuesFromTrack() { break; } case mixxx::CueType::Beat: - case mixxx::CueType::Jump: case mixxx::CueType::Invalid: default: break; @@ -974,6 +1053,13 @@ void CueControl::hotcueSet(HotcueControl* pControl, double value, HotcueSetMode } else { color = colorFromConfig(ConfigKey("[Controls]", "LoopDefaultColorIndex")); } + } else if (cueType == mixxx::CueType::Jump) { + ConfigKey autoJumpColorsKey("[Controls]", "auto_jump_colors"); + if (getConfig()->getValue(autoJumpColorsKey, false)) { + color = m_colorPaletteSettings.getHotcueColorPalette().colorForHotcueIndex(hotcueIndex); + } else { + color = colorFromConfig(ConfigKey("[Controls]", "jump_default_color_index")); + } } else { ConfigKey autoHotcueColorsKey("[Controls]", "auto_hotcue_colors"); if (getConfig()->getValue(autoHotcueColorsKey, false)) { @@ -1165,6 +1251,21 @@ void CueControl::hotcueActivate(HotcueControl* pControl, double value, HotcueSet setLoop(pos.startPosition, pos.endPosition, !loopActive); } break; + case mixxx::CueType::Jump: + // If the play position is after the jump departure (cue + // end), triggering the hotcue will make it behave like a + // normal hotcue + if (getEngineBuffer() != nullptr && + getEngineBuffer()->getPlayPos() > + pCue->getEndPosition()) { + hotcueGoto(pControl, value); + } else if (pControl->getStatus() != + HotcueControl::Status::Active) { + pControl->setStatus(HotcueControl::Status::Active); + } else { + pControl->setStatus(HotcueControl::Status::Set); + } + break; default: DEBUG_ASSERT(!"Invalid CueType!"); } @@ -1336,6 +1437,9 @@ void CueControl::hintReader(gsl::not_null pHintList) { // constructor and getPosition()->get() is a ControlObject for (const auto& pControl : std::as_const(m_hotcueControls)) { appendCueHint(pHintList, pControl->getPosition(), Hint::Type::HotCue); + if (isValidJumpCue(pControl, HotcueControl::Status::Set)) { + appendCueHint(pHintList, pControl->getEndPosition(), Hint::Type::HotCue); + } } appendCueHint(pHintList, m_n60dBSoundStartPosition.getValue(), Hint::Type::FirstSound); diff --git a/src/engine/controls/cuecontrol.h b/src/engine/controls/cuecontrol.h index ea1cdf4944d8..0c2eb27ac33a 100644 --- a/src/engine/controls/cuecontrol.h +++ b/src/engine/controls/cuecontrol.h @@ -167,6 +167,7 @@ class HotcueControl : public QObject { std::unique_ptr m_hotcueEndPosition; std::unique_ptr m_pHotcueStatus; std::unique_ptr m_hotcueType; + std::unique_ptr m_hotcueDirection; std::unique_ptr m_hotcueColor; // Hotcue button controls std::unique_ptr m_hotcueSet; @@ -195,6 +196,15 @@ class CueControl : public EngineControl { UserSettingsPointer pConfig); ~CueControl() override; + void notifySeek(mixxx::audio::FramePos position) override; + + /// nextTrigger returns the sample at which the engine will be triggered to + /// take a jump. This is only used for active saved jumps. + virtual mixxx::audio::FramePos nextTrigger(bool reverse, + mixxx::audio::FramePos currentPosition, + mixxx::audio::FramePos* pTargetPosition, + mixxx::audio::FrameDiff_t lookAheadFrames); + void hintReader(gsl::not_null pHintList) override; bool updateIndicatorsAndModifyPlay(bool newPlay, bool oldPlay, bool playPossible); void updateIndicators(); @@ -295,6 +305,10 @@ class CueControl : public EngineControl { int getHotcueFocusIndex() const; mixxx::RgbColor colorFromConfig(const ConfigKey& configKey); + void jumpTo(mixxx::audio::FramePos currentPosition, + mixxx::audio::FramePos source, + mixxx::audio::FramePos target); + UserSettingsPointer m_pConfig; ColorPaletteSettings m_colorPaletteSettings; QAtomicInt m_currentlyPreviewingIndex; @@ -368,6 +382,7 @@ class CueControl : public EngineControl { std::unique_ptr m_pSortHotcuesByPosCompress; QAtomicPointer m_pCurrentSavedLoopControl; + QAtomicPointer m_pCurrentSavedJumpControl; // Tells us which controls map to which hotcue QMap m_controlMap; diff --git a/src/engine/controls/loopingcontrol.cpp b/src/engine/controls/loopingcontrol.cpp index cb1c7436e3c4..f5a099790c70 100644 --- a/src/engine/controls/loopingcontrol.cpp +++ b/src/engine/controls/loopingcontrol.cpp @@ -1309,6 +1309,15 @@ void LoopingControl::slotBeatLoopDeactivate(BeatLoopingControl* pBeatLoopControl void LoopingControl::slotBeatLoopDeactivateRoll(BeatLoopingControl* pBeatLoopControl) { pBeatLoopControl->deactivate(); + + if (!m_bLoopRollActive) { + // beatloop_activate was pressed while rolling and slotBeatLoopToggle() + // did already reset roll status (m_activeLoopRolls, m_bLoopRollActive) + // and EngineBuffer quit slip mode (but didn't seek). + // So nothing to do here, just leave the adopted loop active. + return; + } + const double size = pBeatLoopControl->getSize(); // clang-tidy wants auto to be auto* because QStack inherits from QVector // and QVector::iterator is a pointer type in Qt5, but QStack inherits @@ -1325,18 +1334,15 @@ void LoopingControl::slotBeatLoopDeactivateRoll(BeatLoopingControl* pBeatLoopCon // Make sure slip mode is not turned off if it was turned on // by something that was not a rolling beatloop. - if (m_bLoopRollActive && m_activeLoopRolls.empty()) { + if (m_activeLoopRolls.empty()) { setLoopingEnabled(false); m_pSlipEnabled->set(0); m_bLoopRollActive = false; - } - - // Return to the previous beatlooproll if necessary. - // Else previous regular beatloop if no rolling loops are active. - if (!m_activeLoopRolls.empty()) { - slotBeatLoop(m_activeLoopRolls.top(), m_bLoopRollActive, true); - } else { restoreLoopInfo(); + } else { + // Return to the previous beatlooproll if necessary. + // Else previous regular beatloop if no rolling loops are active. + slotBeatLoop(m_activeLoopRolls.top(), m_bLoopRollActive, true); } } @@ -1694,14 +1700,25 @@ void LoopingControl::slotBeatLoopSizeChangeRequest(double beats) { } void LoopingControl::slotBeatLoopToggle(double pressed) { - if (pressed > 0) { - if (m_bLoopingEnabled) { + if (pressed <= 0) { + return; + } + + if (m_bLoopingEnabled) { + // If we're in a rolling loop, quit slip mode and adopt it as regular loop. + // Use case is to have a looproll button pressed, then press loop_activate + // and nothing should happen when releasing the looproll button. + if (m_bLoopRollActive) { + m_bLoopRollActive = false; + m_activeLoopRolls.clear(); + getEngineBuffer()->slipQuitAndAdopt(); + } else { // Deactivate the loop if we're already looping setLoopingEnabled(false); - } else { - // Create a loop at current position - slotBeatLoop(m_pCOBeatLoopSize->get()); } + } else { + // Create a loop at current position + slotBeatLoop(m_pCOBeatLoopSize->get()); } } @@ -1723,6 +1740,14 @@ void LoopingControl::slotBeatLoopRollActivate(double pressed) { m_bLoopRollActive = true; } } else { + if (!m_bLoopRollActive) { + // beatloop_activate was pressed while rolling and slotBeatLoopToggle() + // did already reset roll status (m_activeLoopRolls, m_bLoopRollActive) + // and EngineBuffer quit slip mode (but didn't seek). + // So nothing to do here, just leave the adopted loop active. + return; + } + setLoopingEnabled(false); // Make sure slip mode is not turned off if it was turned on // by something that was not a rolling beatloop. diff --git a/src/engine/enginebuffer.cpp b/src/engine/enginebuffer.cpp index 4b46c0dc4c3c..cb4f2ae4a1c1 100644 --- a/src/engine/enginebuffer.cpp +++ b/src/engine/enginebuffer.cpp @@ -92,6 +92,7 @@ EngineBuffer::EngineBuffer(const QString& group, m_iSeekPhaseQueued(0), m_iEnableSyncQueued(SYNC_REQUEST_NONE), m_iSyncModeQueued(static_cast(SyncMode::Invalid)), + m_slipQuitAndAdopt(0), m_bPlayAfterLoading(false), m_channelCount(mixxx::kEngineChannelOutputCount), m_pCrossfadeBuffer(SampleUtil::alloc( @@ -265,7 +266,8 @@ EngineBuffer::EngineBuffer(const QString& group, Qt::DirectConnection); m_pReadAheadManager = new ReadAheadManager(m_pReader, - m_pLoopingControl); + m_pLoopingControl, + m_pCueControl); m_pReadAheadManager->addRateControl(m_pRateControl); m_pKeylockEngine = new ControlProxy(kAppGroup, QStringLiteral("keylock_engine"), this); @@ -884,6 +886,11 @@ void EngineBuffer::slotKeylockEngineChanged(double dIndex) { } } +void EngineBuffer::slipQuitAndAdopt() { + m_slipQuitAndAdopt.storeRelease(1); + m_pSlipButton->set(0); +} + void EngineBuffer::processTrackLocked( CSAMPLE* pOutput, const std::size_t bufferSize, mixxx::audio::SampleRate sampleRate) { ScopedTimer t(QStringLiteral("EngineBuffer::process_pauselock")); @@ -1277,8 +1284,12 @@ void EngineBuffer::processSlip(std::size_t bufferSize) { m_slipPos = m_playPos; m_dSlipRate = m_rate_old; } else { - // TODO(owen) assuming that looping will get canceled properly - seekExact(m_slipPos.toNearestFrameBoundary()); + // If m_slipQuitAndAdopt is 1 we've already quit slip mode + // but we don't seek in that case. + if (m_slipQuitAndAdopt.fetchAndStoreAcquire(0) == 0) { + // TODO(owen) assuming that looping will get canceled properly + seekExact(m_slipPos.toNearestFrameBoundary()); + } m_slipPos = mixxx::audio::kStartFramePos; } } diff --git a/src/engine/enginebuffer.h b/src/engine/enginebuffer.h index 74b6c4155e79..65bd095bc134 100644 --- a/src/engine/enginebuffer.h +++ b/src/engine/enginebuffer.h @@ -90,6 +90,7 @@ class EngineBuffer : public EngineObject { RubberBandFiner = 2, #endif }; + Q_ENUM(KeylockEngine); // intended for iteration over the KeylockEngine enum constexpr static std::initializer_list kKeylockEngines = { @@ -115,6 +116,9 @@ class EngineBuffer : public EngineObject { mixxx::audio::ChannelCount getChannelCount() const { return m_channelCount; } + mixxx::audio::FramePos getPlayPos() const { + return m_playPos; + } bool getScratching() const; bool isReverse() const; /// Returns current bpm value (not thread-safe) @@ -240,6 +244,8 @@ class EngineBuffer : public EngineObject { void verifyPlay(); + void slipQuitAndAdopt(); + public slots: void slotControlPlayRequest(double); void slotControlPlayFromStart(double); @@ -471,6 +477,7 @@ class EngineBuffer : public EngineObject { ControlValueAtomic m_queuedSeek; bool m_previousBufferSeek = false; + QAtomicInt m_slipQuitAndAdopt; /// Indicates that no seek is queued static constexpr QueuedSeek kNoQueuedSeek = {mixxx::audio::kInvalidFramePos, SEEK_NONE}; /// indicates a clone seek on a bosition from another deck diff --git a/src/engine/readaheadmanager.cpp b/src/engine/readaheadmanager.cpp index 7a9a6b7c4c40..0838f6b036c5 100644 --- a/src/engine/readaheadmanager.cpp +++ b/src/engine/readaheadmanager.cpp @@ -1,6 +1,8 @@ #include "engine/readaheadmanager.h" +#include "audio/frame.h" #include "engine/cachingreader/cachingreader.h" +#include "engine/controls/cuecontrol.h" #include "engine/controls/loopingcontrol.h" #include "engine/controls/ratecontrol.h" #include "util/defs.h" @@ -8,6 +10,7 @@ ReadAheadManager::ReadAheadManager() : m_pLoopingControl(nullptr), + m_pCueControl(nullptr), m_pRateControl(nullptr), m_currentPosition(0), m_pReader(nullptr), @@ -18,8 +21,10 @@ ReadAheadManager::ReadAheadManager() } ReadAheadManager::ReadAheadManager(CachingReader* pReader, - LoopingControl* pLoopingControl) + LoopingControl* pLoopingControl, + CueControl* pCueControl) : m_pLoopingControl(pLoopingControl), + m_pCueControl(pCueControl), m_pRateControl(nullptr), m_currentPosition(0), m_pReader(pReader), @@ -27,6 +32,7 @@ ReadAheadManager::ReadAheadManager(CachingReader* pReader, m_cacheMissCount(0), m_cacheMissExpected(false) { DEBUG_ASSERT(m_pLoopingControl != nullptr); + DEBUG_ASSERT(m_pCueControl != nullptr); DEBUG_ASSERT(m_pReader != nullptr); } @@ -56,27 +62,73 @@ SINT ReadAheadManager::getNextSamples(double dRate, m_currentPosition, channelCount), &targetPosition); const double loop_trigger = loopTriggerPosition.toSamplePosMaybeInvalid(channelCount); - const double target = targetPosition.toSamplePosMaybeInvalid(channelCount); + double target = targetPosition.toSamplePosMaybeInvalid(channelCount); - SINT preloop_samples = 0; - double samplesToLoopTrigger = 0.0; + SINT preseek_samples = 0; + double samplesToSeekTrigger = 0.0; bool reachedTrigger = false; + // By default, we are reading as many sampler as requested SINT samples_from_reader = requested_samples; if (loop_trigger != kNoTrigger) { - samplesToLoopTrigger = in_reverse ? - m_currentPosition - loop_trigger : - loop_trigger - m_currentPosition; - if (samplesToLoopTrigger >= 0.0) { + samplesToSeekTrigger = in_reverse ? m_currentPosition - loop_trigger + : loop_trigger - m_currentPosition; + if (samplesToSeekTrigger >= 0.0) { // We can only read whole frames from the reader. // Use ceil here, to be sure to reach the loop trigger. - preloop_samples = SampleUtil::ceilPlayPosToFrameStart( - samplesToLoopTrigger, channelCount); + preseek_samples = SampleUtil::ceilPlayPosToFrameStart( + samplesToSeekTrigger, channelCount); // clamp requested samples from the caller to the loop trigger point - if (preloop_samples <= requested_samples) { + if (preseek_samples <= requested_samples) { reachedTrigger = true; - samples_from_reader = preloop_samples; + samples_from_reader = preseek_samples; + } + } + } + + mixxx::audio::FramePos jumpTargetPosition; + // A saved jump cue will only limit the amount we can read in one shot. + const mixxx::audio::FramePos jumpTriggerPosition = + m_pCueControl->nextTrigger(in_reverse, + mixxx::audio::FramePos::fromSamplePosMaybeInvalid( + m_currentPosition, channelCount), + &jumpTargetPosition, + static_cast(requested_samples / channelCount)); + double jump_trigger = jumpTriggerPosition.toSamplePosMaybeInvalid(channelCount); + + // If there is both a loop and saved jump that are armed, and they both + // cancel each other (Loop from A -> B, jump from A -> B), we no-op the jump + // to prevent an infinite silent play loop + if (jump_trigger != kNoTrigger && loop_trigger != kNoTrigger && + jumpTriggerPosition == targetPosition && + loopTriggerPosition == jumpTargetPosition) { + jump_trigger = kNoTrigger; + } + + SINT prejump_samples = 0; + double samplesToJumpTrigger = 0.0; + + if (jump_trigger != kNoTrigger) { + samplesToJumpTrigger = in_reverse ? m_currentPosition - jump_trigger + : jump_trigger - m_currentPosition; + if (samplesToJumpTrigger >= 0.0) { + // We can only read whole frames from the reader. + // Use ceil here, to be sure to reach the jump trigger. + prejump_samples = SampleUtil::ceilPlayPosToFrameStart( + samplesToJumpTrigger, channelCount); + // clamp requested samples from the caller to the jump trigger point + if (prejump_samples <= requested_samples) { + reachedTrigger = true; + // A loop end may be before the jump. If the jump is first, this + // should be our new target + if (loop_trigger == kNoTrigger || prejump_samples < preseek_samples) { + samples_from_reader = prejump_samples; + preseek_samples = prejump_samples; + samplesToSeekTrigger = samplesToJumpTrigger; + target = jumpTargetPosition.toSamplePosMaybeInvalid(channelCount); + targetPosition = jumpTargetPosition; + } } } } @@ -129,15 +181,18 @@ SINT ReadAheadManager::getNextSamples(double dRate, if (reachedTrigger) { DEBUG_ASSERT(target != kNoTrigger); if (m_pRateControl) { - m_pRateControl->notifyWrapAround(loopTriggerPosition, targetPosition); + m_pRateControl->notifyWrapAround(loopTriggerPosition.isValid() + ? loopTriggerPosition + : jumpTriggerPosition, + targetPosition); } // TODO probably also useful for hotcue_X_indicator in CueControl::updateIndicators() // Jump to other end of loop or track. m_currentPosition = target; - if (preloop_samples > 0) { + if (preseek_samples > 0) { // we are up to one frame ahead of the loop trigger - double overshoot = preloop_samples - samplesToLoopTrigger; + double overshoot = preseek_samples - samplesToSeekTrigger; // start the loop later accordingly to be sure the loop length is as desired // e.g. exactly one bar. m_currentPosition += overshoot; @@ -153,32 +208,32 @@ SINT ReadAheadManager::getNextSamples(double dRate, // Average preloop_samples = 2.2 } - // start reading before the loop start point, to crossfade these samples + // start reading before the loop start point or the saved jump, to crossfade these samples // with the samples we need to the loop end - int loop_read_position = SampleUtil::roundPlayPosToFrameStart( + int seek_read_position = SampleUtil::roundPlayPosToFrameStart( m_currentPosition + - (in_reverse ? preloop_samples : -preloop_samples), + (in_reverse ? preseek_samples : -preseek_samples), channelCount); int crossFadeStart = 0; int crossFadeSamples = samples_from_reader; - if (loop_read_position < 0) { + if (seek_read_position < 0) { // we start in the pre-role without suitable samples for crossfading - crossFadeStart = -loop_read_position; + crossFadeStart = -seek_read_position; crossFadeSamples -= crossFadeStart; } else { int trackSamples = static_cast( m_pLoopingControl->getTrackFrame().toSamplePos( channelCount)); - if (loop_read_position > trackSamples) { + if (seek_read_position > trackSamples) { // looping in reverse overlapping post-roll without samples - crossFadeStart = loop_read_position - trackSamples; + crossFadeStart = seek_read_position - trackSamples; crossFadeSamples -= crossFadeStart; } } if (crossFadeSamples > 0) { - const auto readResult = m_pReader->read(loop_read_position + + const auto readResult = m_pReader->read(seek_read_position + (in_reverse ? crossFadeStart : -crossFadeStart), crossFadeSamples, in_reverse, diff --git a/src/engine/readaheadmanager.h b/src/engine/readaheadmanager.h index 265a9b94044c..36db44263116 100644 --- a/src/engine/readaheadmanager.h +++ b/src/engine/readaheadmanager.h @@ -9,6 +9,7 @@ #include "util/types.h" class LoopingControl; +class CueControl; class RateControl; /// ReadAheadManager is a tool for keeping track of the engine's current position @@ -23,7 +24,9 @@ class RateControl; class ReadAheadManager { public: ReadAheadManager(); // Only for testing: ReadAheadManagerMock - ReadAheadManager(CachingReader* pReader, LoopingControl* pLoopingControl); + ReadAheadManager(CachingReader* reader, + LoopingControl* pLoopingControl, + CueControl* pCueControl); virtual ~ReadAheadManager(); /// Call this method to fill buffer with requested_samples out of the @@ -122,6 +125,7 @@ class ReadAheadManager { double virtualPlaypositionEndNonInclusive); LoopingControl* m_pLoopingControl; + CueControl* m_pCueControl; RateControl* m_pRateControl; std::list m_readAheadLog; double m_currentPosition; // In absolute samples diff --git a/src/engine/sidechain/enginerecord.cpp b/src/engine/sidechain/enginerecord.cpp index a60e982258ba..5eac865eb0fa 100644 --- a/src/engine/sidechain/enginerecord.cpp +++ b/src/engine/sidechain/enginerecord.cpp @@ -18,7 +18,8 @@ EngineRecord::EngineRecord(UserSettingsPointer pConfig) m_recordedDuration(0), m_iMetaDataLife(0), m_cueTrack(0), - m_bCueIsEnabled(false) { + m_bCueIsEnabled(false), + m_bCueUsesFileAnnotation(false) { m_pRecReady = new ControlProxy(RECORDING_PREF_KEY, "status", this); m_sampleRate = mixxx::audio::SampleRate::fromDouble(m_sampleRateControl.get()); } @@ -35,7 +36,10 @@ int EngineRecord::updateFromPreferences() { m_baAuthor = m_pConfig->getValueString(ConfigKey(RECORDING_PREF_KEY, "Author")); m_baAlbum = m_pConfig->getValueString(ConfigKey(RECORDING_PREF_KEY, "Album")); m_cueFileName = m_pConfig->getValueString(ConfigKey(RECORDING_PREF_KEY, "CuePath")); - m_bCueIsEnabled = m_pConfig->getValueString(ConfigKey(RECORDING_PREF_KEY, "CueEnabled")).toInt(); + m_bCueIsEnabled = m_pConfig->getValue( + ConfigKey(RECORDING_PREF_KEY, QStringLiteral("CueEnabled"))); + m_bCueUsesFileAnnotation = m_pConfig->getValue( + ConfigKey(RECORDING_PREF_KEY, QStringLiteral("cue_file_annotation_enabled"))); m_sampleRate = mixxx::audio::SampleRate::fromDouble(m_sampleRateControl.get()); // Delete m_pEncoder if it has been initialized (with maybe) different bitrate. @@ -239,16 +243,22 @@ void EngineRecord::writeCueLine() { ((m_frames / (m_sampleRate / 75))) % 75); - m_cueFile.write(QString(" TRACK %1 AUDIO\n") - .arg((double)m_cueTrack, 2, 'f', 0, '0') - .toUtf8()); + m_cueFile.write(QStringLiteral(" TRACK %1 AUDIO\n") + .arg((double)m_cueTrack, 2, 'f', 0, '0') + .toUtf8()); - m_cueFile.write(QString(" TITLE \"%1\"\n") - .arg(m_pCurrentTrack->getTitle()) - .toUtf8()); - m_cueFile.write(QString(" PERFORMER \"%1\"\n") - .arg(m_pCurrentTrack->getArtist()) - .toUtf8()); + m_cueFile.write(QStringLiteral(" TITLE \"%1\"\n") + .arg(m_pCurrentTrack->getTitle()) + .toUtf8()); + m_cueFile.write(QStringLiteral(" PERFORMER \"%1\"\n") + .arg(m_pCurrentTrack->getArtist()) + .toUtf8()); + + if (m_bCueUsesFileAnnotation) { + m_cueFile.write(QStringLiteral(" FILE \"%1\"\n") + .arg(m_pCurrentTrack->getLocation()) + .toUtf8()); + } // Woefully inaccurate (at the seconds level anyways). // We'd need a signal fired state tracker diff --git a/src/engine/sidechain/enginerecord.h b/src/engine/sidechain/enginerecord.h index 53e110cd854f..2c0e8b6c903e 100644 --- a/src/engine/sidechain/enginerecord.h +++ b/src/engine/sidechain/enginerecord.h @@ -85,4 +85,5 @@ class EngineRecord : public QObject, public EncoderCallback, public SideChainWor QString m_cueFileName; quint64 m_cueTrack; bool m_bCueIsEnabled; + bool m_bCueUsesFileAnnotation; }; diff --git a/src/engine/sidechain/shoutconnection.cpp b/src/engine/sidechain/shoutconnection.cpp index 167e4915fcf4..5cce4521a38c 100644 --- a/src/engine/sidechain/shoutconnection.cpp +++ b/src/engine/sidechain/shoutconnection.cpp @@ -1,6 +1,5 @@ #include "engine/sidechain/shoutconnection.h" -#include #include #include @@ -35,9 +34,6 @@ constexpr int kMaxNetworkCache = 491520; // 10 s mp3 @ 192 kbit/s // http://wiki.shoutcast.com/wiki/SHOUTcast_DNAS_Server_2 constexpr int kMaxShoutFailures = 3; -const QRegularExpression kArtistOrTitleRegex(QStringLiteral("\\$artist|\\$title")); -const QRegularExpression kArtistRegex(QStringLiteral("\\$artist")); - const mixxx::Logger kLogger("ShoutConnection"); } // namespace @@ -816,9 +812,7 @@ void ShoutConnection::updateMetaData() { // metadata being enabled, we want dynamic metadata changes if (!m_custom_metadata && (m_format_is_mp3 || m_format_is_aac || m_ogg_dynamic_update)) { if (m_pMetaData != nullptr) { - QString artist = m_pMetaData->getArtist(); - QString title = m_pMetaData->getTitle(); // shoutcast uses only "song" as field for "artist - title". // icecast2 supports separate fields for "artist" and "title", @@ -831,41 +825,24 @@ void ShoutConnection::updateMetaData() { // Also I do not know about icecast1. To be safe, i stick to the // old way for those use cases. if (!m_format_is_mp3 && m_protocol_is_icecast2) { - setFunctionCode(9); - insertMetaData("artist", encodeString(artist).constData()); - insertMetaData("title", encodeString(title).constData()); - } else { - // we are going to take the metadata format and replace all - // the references to $title and $artist by doing a single - // pass over the string - int replaceIndex = 0; - - // Make a copy so we don't overwrite the references only - // once per streaming session. - QString metadataFinal = m_metadataFormat; - do { - // find the next occurrence - replaceIndex = metadataFinal.indexOf( - kArtistOrTitleRegex, - replaceIndex); - - if (replaceIndex != -1) { - if (metadataFinal.indexOf( - kArtistRegex, replaceIndex) == replaceIndex) { - metadataFinal.replace(replaceIndex, 7, artist); - // skip to the end of the replacement - replaceIndex += artist.length(); - } else { - metadataFinal.replace(replaceIndex, 6, title); - replaceIndex += title.length(); - } - } - } while (replaceIndex != -1); - - QByteArray baSong = encodeString(metadataFinal); - setFunctionCode(10); - insertMetaData("song", baSong.constData()); + setFunctionCode(9); + insertMetaData("artist", encodeString(artist).constData()); } + + // Make a copy so we don't overwrite the references only + // once per streaming session. + QString metadataFinal = m_metadataFormat; + + metadataFinal.replace("$artist", artist); + metadataFinal.replace("$title", m_pMetaData->getTitle()); + metadataFinal.replace("$year", m_pMetaData->getYear()); + metadataFinal.replace("$album", m_pMetaData->getAlbum()); + metadataFinal.replace("$genre", m_pMetaData->getGenre()); + metadataFinal.replace("$bpm", QString::number(m_pMetaData->getBpm())); + + QByteArray baSong = encodeString(metadataFinal); + setFunctionCode(10); + insertMetaData("song", baSong.constData()); setFunctionCode(11); int ret = shout_set_metadata(m_pShout, m_pShoutMetaData); if (ret != SHOUTERR_SUCCESS) { diff --git a/src/library/autodj/autodjfeature.cpp b/src/library/autodj/autodjfeature.cpp index a004dfa7f44c..03d745ef5490 100644 --- a/src/library/autodj/autodjfeature.cpp +++ b/src/library/autodj/autodjfeature.cpp @@ -22,12 +22,6 @@ #include "widget/wlibrary.h" #include "widget/wlibrarysidebar.h" -namespace { - -const QString kViewName = QStringLiteral("Auto DJ"); - -} // namespace - namespace { constexpr int kMaxRetrieveAttempts = 3; @@ -55,6 +49,7 @@ AutoDJFeature::AutoDJFeature(Library* pLibrary, m_pAutoDJProcessor(nullptr), m_pSidebarModel(make_parented(this)), m_pAutoDJView(nullptr), + m_viewName(Library::kAutoDJViewName), m_autoDjCratesDao(m_iAutoDJPlaylistId, pLibrary->trackCollectionManager(), m_pConfig) { qRegisterMetaType("AutoDJState"); m_pAutoDJProcessor = new AutoDJProcessor(this, @@ -152,7 +147,7 @@ void AutoDJFeature::bindLibraryWidget( m_pLibrary, m_pAutoDJProcessor, keyboard); - libraryWidget->registerView(kViewName, m_pAutoDJView); + libraryWidget->registerView(m_viewName, m_pAutoDJView); connect(m_pAutoDJView, &DlgAutoDJ::loadTrack, this, @@ -196,7 +191,7 @@ TreeItemModel* AutoDJFeature::sidebarModel() const { void AutoDJFeature::activate() { //qDebug() << "AutoDJFeature::activate()"; - emit switchToView(kViewName); + emit switchToView(m_viewName); emit disableSearch(); emit enableCoverArtDisplay(true); } diff --git a/src/library/autodj/autodjfeature.h b/src/library/autodj/autodjfeature.h index f17f44785039..53edd691426b 100644 --- a/src/library/autodj/autodjfeature.h +++ b/src/library/autodj/autodjfeature.h @@ -65,6 +65,7 @@ class AutoDJFeature : public LibraryFeature { AutoDJProcessor* m_pAutoDJProcessor; parented_ptr m_pSidebarModel; DlgAutoDJ* m_pAutoDJView; + const QString m_viewName; // Initialize the list of crates loaded into the auto-DJ queue. void constructCrateChildModel(); diff --git a/src/library/browse/browsetablemodel.cpp b/src/library/browse/browsetablemodel.cpp index dfd259448205..06b98574e78d 100644 --- a/src/library/browse/browsetablemodel.cpp +++ b/src/library/browse/browsetablemodel.cpp @@ -219,7 +219,9 @@ TrackPointer BrowseTableModel::getTrack(const QModelIndex& index) const { } TrackPointer BrowseTableModel::getTrackByRef(const TrackRef& trackRef) const { - if (m_pRecordingManager->getRecordingLocation() == trackRef.getLocation()) { + if (m_pRecordingManager && + m_pRecordingManager->getRecordingLocation() == + trackRef.getLocation()) { QMessageBox::critical(nullptr, tr("Mixxx Library"), tr("Could not load the following file because it is in use by " diff --git a/src/library/dao/playlistdao.cpp b/src/library/dao/playlistdao.cpp index c5270cc8422c..e86180a7e12f 100644 --- a/src/library/dao/playlistdao.cpp +++ b/src/library/dao/playlistdao.cpp @@ -1128,6 +1128,45 @@ int PlaylistDAO::tracksInPlaylist(const int playlistId) const { return count; } +void PlaylistDAO::orderTracksByCurrPos(const int playlistId, + QList>& newOrder) { + if (newOrder.isEmpty() || + playlistId == kInvalidPlaylistId || + isPlaylistLocked(playlistId) || + newOrder.size() != tracksInPlaylist(playlistId)) { + return; + } + + ScopedTransaction transaction(m_database); + QSqlQuery query(m_database); + query.prepare(QStringLiteral( + "UPDATE PlaylistTracks " + "SET position=:new_pos " + "WHERE position=:old_pos AND " + "track_id=:track_id AND " + "playlist_id=:pl_id")); + int newPos = 1; + for (auto [trackId, oldPos] : newOrder) { + VERIFY_OR_DEBUG_ASSERT(trackId.isValid()) { + return; + } + query.bindValue(":new_pos", newPos++); + query.bindValue(":old_pos", oldPos); + query.bindValue(":track_id", trackId.toVariant()); + query.bindValue(":pl_id", playlistId); + if (!query.exec()) { + // We temporarily have duplicate positions, so abort the entire operation + // to not leave the playlist with an invalid state. + LOG_FAILED_QUERY(query); + return; + } + } + + transaction.commit(); + + emit tracksMoved(QSet{playlistId}); +} + void PlaylistDAO::moveTrack(const int playlistId, const int oldPosition, const int newPosition) { ScopedTransaction transaction(m_database); QSqlQuery query(m_database); diff --git a/src/library/dao/playlistdao.h b/src/library/dao/playlistdao.h index f963cb03a806..9d95a80d5cbe 100644 --- a/src/library/dao/playlistdao.h +++ b/src/library/dao/playlistdao.h @@ -111,6 +111,10 @@ class PlaylistDAO : public QObject, public virtual DAO { bool copyPlaylistTracks(const int sourcePlaylistID, const int targetPlaylistID); // Returns the number of tracks in the given playlist. int tracksInPlaylist(const int playlistId) const; + // This receives a track list that represents the current order (sorted by BPM for example) + // and adopts this order for `position` in the playlist. + // Returns true on success. + void orderTracksByCurrPos(const int playlistId, QList>& newOrder); // moved Track to a new position void moveTrack(const int playlistId, const int oldPosition, const int newPosition); diff --git a/src/library/dlgtrackinfo.cpp b/src/library/dlgtrackinfo.cpp index 96389d5a7305..c1ddc55b983f 100644 --- a/src/library/dlgtrackinfo.cpp +++ b/src/library/dlgtrackinfo.cpp @@ -394,6 +394,13 @@ void DlgTrackInfo::replaceTrackRecord( mixxx::localDateTimeFromUtc( m_trackRecord.getDateAdded()))); + QFileInfo info(trackLocation); + if (info.exists() && info.isFile()) { + int size = info.size(); + QString sizeStr = QLocale().formattedDataSize(size); + txtFileSize->setText(sizeStr); + } + updateTrackMetadataFields(); } diff --git a/src/library/dlgtrackinfo.ui b/src/library/dlgtrackinfo.ui index 63f6f25524a4..959885d783ab 100644 --- a/src/library/dlgtrackinfo.ui +++ b/src/library/dlgtrackinfo.ui @@ -564,14 +564,14 @@ - + - Date added: + ReplayGain: - + 75 @@ -609,14 +609,38 @@ - + - ReplayGain: + Date added: - + + + + 75 + true + + + + + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + Filesize: + + + + + 75 diff --git a/src/library/library.cpp b/src/library/library.cpp index e8161bf9dc62..cf86c4132186 100644 --- a/src/library/library.cpp +++ b/src/library/library.cpp @@ -51,7 +51,9 @@ using namespace mixxx::library::prefs; // This is the name which we use to register the WTrackTableView with the // WLibrary -const QString Library::m_sTrackViewName = QString("WTrackTableView"); +const QString Library::m_sTrackViewName = QStringLiteral("WTrackTableView"); + +const QString Library::kAutoDJViewName = QStringLiteral("Auto DJ"); // The default row height of the library. const int Library::kDefaultRowHeightPx = 20; @@ -70,15 +72,10 @@ Library::Library( m_pSidebarModel(make_parented(this)), m_pLibraryControl(make_parented(this)), m_pLibraryWidget(nullptr), - m_pMixxxLibraryFeature(nullptr), - m_pPlaylistFeature(nullptr), - m_pCrateFeature(nullptr), - m_pAnalysisFeature(nullptr) { + m_pKeyNotation(std::make_unique( + mixxx::library::prefs::kKeyNotationConfigKey)) { qRegisterMetaType("LibraryRemovalType"); - m_pKeyNotation.reset( - new ControlObject(mixxx::library::prefs::kKeyNotationConfigKey)); - connect(m_pTrackCollectionManager, &TrackCollectionManager::libraryScanFinished, this, @@ -86,7 +83,7 @@ Library::Library( // TODO(rryan) -- turn this construction / adding of features into a static // method or something -- CreateDefaultLibrary - m_pMixxxLibraryFeature = new MixxxLibraryFeature( + m_pMixxxLibraryFeature = make_parented( this, m_pConfig); addFeature(m_pMixxxLibraryFeature); @@ -98,9 +95,10 @@ Library::Library( Qt::DirectConnection /* signal-to-signal */); #endif - addFeature(new AutoDJFeature(this, m_pConfig, pPlayerManager)); + m_pAutoDJFeature = make_parented(this, m_pConfig, pPlayerManager); + addFeature(m_pAutoDJFeature); - m_pPlaylistFeature = new PlaylistFeature(this, UserSettingsPointer(m_pConfig)); + m_pPlaylistFeature = make_parented(this, UserSettingsPointer(m_pConfig)); addFeature(m_pPlaylistFeature); #ifdef __ENGINEPRIME__ connect(m_pPlaylistFeature, @@ -115,7 +113,7 @@ Library::Library( Qt::DirectConnection); #endif - m_pCrateFeature = new CrateFeature(this, m_pConfig); + m_pCrateFeature = make_parented(this, m_pConfig); addFeature(m_pCrateFeature); #ifdef __ENGINEPRIME__ connect(m_pCrateFeature, @@ -130,7 +128,7 @@ Library::Library( Qt::DirectConnection); #endif - m_pBrowseFeature = new BrowseFeature( + m_pBrowseFeature = make_parented( this, m_pConfig, pRecordingManager); connect(m_pBrowseFeature, &BrowseFeature::scanLibrary, @@ -150,7 +148,7 @@ Library::Library( addFeature(new SetlogFeature(this, UserSettingsPointer(m_pConfig))); - m_pAnalysisFeature = new AnalysisFeature(this, m_pConfig); + m_pAnalysisFeature = make_parented(this, m_pConfig); connect(m_pPlaylistFeature, &PlaylistFeature::analyzeTracks, m_pAnalysisFeature, @@ -745,13 +743,34 @@ void Library::setEditMetadataSelectedClick(bool enabled) { emit setSelectedClick(enabled); } +void Library::slotSearchInCurrentView() { + m_pLibraryControl->setLibraryFocus(FocusWidget::Searchbar, Qt::ShortcutFocusReason); +} + +void Library::slotSearchInAllTracks() { + searchTracksInCollection(); +} + +void Library::searchTracksInCollection() { + VERIFY_OR_DEBUG_ASSERT(m_pMixxxLibraryFeature) { + return; + } + m_pMixxxLibraryFeature->selectAndActivate(); + m_pLibraryControl->setLibraryFocus(FocusWidget::Searchbar, Qt::ShortcutFocusReason); +} + void Library::searchTracksInCollection(const QString& query) { VERIFY_OR_DEBUG_ASSERT(m_pMixxxLibraryFeature) { return; } m_pMixxxLibraryFeature->searchAndActivate(query); - emit switchToView(m_sTrackViewName); - m_pSidebarModel->activateDefaultSelection(); +} + +void Library::showAutoDJ() { + m_pAutoDJFeature->activate(); + emit switchToView(kAutoDJViewName); + // Select it but don't scroll there + m_pSidebarModel->slotFeatureSelect(m_pAutoDJFeature, QModelIndex(), false); } #ifdef __ENGINEPRIME__ diff --git a/src/library/library.h b/src/library/library.h index 2598498da97a..5ca62117992f 100644 --- a/src/library/library.h +++ b/src/library/library.h @@ -16,6 +16,7 @@ #include "util/parented_ptr.h" class AnalysisFeature; +class AutoDJFeature; class BrowseFeature; class ControlObject; class CrateFeature; @@ -98,9 +99,16 @@ class Library: public QObject { void setRowHeight(int rowHeight); void setEditMetadataSelectedClick(bool enable); + /// Switches to the internal track collection view + /// and focuses the search box. + void searchTracksInCollection(); + /// Triggers a new search in the internal track collection /// and shows the results by switching the view. void searchTracksInCollection(const QString& query); + void showAutoDJ(); + + static const QString kAutoDJViewName; bool requestAddDir(const QString& directory); bool requestRemoveDir(const QString& directory, LibraryRemovalType removalType); @@ -126,6 +134,8 @@ class Library: public QObject { void slotRefreshLibraryModels(); void slotCreatePlaylist(); void slotCreateCrate(); + void slotSearchInCurrentView(); + void slotSearchInAllTracks(); void onSkinLoadFinished(); void slotSaveCurrentViewState() const; void slotRestoreCurrentViewState() const; @@ -184,15 +194,15 @@ class Library: public QObject { QList m_features; const static QString m_sTrackViewName; - const static QString m_sAutoDJViewName; WLibrary* m_pLibraryWidget; - MixxxLibraryFeature* m_pMixxxLibraryFeature; - PlaylistFeature* m_pPlaylistFeature; - CrateFeature* m_pCrateFeature; - AnalysisFeature* m_pAnalysisFeature; - BrowseFeature* m_pBrowseFeature; + parented_ptr m_pMixxxLibraryFeature; + parented_ptr m_pAutoDJFeature; + parented_ptr m_pPlaylistFeature; + parented_ptr m_pCrateFeature; + parented_ptr m_pBrowseFeature; + parented_ptr m_pAnalysisFeature; QFont m_trackTableFont; int m_iTrackTableRowHeight; bool m_editMetadataSelectedClick; - QScopedPointer m_pKeyNotation; + std::unique_ptr m_pKeyNotation; }; diff --git a/src/library/librarycontrol.cpp b/src/library/librarycontrol.cpp index 6f0f9d70e95d..8fa7b60cae3b 100644 --- a/src/library/librarycontrol.cpp +++ b/src/library/librarycontrol.cpp @@ -956,15 +956,11 @@ FocusWidget LibraryControl::getFocusedWidget() { } } -void LibraryControl::setLibraryFocus(FocusWidget newFocusWidget) { - if (!QApplication::focusWindow()) { - qInfo() << "No Mixxx window, popup or menu has focus." - << "Don't attempt to focus a specific widget."; - return; - } - - // ignore no-op - if (newFocusWidget == m_focusedWidget) { +void LibraryControl::setLibraryFocus(FocusWidget newFocusWidget, Qt::FocusReason focusReason) { + // The search box wants to do special handling when the Ctrl+f is used + // while it is already focused. Non-shortcut cases should still be a + // no-op when a control is already focused. + if (newFocusWidget == m_focusedWidget && focusReason != Qt::ShortcutFocusReason) { return; } @@ -973,13 +969,13 @@ void LibraryControl::setLibraryFocus(FocusWidget newFocusWidget) { VERIFY_OR_DEBUG_ASSERT(m_pSearchbox) { return; } - m_pSearchbox->setFocus(); + m_pSearchbox->setFocus(focusReason); return; case FocusWidget::Sidebar: VERIFY_OR_DEBUG_ASSERT(m_pSidebarWidget) { return; } - m_pSidebarWidget->setFocus(); + m_pSidebarWidget->setFocus(focusReason); return; case FocusWidget::TracksTable: VERIFY_OR_DEBUG_ASSERT(m_pLibraryWidget) { diff --git a/src/library/librarycontrol.h b/src/library/librarycontrol.h index 2511cb0db3a6..ecf6e1370bc9 100644 --- a/src/library/librarycontrol.h +++ b/src/library/librarycontrol.h @@ -58,8 +58,9 @@ class LibraryControl : public QObject { void bindLibraryWidget(WLibrary* pLibrary, KeyboardEventFilter* pKeyboard); void bindSidebarWidget(WLibrarySidebar* pLibrarySidebar); void bindSearchboxWidget(WSearchLineEdit* pSearchbox); - // Give the keyboard focus to one of the library widgets - void setLibraryFocus(FocusWidget newFocusWidget); + /// Give the keyboard focus to one of the library widgets + void setLibraryFocus(FocusWidget newFocusWidget, + Qt::FocusReason focusReason = Qt::OtherFocusReason); FocusWidget getFocusedWidget(); signals: diff --git a/src/library/libraryfeature.cpp b/src/library/libraryfeature.cpp index 51ad6ae3fac6..7c88fbf93bdc 100644 --- a/src/library/libraryfeature.cpp +++ b/src/library/libraryfeature.cpp @@ -32,6 +32,17 @@ LibraryFeature::LibraryFeature( } } +void LibraryFeature::selectAndActivate(const QModelIndex& index) { + if (index.isValid()) { + emit featureSelect(this, index); + activateChild(index); + } else { + // calling featureSelect with invalid index will select the root item + emit featureSelect(this, QModelIndex()); + activate(); + } +} + QStringList LibraryFeature::getPlaylistFiles(QFileDialog::FileMode mode) const { QString lastPlaylistDirectory = m_pConfig->getValue( ConfigKey("[Library]", "LastImportExportPlaylistDirectory"), diff --git a/src/library/libraryfeature.h b/src/library/libraryfeature.h index 9a91e748ddda..cfef22ea0569 100644 --- a/src/library/libraryfeature.h +++ b/src/library/libraryfeature.h @@ -106,6 +106,10 @@ class LibraryFeature : public QObject { const UserSettingsPointer m_pConfig; public slots: + /// Pretend that the user has clicked on a tree item belonging + /// to this LibraryFeature by updating both the library view + /// and the sidebar selection. + void selectAndActivate(const QModelIndex& index = QModelIndex()); // called when you single click on the root item virtual void activate() = 0; // called when you single click on a child item, e.g., a concrete playlist or crate @@ -161,7 +165,7 @@ class LibraryFeature : public QObject { // emit this signal if the foreign music collection has been imported/parsed. void featureLoadingFinished(LibraryFeature*s); // emit this signal to select pFeature - void featureSelect(LibraryFeature* pFeature, const QModelIndex& index); + void featureSelect(LibraryFeature* pFeature, const QModelIndex& index, bool scrollTo = true); // emit this signal to enable/disable the cover art widget void enableCoverArtDisplay(bool); void trackSelected(TrackPointer pTrack); diff --git a/src/library/librarytablemodel.cpp b/src/library/librarytablemodel.cpp index 4c8746801c0b..1613dd127899 100644 --- a/src/library/librarytablemodel.cpp +++ b/src/library/librarytablemodel.cpp @@ -102,3 +102,8 @@ TrackModel::Capabilities LibraryTableModel::getCapabilities() const { Capability::Properties | Capability::Sorting; } + +void LibraryTableModel::select() { + BaseSqlTableModel::select(); + emit updateTrackCount(); +} diff --git a/src/library/librarytablemodel.h b/src/library/librarytablemodel.h index b5a6c359cbad..299e4f42de06 100644 --- a/src/library/librarytablemodel.h +++ b/src/library/librarytablemodel.h @@ -16,4 +16,9 @@ class LibraryTableModel : public BaseSqlTableModel { // number of successful additions. int addTracks(const QModelIndex& index, const QList& locations) final; TrackModel::Capabilities getCapabilities() const final; + + void select() override; + + signals: + void updateTrackCount(); }; diff --git a/src/library/mixxxlibraryfeature.cpp b/src/library/mixxxlibraryfeature.cpp index 27e6972155ff..3bca6c2b6a6c 100644 --- a/src/library/mixxxlibraryfeature.cpp +++ b/src/library/mixxxlibraryfeature.cpp @@ -32,7 +32,8 @@ MixxxLibraryFeature::MixxxLibraryFeature(Library* pLibrary, m_pLibraryTableModel(nullptr), m_pSidebarModel(make_parented(this)), m_pMissingView(nullptr), - m_pHiddenView(nullptr) { + m_pHiddenView(nullptr), + m_trackCount{0} { QString idColumn = LIBRARYTABLE_ID; QStringList columns = { LIBRARYTABLE_ID, @@ -115,6 +116,11 @@ MixxxLibraryFeature::MixxxLibraryFeature(Library* pLibrary, pLibrary->trackCollectionManager(), "mixxx.db.model.library"); + connect(m_pLibraryTableModel, + &LibraryTableModel::updateTrackCount, + this, + &MixxxLibraryFeature::slotUpdateTrackCount); + std::unique_ptr pRootItem = TreeItem::newRoot(this); pRootItem->appendChild(kMissingTitle); pRootItem->appendChild(kHiddenTitle); @@ -150,7 +156,8 @@ void MixxxLibraryFeature::bindLibraryWidget(WLibrary* pLibraryWidget, } QVariant MixxxLibraryFeature::title() { - return tr("Tracks"); + const QString title = tr("Tracks") + QStringLiteral(" (%1)").arg(m_trackCount); + return title; } TreeItemModel* MixxxLibraryFeature::sidebarModel() const { @@ -174,7 +181,7 @@ void MixxxLibraryFeature::searchAndActivate(const QString& query) { return; } m_pLibraryTableModel->search(query); - activate(); + selectAndActivate(); } #ifdef __ENGINEPRIME__ @@ -184,6 +191,14 @@ void MixxxLibraryFeature::bindSidebarWidget(WLibrarySidebar* pSidebarWidget) { } #endif +void MixxxLibraryFeature::slotUpdateTrackCount() { + m_trackCount = m_pLibraryTableModel->rowCount(); + + // Force updating the Tracks sidebar item. + // `select` must be false as we don't want to select again + emit featureIsLoading(this, false); +} + void MixxxLibraryFeature::activate() { //qDebug() << "MixxxLibraryFeature::activate()"; emit saveModelState(); diff --git a/src/library/mixxxlibraryfeature.h b/src/library/mixxxlibraryfeature.h index 50eb06258a7c..69f4da83fefe 100644 --- a/src/library/mixxxlibraryfeature.h +++ b/src/library/mixxxlibraryfeature.h @@ -50,6 +50,7 @@ class MixxxLibraryFeature final : public LibraryFeature { public slots: void activate() override; void activateChild(const QModelIndex& index) override; + void slotUpdateTrackCount(); #ifdef __ENGINEPRIME__ void onRightClick(const QPoint& globalPos) override; #endif @@ -74,6 +75,8 @@ class MixxxLibraryFeature final : public LibraryFeature { DlgMissing* m_pMissingView; DlgHidden* m_pHiddenView; + int m_trackCount; + #ifdef __ENGINEPRIME__ parented_ptr m_pExportLibraryAction; diff --git a/src/library/playlisttablemodel.cpp b/src/library/playlisttablemodel.cpp index 82390359174d..ffdc7b49147c 100644 --- a/src/library/playlisttablemodel.cpp +++ b/src/library/playlisttablemodel.cpp @@ -319,7 +319,7 @@ void PlaylistTableModel::shuffleTracks(const QModelIndexList& shuffle, const QMo int numOfTracks = rowCount(); if (shuffle.count() > 1) { // if there is more then one track selected, shuffle selection only - foreach (QModelIndex shuffleIndex, shuffle) { + for (const QModelIndex& shuffleIndex : std::as_const(shuffle)) { int oldPosition = shuffleIndex.sibling(shuffleIndex.row(), positionColumn).data().toInt(); if (oldPosition != excludePos) { positions.append(oldPosition); @@ -343,6 +343,23 @@ void PlaylistTableModel::shuffleTracks(const QModelIndexList& shuffle, const QMo m_pTrackCollectionManager->internalCollection()->getPlaylistDAO().shuffleTracks(m_iPlaylistId, positions, allIds); } +void PlaylistTableModel::orderTracksByCurrPos() { + QList> idPosList; + int numOfTracks = rowCount(); + idPosList.reserve(numOfTracks); + const int positionColumn = fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_POSITION); + const int idColumn = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ID); + // Set up list of all IDs + for (int i = 0; i < numOfTracks; i++) { + TrackId trackId(index(i, idColumn).data()); + int oldPosition = index(i, positionColumn).data().toInt(); + idPosList.append(std::make_pair(trackId, oldPosition)); + } + m_pTrackCollectionManager->internalCollection() + ->getPlaylistDAO() + .orderTracksByCurrPos(m_iPlaylistId, idPosList); +} + const QList PlaylistTableModel::getSelectedPositions(const QModelIndexList& indices) const { if (indices.isEmpty()) { return {}; diff --git a/src/library/playlisttablemodel.h b/src/library/playlisttablemodel.h index cbdc930f6459..d8b98b5fa022 100644 --- a/src/library/playlisttablemodel.h +++ b/src/library/playlisttablemodel.h @@ -21,7 +21,9 @@ class PlaylistTableModel final : public TrackSetTableModel { bool appendTrack(TrackId trackId); void moveTrack(const QModelIndex& sourceIndex, const QModelIndex& destIndex) override; void removeTrack(const QModelIndex& index); - void shuffleTracks(const QModelIndexList& shuffle, const QModelIndex& exclude); + void shuffleTracks(const QModelIndexList& shuffle = QModelIndexList(), + const QModelIndex& exclude = QModelIndex()); + void orderTracksByCurrPos(); bool isColumnInternal(int column) final; bool isColumnHiddenByDefault(int column) final; diff --git a/src/library/sidebarmodel.cpp b/src/library/sidebarmodel.cpp index 2a43430a6913..d12e4b6d5d71 100644 --- a/src/library/sidebarmodel.cpp +++ b/src/library/sidebarmodel.cpp @@ -96,7 +96,7 @@ void SidebarModel::setDefaultSelection(unsigned int index) { void SidebarModel::activateDefaultSelection() { if (m_iDefaultSelectedIndex < static_cast(m_sFeatures.size())) { - emit selectIndex(getDefaultSelection()); + emit selectIndex(getDefaultSelection(), true /* scrollTo */); // Selecting an index does not activate it. m_sFeatures[m_iDefaultSelectedIndex]->activate(); } @@ -593,7 +593,9 @@ void SidebarModel::featureRenamed(LibraryFeature* pFeature) { } } -void SidebarModel::slotFeatureSelect(LibraryFeature* pFeature, const QModelIndex& featureIndex) { +void SidebarModel::slotFeatureSelect(LibraryFeature* pFeature, + const QModelIndex& featureIndex, + bool scrollTo) { QModelIndex ind; if (featureIndex.isValid()) { TreeItem* pTreeItem = static_cast(featureIndex.internalPointer()); @@ -606,5 +608,5 @@ void SidebarModel::slotFeatureSelect(LibraryFeature* pFeature, const QModelIndex } } } - emit selectIndex(ind); + emit selectIndex(ind, scrollTo); } diff --git a/src/library/sidebarmodel.h b/src/library/sidebarmodel.h index 60bd28c3029c..f5a36d2c50ae 100644 --- a/src/library/sidebarmodel.h +++ b/src/library/sidebarmodel.h @@ -56,7 +56,9 @@ class SidebarModel : public QAbstractItemModel { void rightClicked(const QPoint& globalPos, const QModelIndex& index); void renameItem(const QModelIndex& index); void deleteItem(const QModelIndex& index); - void slotFeatureSelect(LibraryFeature* pFeature, const QModelIndex& index = QModelIndex()); + void slotFeatureSelect(LibraryFeature* pFeature, + const QModelIndex& index = QModelIndex(), + bool scrollTo = true); // Slots for every single QAbstractItemModel signal // void slotColumnsAboutToBeInserted(const QModelIndex& parent, int start, int end); @@ -79,16 +81,18 @@ class SidebarModel : public QAbstractItemModel { void slotFeatureLoadingFinished(LibraryFeature*); signals: - void selectIndex(const QModelIndex& index); + void selectIndex(const QModelIndex& index, bool scrollTo); private slots: void slotPressedUntilClickedTimeout(); + protected: + QList m_sFeatures; + private: QModelIndex translateSourceIndex(const QModelIndex& parent); QModelIndex translateIndex(const QModelIndex& index, const QAbstractItemModel* model); void featureRenamed(LibraryFeature*); - QList m_sFeatures; unsigned int m_iDefaultSelectedIndex; /** Index of the item in the sidebar model to select at startup. */ QTimer* const m_pressedUntilClickedTimer; diff --git a/src/library/trackset/playlistfeature.cpp b/src/library/trackset/playlistfeature.cpp index c21dc2b88260..1173f7152d58 100644 --- a/src/library/trackset/playlistfeature.cpp +++ b/src/library/trackset/playlistfeature.cpp @@ -39,6 +39,12 @@ PlaylistFeature::PlaylistFeature(Library* pLibrary, UserSettingsPointer pConfig) this, &PlaylistFeature::slotShufflePlaylist); + m_pOrderByCurrentPosAction = make_parented(tr("Adopt current order"), this); + connect(m_pOrderByCurrentPosAction, + &QAction::triggered, + this, + &PlaylistFeature::slotOrderTracksByCurrentPosition); + m_pUnlockPlaylistsAction = make_parented(tr("Unlock all playlists"), this); connect(m_pUnlockPlaylistsAction, @@ -81,6 +87,8 @@ void PlaylistFeature::onRightClickChild( int playlistId = playlistIdFromIndex(index); bool locked = m_playlistDao.isPlaylistLocked(playlistId); + m_pShufflePlaylistAction->setEnabled(!locked); + m_pOrderByCurrentPosAction->setEnabled(!locked && isChildIndexSelectedInSidebar(index)); m_pDeletePlaylistAction->setEnabled(!locked); m_pRenamePlaylistAction->setEnabled(!locked); m_pShufflePlaylistAction->setEnabled(!locked); @@ -94,6 +102,7 @@ void PlaylistFeature::onRightClickChild( // TODO If playlist is selected and has more than one track selected // show "Shuffle selected tracks", else show "Shuffle playlist"? menu.addAction(m_pShufflePlaylistAction); + menu.addAction(m_pOrderByCurrentPosAction); menu.addSeparator(); menu.addAction(m_pRenamePlaylistAction); menu.addAction(m_pDuplicatePlaylistAction); @@ -230,9 +239,9 @@ void PlaylistFeature::slotShufflePlaylist() { // Shuffle all tracks // If the playlist is loaded/visible shuffle only selected tracks - QModelIndexList selection; if (isChildIndexSelectedInSidebar(m_lastRightClickedIndex) && m_pPlaylistTableModel->getPlaylist() == playlistId) { + QModelIndexList selection; if (m_pLibraryWidget) { WTrackTableView* view = dynamic_cast( m_pLibraryWidget->getActiveView()); @@ -240,7 +249,7 @@ void PlaylistFeature::slotShufflePlaylist() { selection = view->selectionModel()->selectedIndexes(); } } - m_pPlaylistTableModel->shuffleTracks(selection, QModelIndex()); + m_pPlaylistTableModel->shuffleTracks(selection); } else { // Create a temp model so we don't need to select the playlist // in the persistent model in order to shuffle it @@ -255,8 +264,27 @@ void PlaylistFeature::slotShufflePlaylist() { Qt::AscendingOrder); pPlaylistTableModel->select(); - pPlaylistTableModel->shuffleTracks(selection, QModelIndex()); + pPlaylistTableModel->shuffleTracks(); + } +} + +void PlaylistFeature::slotOrderTracksByCurrentPosition() { + int playlistId = playlistIdFromIndex(m_lastRightClickedIndex); + if (playlistId == kInvalidPlaylistId) { + return; + } + + if (m_playlistDao.isPlaylistLocked(playlistId)) { + qDebug() << "Can't adopt current sorting for locked playlist" << playlistId + << m_playlistDao.getPlaylistName(playlistId); + return; + } + // Note(ronso0) I propose to proceed only if the playlist is selected and loaded. + // without playlist content visible we don't have a preview. + if (!isChildIndexSelectedInSidebar(m_lastRightClickedIndex)) { + return; } + m_pPlaylistTableModel->orderTracksByCurrPos(); } void PlaylistFeature::slotUnlockAllPlaylists() { @@ -374,8 +402,7 @@ void PlaylistFeature::slotPlaylistTableChanged(int playlistId) { // Else (root item was selected or for some reason no index could be created) // there's nothing to do: either no child was selected earlier, or the root // was selected and will remain selected after the child model was rebuilt. - activateChild(newIndex); - emit featureSelect(this, newIndex); + selectAndActivate(newIndex); } } diff --git a/src/library/trackset/playlistfeature.h b/src/library/trackset/playlistfeature.h index 132dab1898c3..14d57097b17d 100644 --- a/src/library/trackset/playlistfeature.h +++ b/src/library/trackset/playlistfeature.h @@ -37,6 +37,7 @@ class PlaylistFeature : public BasePlaylistFeature { void slotPlaylistContentOrLockChanged(const QSet& playlistIds) override; void slotPlaylistTableRenamed(int playlistId, const QString& newName) override; void slotShufflePlaylist(); + void slotOrderTracksByCurrentPosition(); void slotUnlockAllPlaylists(); void slotDeleteAllUnlockedPlaylists(); @@ -49,6 +50,7 @@ class PlaylistFeature : public BasePlaylistFeature { QString getRootViewHtml() const override; parented_ptr m_pShufflePlaylistAction; + parented_ptr m_pOrderByCurrentPosAction; parented_ptr m_pUnlockPlaylistsAction; parented_ptr m_pDeleteAllUnlockedPlaylistsAction; }; diff --git a/src/library/trackset/setlogfeature.cpp b/src/library/trackset/setlogfeature.cpp index 093ff3703eb3..1f3582ad8f63 100644 --- a/src/library/trackset/setlogfeature.cpp +++ b/src/library/trackset/setlogfeature.cpp @@ -712,13 +712,8 @@ void SetlogFeature::slotPlaylistTableChanged(int playlistId) { newIndex = m_pSidebarModel->index(selectedYearIndexRow - 1, 0); } } - if (newIndex.isValid()) { - emit featureSelect(this, newIndex); - activateChild(newIndex); - } else if (rootWasSelected) { - // calling featureSelect with invalid index will select the root item - emit featureSelect(this, newIndex); - activate(); // to reload the new current playlist + if (newIndex.isValid() || rootWasSelected) { + selectAndActivate(newIndex); } } diff --git a/src/library/treeitemmodel.h b/src/library/treeitemmodel.h index 3972e3889cf4..142d635e2822 100644 --- a/src/library/treeitemmodel.h +++ b/src/library/treeitemmodel.h @@ -13,7 +13,7 @@ class TreeItemModel : public QAbstractItemModel { static const int kDataRole = Qt::UserRole; static const int kBoldRole = Qt::UserRole + 1; - explicit TreeItemModel(QObject *parent = 0); + explicit TreeItemModel(QObject* parent = nullptr); ~TreeItemModel() override; QVariant data(const QModelIndex &index, int role) const override; diff --git a/src/main.cpp b/src/main.cpp index acb15b80e57f..f7741c98882f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -62,6 +62,11 @@ int runMixxx(MixxxApplication* pApp, const CmdlineArgs& args) { int exitCode; #ifdef MIXXX_USE_QML if (args.isQml()) { + // This is a workaround to support Qt 6.4.2, currently shipped on + // Ubuntu 24.04 See + // https://github.com/mixxxdj/mixxx/pull/14514#issuecomment-2770811094 + // for further details + qputenv("QT_QUICK_TABLEVIEW_COMPAT_VERSION", "6.4"); mixxx::qml::QmlApplication qmlApplication(pApp, args); exitCode = pApp->exec(); } else @@ -93,6 +98,11 @@ int runMixxx(MixxxApplication* pApp, const CmdlineArgs& args) { pCoreServices->initialize(pApp); + if (pCoreServices->getSettings()->getValue( + ConfigKey("[Config]", "did_run_with_unstable"), false)) { + qInfo() << "User previously ran the unstable version on this profile"; + } + #ifdef MIXXX_USE_QOPENGL // Will call initialize when the initial wglwidget's // qopenglwindow has been exposed diff --git a/src/mixxxmainwindow.cpp b/src/mixxxmainwindow.cpp index 21a31fd1c151..bc902e1fc54b 100644 --- a/src/mixxxmainwindow.cpp +++ b/src/mixxxmainwindow.cpp @@ -446,6 +446,12 @@ void MixxxMainWindow::initialize() { if (CmdlineArgs::Instance().getStartAutoDJ()) { qDebug("Enabling Auto DJ from CLI flag."); ControlObject::set(ConfigKey("[AutoDJ]", "enabled"), 1.0); + // Switch to Auto DJ feature + auto* pLibrary = m_pCoreServices->getLibrary().get(); + // Note: auto-scroll is disabled but that doesn't really matter here + // because the sidebar is still in its initial state (top feature visible, + // AutoDj is second from the top by default, all features collapsed). + pLibrary->showAutoDJ(); } } @@ -960,6 +966,16 @@ void MixxxMainWindow::connectMenuBar() { } if (m_pCoreServices->getLibrary()) { + connect(m_pMenuBar, + &WMainMenuBar::searchInCurrentView, + m_pCoreServices->getLibrary().get(), + &Library::slotSearchInCurrentView, + Qt::UniqueConnection); + connect(m_pMenuBar, + &WMainMenuBar::searchInAllTracks, + m_pCoreServices->getLibrary().get(), + &Library::slotSearchInAllTracks, + Qt::UniqueConnection); connect(m_pMenuBar, &WMainMenuBar::createCrate, m_pCoreServices->getLibrary().get(), @@ -970,6 +986,11 @@ void MixxxMainWindow::connectMenuBar() { m_pCoreServices->getLibrary().get(), &Library::slotCreatePlaylist, Qt::UniqueConnection); + connect(m_pMenuBar, + &WMainMenuBar::showAutoDJ, + m_pCoreServices->getLibrary().get(), + &Library::showAutoDJ, + Qt::UniqueConnection); } #ifdef __ENGINEPRIME__ @@ -1385,28 +1406,38 @@ void MixxxMainWindow::tryParseAndSetDefaultStyleSheet() { /// Catch ToolTip and WindowStateChange events bool MixxxMainWindow::eventFilter(QObject* obj, QEvent* event) { - // Always show tooltips if Ctrl is held down - if (event->type() == QEvent::ToolTip && - !QApplication::keyboardModifiers().testFlag(Qt::ControlModifier)) { + if (event->type() == QEvent::ToolTip) { + // Always show tooltips if Ctrl is held down + if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier)) { + return QMainWindow::eventFilter(obj, event); + } + // Always show tooltips for cue type buttons in the Cue menu + if (QLatin1String(obj->metaObject()->className()) == "CueMenuPushButton") { + return QMainWindow::eventFilter(obj, event); + } + // Always show tooltips in Preferences QWidget* activeWindow = QApplication::activeWindow(); if (activeWindow && - QLatin1String(activeWindow->metaObject()->className()) != + QLatin1String(activeWindow->metaObject()->className()) == "DlgPreferences") { - // return true for no tool tips - switch (m_toolTipsCfg) { - case mixxx::preferences::Tooltips::OnlyInLibrary: - if (dynamic_cast(obj) != nullptr) { - return true; - } - break; - case mixxx::preferences::Tooltips::On: - break; - case mixxx::preferences::Tooltips::Off: - return true; - default: - DEBUG_ASSERT(!"m_toolTipsCfg value unknown"); + return QMainWindow::eventFilter(obj, event); + } + + // For all other we follow the tooltip sett8ing. + // Return true for no tool tips + switch (m_toolTipsCfg) { + case mixxx::preferences::Tooltips::OnlyInLibrary: + if (dynamic_cast(obj) != nullptr) { return true; } + break; + case mixxx::preferences::Tooltips::On: + break; + case mixxx::preferences::Tooltips::Off: + return true; + default: + DEBUG_ASSERT(!"m_toolTipsCfg value unknown"); + return true; } } else if (event->type() == QEvent::WindowStateChange) { #ifndef __APPLE__ diff --git a/src/preferences/colorpalettesettings.h b/src/preferences/colorpalettesettings.h index c0e9725e02ca..716111a6e27f 100644 --- a/src/preferences/colorpalettesettings.h +++ b/src/preferences/colorpalettesettings.h @@ -29,7 +29,7 @@ class ColorPaletteSettings { void removePalette(const QString& name); QSet getColorPaletteNames() const; - DEFINE_PREFERENCE_HELPERS(KeyColorsEnabled, bool, "[Config]", "KeyColorsEnabled", true); + DEFINE_PREFERENCE_HELPERS(KeyColorsEnabled, bool, "[Config]", "key_colors_enabled", true); private: UserSettingsPointer m_pConfig; diff --git a/src/preferences/dialog/dlgprefbroadcastdlg.ui b/src/preferences/dialog/dlgprefbroadcastdlg.ui index 077e47258308..1b8f55099d44 100644 --- a/src/preferences/dialog/dlgprefbroadcastdlg.ui +++ b/src/preferences/dialog/dlgprefbroadcastdlg.ui @@ -376,6 +376,9 @@ + + Available fields: $artist, $title, $year, $album, $genre, $bpm + $artist - $title diff --git a/src/preferences/dialog/dlgprefcolors.cpp b/src/preferences/dialog/dlgprefcolors.cpp index 219092ef9239..884ae308958e 100644 --- a/src/preferences/dialog/dlgprefcolors.cpp +++ b/src/preferences/dialog/dlgprefcolors.cpp @@ -17,12 +17,15 @@ namespace { constexpr int kHotcueDefaultColorIndex = -1; constexpr int kLoopDefaultColorIndex = -1; +constexpr int kJumpDefaultColorIndex = -1; constexpr QSize kPalettePreviewSize = QSize(108, 16); const ConfigKey kAutoHotcueColorsConfigKey("[Controls]", "auto_hotcue_colors"); const ConfigKey kAutoLoopColorsConfigKey("[Controls]", "auto_loop_colors"); +const ConfigKey kAutoJumpColorsConfigKey("[Controls]", "auto_jump_colors"); const ConfigKey kHotcueDefaultColorIndexConfigKey("[Controls]", "HotcueDefaultColorIndex"); const ConfigKey kLoopDefaultColorIndexConfigKey("[Controls]", "LoopDefaultColorIndex"); const ConfigKey kKeyColorsEnabledConfigKey("[Config]", "key_colors_enabled"); +const ConfigKey kJumpDefaultColorIndexConfigKey("[Controls]", "jump_default_color_index"); } // anonymous namespace @@ -120,6 +123,7 @@ void DlgPrefColors::slotUpdate() { paletteIcon); } } + updateKeyColorsCombobox(); const QSet colorPaletteNames = m_colorPaletteSettings.getColorPaletteNames(); for (const auto& paletteName : colorPaletteNames) { @@ -184,6 +188,24 @@ void DlgPrefColors::slotUpdate() { comboBoxLoopDefaultColor->setCurrentIndex( loopDefaultColorIndex + 1); } + + bool autoJumpColors = m_pConfig->getValue(kAutoJumpColorsConfigKey, false); + if (autoJumpColors) { + comboBoxJumpDefaultColor->setCurrentIndex(0); + } else { + int jumpDefaultColorIndex = m_pConfig->getValue( + kJumpDefaultColorIndexConfigKey, kJumpDefaultColorIndex); + if (jumpDefaultColorIndex < 0 || + jumpDefaultColorIndex >= hotcuePalette.size()) { + jumpDefaultColorIndex = + hotcuePalette.size() - 3; // default to third last color + if (jumpDefaultColorIndex < 0) { + jumpDefaultColorIndex = 0; + } + } + comboBoxJumpDefaultColor->setCurrentIndex( + jumpDefaultColorIndex + 1); + } } // Set the default values for all the widgets @@ -206,6 +228,9 @@ void DlgPrefColors::slotResetToDefaults() { comboBoxLoopDefaultColor->setCurrentIndex( mixxx::PredefinedColorPalettes::kDefaultTrackColorPalette.size() - 1); checkboxKeyColorsEnabled->setChecked(BaseTrackTableModel::kKeyColorsEnabledDefault); + updateKeyColorsCombobox(); + comboBoxJumpDefaultColor->setCurrentIndex( + mixxx::PredefinedColorPalettes::kDefaultTrackColorPalette.size() - 2); } // Apply and save any changes made in the dialog @@ -275,6 +300,15 @@ void DlgPrefColors::slotApply() { } m_pConfig->setValue(kKeyColorsEnabledConfigKey, checkboxKeyColorsEnabled->checkState()); + int jumpColorIndex = comboBoxJumpDefaultColor->currentIndex(); + + if (jumpColorIndex > 0) { + m_pConfig->setValue(kAutoJumpColorsConfigKey, false); + m_pConfig->setValue(kJumpDefaultColorIndexConfigKey, jumpColorIndex - 1); + } else { + m_pConfig->setValue(kAutoJumpColorsConfigKey, true); + m_pConfig->setValue(kJumpDefaultColorIndexConfigKey, -1); + } } void DlgPrefColors::slotReplaceCueColorClicked() { @@ -357,6 +391,9 @@ void DlgPrefColors::slotHotcuePaletteIndexChanged(int paletteIndex) { int defaultLoopColor = comboBoxLoopDefaultColor->currentIndex(); comboBoxLoopDefaultColor->clear(); + int defaultJumpColor = comboBoxJumpDefaultColor->currentIndex(); + comboBoxJumpDefaultColor->clear(); + QIcon paletteIcon = drawHotcueColorByPaletteIcon(paletteName); comboBoxHotcueDefaultColor->addItem(tr("By hotcue number"), -1); @@ -365,6 +402,9 @@ void DlgPrefColors::slotHotcuePaletteIndexChanged(int paletteIndex) { comboBoxLoopDefaultColor->addItem(tr("By hotcue number"), -1); comboBoxLoopDefaultColor->setItemIcon(0, paletteIcon); + comboBoxJumpDefaultColor->addItem(tr("By hotcue number"), -1); + comboBoxJumpDefaultColor->setItemIcon(0, paletteIcon); + QPixmap pixmap(16, 16); for (int i = 0; i < palette.size(); ++i) { QColor color = mixxx::RgbColor::toQColor(palette.at(i)); @@ -378,6 +418,9 @@ void DlgPrefColors::slotHotcuePaletteIndexChanged(int paletteIndex) { comboBoxLoopDefaultColor->addItem(item, i); comboBoxLoopDefaultColor->setItemIcon(i + 1, icon); + + comboBoxJumpDefaultColor->addItem(item, i); + comboBoxJumpDefaultColor->setItemIcon(i + 1, icon); } if (comboBoxHotcueDefaultColor->count() > defaultHotcueColor) { @@ -393,6 +436,13 @@ void DlgPrefColors::slotHotcuePaletteIndexChanged(int paletteIndex) { comboBoxLoopDefaultColor->setCurrentIndex( comboBoxLoopDefaultColor->count() - 1); } + + if (comboBoxJumpDefaultColor->count() > defaultJumpColor) { + comboBoxJumpDefaultColor->setCurrentIndex(defaultJumpColor); + } else { + comboBoxJumpDefaultColor->setCurrentIndex( + comboBoxJumpDefaultColor->count() - 1); + } } void DlgPrefColors::slotKeyPaletteIndexChanged(int paletteIndex) { @@ -420,7 +470,13 @@ void DlgPrefColors::slotKeyColorsEnabled(int i) { m_bKeyColorsEnabled = static_cast(i); #endif BaseTrackTableModel::setKeyColorsEnabled(m_bKeyColorsEnabled); - m_pConfig->setValue(kKeyColorsEnabledConfigKey, checkboxKeyColorsEnabled->checkState()); + + updateKeyColorsCombobox(); + m_pConfig->setValue(kKeyColorsEnabledConfigKey, m_bKeyColorsEnabled); +} + +void DlgPrefColors::updateKeyColorsCombobox() { + comboBoxKeyColors->setEnabled(checkboxKeyColorsEnabled->isChecked()); } void DlgPrefColors::openColorPaletteEditor( @@ -453,18 +509,28 @@ void DlgPrefColors::trackPaletteUpdated(const QString& trackColors) { QString hotcueColors = comboBoxHotcueColors->currentData().toString(); int defaultHotcueColor = comboBoxHotcueDefaultColor->currentIndex(); int defaultLoopColor = comboBoxLoopDefaultColor->currentIndex(); + int defaultJumpColor = comboBoxJumpDefaultColor->currentIndex(); slotUpdate(); - restoreComboBoxes(hotcueColors, trackColors, defaultHotcueColor, defaultLoopColor); + restoreComboBoxes(hotcueColors, + trackColors, + defaultHotcueColor, + defaultLoopColor, + defaultJumpColor); } void DlgPrefColors::hotcuePaletteUpdated(const QString& hotcueColors) { QString trackColors = comboBoxTrackColors->currentData().toString(); int defaultHotcueColor = comboBoxHotcueDefaultColor->currentIndex(); int defaultLoopColor = comboBoxLoopDefaultColor->currentIndex(); + int defaultJumpColor = comboBoxJumpDefaultColor->currentIndex(); slotUpdate(); - restoreComboBoxes(hotcueColors, trackColors, defaultHotcueColor, defaultLoopColor); + restoreComboBoxes(hotcueColors, + trackColors, + defaultHotcueColor, + defaultLoopColor, + defaultJumpColor); } void DlgPrefColors::palettesUpdated() { @@ -472,16 +538,22 @@ void DlgPrefColors::palettesUpdated() { QString trackColors = comboBoxTrackColors->currentData().toString(); int defaultHotcueColor = comboBoxHotcueDefaultColor->currentIndex(); int defaultLoopColor = comboBoxLoopDefaultColor->currentIndex(); + int defaultJumpColor = comboBoxJumpDefaultColor->currentIndex(); slotUpdate(); - restoreComboBoxes(hotcueColors, trackColors, defaultHotcueColor, defaultLoopColor); + restoreComboBoxes(hotcueColors, + trackColors, + defaultHotcueColor, + defaultLoopColor, + defaultJumpColor); } void DlgPrefColors::restoreComboBoxes( const QString& hotcueColors, const QString& trackColors, int defaultHotcueColor, - int defaultLoopColor) { + int defaultLoopColor, + int defaultJumpColor) { comboBoxHotcueColors->setCurrentText(QCoreApplication::translate( "PredefinedColorPalettes", qPrintable(hotcueColors))); comboBoxTrackColors->setCurrentText(QCoreApplication::translate( @@ -498,4 +570,10 @@ void DlgPrefColors::restoreComboBoxes( comboBoxLoopDefaultColor->setCurrentIndex( comboBoxLoopDefaultColor->count() - 1); } + if (comboBoxJumpDefaultColor->count() > defaultJumpColor) { + comboBoxJumpDefaultColor->setCurrentIndex(defaultJumpColor); + } else { + comboBoxJumpDefaultColor->setCurrentIndex( + comboBoxJumpDefaultColor->count() - 2); + } } diff --git a/src/preferences/dialog/dlgprefcolors.h b/src/preferences/dialog/dlgprefcolors.h index c309fb0f5ed3..8cdf7fe6dd90 100644 --- a/src/preferences/dialog/dlgprefcolors.h +++ b/src/preferences/dialog/dlgprefcolors.h @@ -56,7 +56,9 @@ class DlgPrefColors : public DlgPreferencePage, public Ui::DlgPrefColorsDlg { const QString& hotcueColors, const QString& trackColors, int defaultHotcueColor, - int defaultLoopColor); + int defaultLoopColor, + int defaultJumpColor); + void updateKeyColorsCombobox(); const UserSettingsPointer m_pConfig; ColorPaletteSettings m_colorPaletteSettings; diff --git a/src/preferences/dialog/dlgprefcolorsdlg.ui b/src/preferences/dialog/dlgprefcolorsdlg.ui index 3feafd467156..8f7a65f00a08 100644 --- a/src/preferences/dialog/dlgprefcolorsdlg.ui +++ b/src/preferences/dialog/dlgprefcolorsdlg.ui @@ -100,7 +100,18 @@ - + + + + Jump default color + + + + + + + + When key colors are enabled, Mixxx will display a color hint @@ -112,14 +123,14 @@ associated with each key. - + Key palette - + @@ -130,7 +141,7 @@ associated with each key. - + Qt::Vertical @@ -153,6 +164,7 @@ associated with each key. comboBoxHotcueColors pushButtonEditHotcuePalette comboBoxHotcueDefaultColor + comboBoxJumpDefaultColor pushButtonReplaceCueColor checkboxKeyColorsEnabled diff --git a/src/preferences/dialog/dlgprefinterface.cpp b/src/preferences/dialog/dlgprefinterface.cpp index 7cdc67e86a19..1151817285fc 100644 --- a/src/preferences/dialog/dlgprefinterface.cpp +++ b/src/preferences/dialog/dlgprefinterface.cpp @@ -36,6 +36,7 @@ const QString kResizableSkinKey = QStringLiteral("ResizableSkin"); const QString kLocaleKey = QStringLiteral("Locale"); const QString kTooltipsKey = QStringLiteral("Tooltips"); const QString kMultiSamplingKey = QStringLiteral("multi_sampling"); +const QString kForceHardwareAccelerationKey = QStringLiteral("force_hardware_acceleration"); const QString kHideMenuBarKey = QStringLiteral("hide_menubar"); // TODO move these to a common *_defs.h file, some are also used by e.g. MixxxMainWindow @@ -139,20 +140,7 @@ DlgPrefInterface::DlgPrefInterface( tr("The minimum size of the selected skin is bigger than your " "screen resolution.")); - ComboBoxSkinconf->clear(); - skinPreviewLabel->setText(""); - skinDescriptionText->setText(""); - skinDescriptionText->hide(); - - const QList skins = m_pSkinLoader->getSkins(); - int index = 0; - for (const SkinPointer& pSkin : skins) { - ComboBoxSkinconf->insertItem(index, pSkin->name()); - m_skins.insert(pSkin->name(), pSkin); - index++; - } - - ComboBoxSkinconf->setCurrentIndex(index); + slotUpdateSkins(); // schemes must be updated here to populate the drop-down box and set m_colorScheme slotUpdateSchemes(); slotSetSkinPreview(); @@ -206,6 +194,9 @@ DlgPrefInterface::DlgPrefInterface( m_multiSampling = m_pConfig->getValue( ConfigKey(kPreferencesGroup, kMultiSamplingKey), mixxx::preferences::MultiSamplingMode::Four); + m_forceHardwareAcceleration = m_pConfig->getValue( + ConfigKey(kPreferencesGroup, kForceHardwareAccelerationKey), + false); int multiSamplingIndex = multiSamplingComboBox->findData( QVariant::fromValue((m_multiSampling))); if (multiSamplingIndex != -1) { @@ -215,14 +206,17 @@ DlgPrefInterface::DlgPrefInterface( m_pConfig->setValue(ConfigKey(kPreferencesGroup, kMultiSamplingKey), mixxx::preferences::MultiSamplingMode::Disabled); } + checkBoxForceHardwareAcceleration->setChecked(m_forceHardwareAcceleration); } else #endif { #ifdef MIXXX_USE_QML m_multiSampling = mixxx::preferences::MultiSamplingMode::Disabled; + m_forceHardwareAcceleration = false; #endif multiSamplingLabel->hide(); multiSamplingComboBox->hide(); + checkBoxForceHardwareAcceleration->hide(); } // Tooltip configuration @@ -251,6 +245,58 @@ QScreen* DlgPrefInterface::getScreen() const { return pScreen; } +void DlgPrefInterface::slotUpdateSkins() { + if (!m_pSkinLoader) { + return; + } + + ComboBoxSkinconf->blockSignals(true); + ComboBoxSkinconf->clear(); + m_skins.clear(); + skinPreviewLabel->setText(""); + skinDescriptionText->setText(""); + skinDescriptionText->hide(); + + // Check the text color of the palette for whether to use dark or light icons + QDir iconsPath; + if (!Color::isDimColor(palette().text().color())) { + iconsPath.setPath(":/images/preferences/light/"); + } else { + iconsPath.setPath(":/images/preferences/dark/"); + } + + // Set the user skin icon. + QIcon userSkinIcon(iconsPath.filePath("ic_custom.svg")); + + const QList userSkins = m_pSkinLoader->getUserSkins(); + int index = 0; + for (const SkinPointer& pSkin : userSkins) { + ComboBoxSkinconf->insertItem(index, userSkinIcon, pSkin->name()); + m_skins.insert(pSkin->name(), pSkin); + index++; + } + + // If there are user skins, we add a separator and the + // built-in skins also get an icon. + QIcon systemSkinIcon; + if (ComboBoxSkinconf->count() > 0) { + ComboBoxSkinconf->insertSeparator(index); + systemSkinIcon = QIcon(iconsPath.filePath("ic_mixxx_symbolic.svg")); + index++; + } + + const QList systemSkins = m_pSkinLoader->getSystemSkins(); + for (const SkinPointer& pSkin : systemSkins) { + ComboBoxSkinconf->insertItem( + index, systemSkinIcon, pSkin->name()); + m_skins.insert(pSkin->name(), pSkin); + index++; + } + + ComboBoxSkinconf->setCurrentIndex(index); + ComboBoxSkinconf->blockSignals(false); +} + void DlgPrefInterface::slotUpdateSchemes() { if (!m_pSkinLoader) { return; @@ -296,6 +342,8 @@ void DlgPrefInterface::slotUpdateSchemes() { void DlgPrefInterface::slotUpdate() { if (m_pSkinLoader) { + slotUpdateSkins(); + const SkinPointer pSkinOnUpdate = m_pSkinLoader->getConfiguredSkin(); if (pSkinOnUpdate != nullptr && pSkinOnUpdate->isValid()) { m_skinNameOnUpdate = pSkinOnUpdate->name(); @@ -358,6 +406,8 @@ void DlgPrefInterface::slotResetToDefaults() { multiSamplingComboBox->setCurrentIndex( multiSamplingComboBox->findData(QVariant::fromValue( mixxx::preferences::MultiSamplingMode::Four))); // 4x MSAA + checkBoxForceHardwareAcceleration->setChecked( + false); #endif #ifdef Q_OS_IOS @@ -489,11 +539,20 @@ void DlgPrefInterface::slotApply() { .value(); m_pConfig->setValue( ConfigKey(kPreferencesGroup, kMultiSamplingKey), multiSampling); + bool forceHardwareAcceleration = checkBoxForceHardwareAcceleration->isChecked(); + if (m_pConfig->exists( + ConfigKey(kPreferencesGroup, kForceHardwareAccelerationKey)) || + forceHardwareAcceleration) { + m_pConfig->setValue( + ConfigKey(kPreferencesGroup, kForceHardwareAccelerationKey), + forceHardwareAcceleration); + } #endif if (locale != m_localeOnUpdate || scaleFactor != m_dScaleFactor #ifdef MIXXX_USE_QML - || multiSampling != m_multiSampling + || multiSampling != m_multiSampling || + forceHardwareAcceleration != m_forceHardwareAcceleration #endif ) { notifyRebootNecessary(); @@ -502,6 +561,7 @@ void DlgPrefInterface::slotApply() { m_dScaleFactor = scaleFactor; #ifdef MIXXX_USE_QML m_multiSampling = multiSampling; + m_forceHardwareAcceleration = forceHardwareAcceleration; #endif } diff --git a/src/preferences/dialog/dlgprefinterface.h b/src/preferences/dialog/dlgprefinterface.h index b2c7fcb0d6c5..13e3d02fca92 100644 --- a/src/preferences/dialog/dlgprefinterface.h +++ b/src/preferences/dialog/dlgprefinterface.h @@ -40,6 +40,7 @@ class DlgPrefInterface : public DlgPreferencePage, public Ui::DlgPrefControlsDlg void slotSetScheme(int); void slotSetSkinDescription(); void slotSetSkinPreview(); + void slotUpdateSkins(); void slotUpdateSchemes(); signals: @@ -70,6 +71,7 @@ class DlgPrefInterface : public DlgPreferencePage, public Ui::DlgPrefControlsDlg QString m_colorSchemeOnUpdate; QString m_localeOnUpdate; mixxx::preferences::MultiSamplingMode m_multiSampling; + bool m_forceHardwareAcceleration; mixxx::preferences::Tooltips m_tooltipMode; double m_dScaleFactor; double m_minScaleFactor; diff --git a/src/preferences/dialog/dlgprefinterfacedlg.ui b/src/preferences/dialog/dlgprefinterfacedlg.ui index 2b7def9894f4..21fb27b4aa90 100644 --- a/src/preferences/dialog/dlgprefinterfacedlg.ui +++ b/src/preferences/dialog/dlgprefinterfacedlg.ui @@ -287,16 +287,26 @@ - + Multi-Sampling - + + + + + Force 3D acceleration + + + If checked, Mixxx will always assume 3D acceleration is available. This may lead to pour performance if only CP-backed rendering is available.. + + + @@ -327,6 +337,7 @@ radioButtonTooltipsLibrary radioButtonTooltipsLibraryAndSkin multiSamplingComboBox + checkBoxForceHardwareAcceleration diff --git a/src/preferences/dialog/dlgprefrecord.cpp b/src/preferences/dialog/dlgprefrecord.cpp index 0ae6b19be8e7..02885df84315 100644 --- a/src/preferences/dialog/dlgprefrecord.cpp +++ b/src/preferences/dialog/dlgprefrecord.cpp @@ -12,6 +12,7 @@ namespace { constexpr bool kDefaultCueEnabled = true; +constexpr bool kDefaultCueFileAnnotationEnabled = false; } // anonymous namespace DlgPrefRecord::DlgPrefRecord(QWidget* parent, UserSettingsPointer pConfig) @@ -76,6 +77,10 @@ DlgPrefRecord::DlgPrefRecord(QWidget* parent, UserSettingsPointer pConfig) CheckBoxRecordCueFile->setChecked(m_pConfig->getValue( ConfigKey(RECORDING_PREF_KEY, "CueEnabled"), kDefaultCueEnabled)); + CheckBoxUseCueFileAnnotation->setChecked(m_pConfig->getValue( + ConfigKey(RECORDING_PREF_KEY, "cue_file_annotation_enabled"), + kDefaultCueFileAnnotationEnabled)); + // Setting split comboBoxSplitting->addItem(SPLIT_650MB); comboBoxSplitting->addItem(SPLIT_700MB); @@ -119,6 +124,15 @@ DlgPrefRecord::DlgPrefRecord(QWidget* parent, UserSettingsPointer pConfig) &QAbstractSlider::sliderReleased, this, &DlgPrefRecord::slotSliderCompression); + + connect(CheckBoxRecordCueFile, +#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) + &QCheckBox::checkStateChanged, +#else + &QCheckBox::stateChanged, +#endif + this, + &DlgPrefRecord::slotToggleCueEnabled); } DlgPrefRecord::~DlgPrefRecord() { @@ -144,6 +158,7 @@ void DlgPrefRecord::slotApply() { saveMetaData(); saveEncoding(); saveUseCueFile(); + saveUseCueFileAnnotation(); saveSplitSize(); } @@ -175,10 +190,12 @@ void DlgPrefRecord::slotUpdate() { loadMetaData(); - // Setting miscellaneous + // Setting miscellaneous CheckBoxRecordCueFile->setChecked(m_pConfig->getValue( ConfigKey(RECORDING_PREF_KEY, "CueEnabled"), kDefaultCueEnabled)); + slotToggleCueEnabled(); + QString fileSizeStr = m_pConfig->getValueString(ConfigKey(RECORDING_PREF_KEY, "FileSize")); int index = comboBoxSplitting->findText(fileSizeStr); if (index >= 0) { @@ -201,7 +218,12 @@ void DlgPrefRecord::slotResetToDefaults() { // 4GB splitting is the default comboBoxSplitting->setCurrentIndex(4); + + // Sets 'Create a CUE file' checkbox value CheckBoxRecordCueFile->setChecked(kDefaultCueEnabled); + + // Sets 'Enable File Annotation in CUE file' checkbox value + CheckBoxUseCueFileAnnotation->setChecked(kDefaultCueFileAnnotationEnabled); } void DlgPrefRecord::slotBrowseRecordingsDir() { @@ -429,11 +451,23 @@ void DlgPrefRecord::saveEncoding() { } } +// Set 'Enable File Annotation in CUE file' checkbox value depending on 'Create +// a CUE file' checkbox value +void DlgPrefRecord::slotToggleCueEnabled() { + CheckBoxUseCueFileAnnotation->setEnabled(CheckBoxRecordCueFile + ->isChecked()); +} + void DlgPrefRecord::saveUseCueFile() { m_pConfig->set(ConfigKey(RECORDING_PREF_KEY, "CueEnabled"), ConfigValue(CheckBoxRecordCueFile->isChecked())); } +void DlgPrefRecord::saveUseCueFileAnnotation() { + m_pConfig->set(ConfigKey(RECORDING_PREF_KEY, "cue_file_annotation_enabled"), + ConfigValue(CheckBoxUseCueFileAnnotation->isChecked())); +} + void DlgPrefRecord::saveSplitSize() { m_pConfig->set(ConfigKey(RECORDING_PREF_KEY, "FileSize"), ConfigValue(comboBoxSplitting->currentText())); diff --git a/src/preferences/dialog/dlgprefrecord.h b/src/preferences/dialog/dlgprefrecord.h index 17c47a1ea573..19d287c43c12 100644 --- a/src/preferences/dialog/dlgprefrecord.h +++ b/src/preferences/dialog/dlgprefrecord.h @@ -32,6 +32,9 @@ class DlgPrefRecord : public DlgPreferencePage, public Ui::DlgPrefRecordDlg { void slotSliderCompression(); void slotGroupChanged(); + private slots: + void slotToggleCueEnabled(); + signals: void apply(const QString &); @@ -44,6 +47,7 @@ class DlgPrefRecord : public DlgPreferencePage, public Ui::DlgPrefRecordDlg { void saveMetaData(); void saveEncoding(); void saveUseCueFile(); + void saveUseCueFileAnnotation(); void saveSplitSize(); // Pointer to config object diff --git a/src/preferences/dialog/dlgprefrecorddlg.ui b/src/preferences/dialog/dlgprefrecorddlg.ui index 01a3808af0d9..cffe8673c217 100644 --- a/src/preferences/dialog/dlgprefrecorddlg.ui +++ b/src/preferences/dialog/dlgprefrecorddlg.ui @@ -119,6 +119,20 @@ + + + + + This will include the filepath for each track in the CUE file. +This option makes the CUE file less portable and can reveal personal +information from filepaths (i.e. username) + + + Enable File Annotation in CUE file + + + + @@ -386,6 +400,7 @@ PushButtonBrowseRecordings comboBoxSplitting CheckBoxRecordCueFile + CheckBoxUseCueFileAnnotation SliderCompression SliderQuality LineEditTitle diff --git a/src/preferences/dialog/dlgprefvinyl.cpp b/src/preferences/dialog/dlgprefvinyl.cpp index ef5c7433b1ce..d58da02ca935 100644 --- a/src/preferences/dialog/dlgprefvinyl.cpp +++ b/src/preferences/dialog/dlgprefvinyl.cpp @@ -43,6 +43,9 @@ DlgPrefVinyl::DlgPrefVinyl( box->addItem(MIXXX_VINYL_SERATOCD); box->addItem(MIXXX_VINYL_TRAKTORSCRATCHSIDEA); box->addItem(MIXXX_VINYL_TRAKTORSCRATCHSIDEB); + box->addItem(MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA); + box->addItem(MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB); + box->addItem(MIXXX_VINYL_TRAKTORSCRATCHMK2CD); box->addItem(MIXXX_VINYL_MIXVIBESDVS); box->addItem(MIXXX_VINYL_MIXVIBES7INCH); box->addItem(MIXXX_VINYL_PIONEERA); @@ -247,6 +250,12 @@ int DlgPrefVinyl::getDefaultLeadIn(const QString& vinyl_type) const { return MIXXX_VINYL_TRAKTORSCRATCHSIDEA_LEADIN; } else if (vinyl_type == MIXXX_VINYL_TRAKTORSCRATCHSIDEB) { return MIXXX_VINYL_TRAKTORSCRATCHSIDEB_LEADIN; + } else if (vinyl_type == MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA) { + return MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA_LEADIN; + } else if (vinyl_type == MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB) { + return MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB_LEADIN; + } else if (vinyl_type == MIXXX_VINYL_TRAKTORSCRATCHMK2CD) { + return MIXXX_VINYL_TRAKTORSCRATCHMK2CD_LEADIN; } else if (vinyl_type == MIXXX_VINYL_MIXVIBESDVS) { return MIXXX_VINYL_MIXVIBESDVS_LEADIN; } else if (vinyl_type == MIXXX_VINYL_MIXVIBES7INCH) { diff --git a/src/preferences/dialog/dlgprefwaveform.cpp b/src/preferences/dialog/dlgprefwaveform.cpp index e04c76baecbd..7c10af0e66ad 100644 --- a/src/preferences/dialog/dlgprefwaveform.cpp +++ b/src/preferences/dialog/dlgprefwaveform.cpp @@ -250,10 +250,10 @@ DlgPrefWaveform::~DlgPrefWaveform() { } void DlgPrefWaveform::slotSetWaveformOptions( - allshader::WaveformRendererSignalBase::Option option, bool enabled) { - allshader::WaveformRendererSignalBase::Options currentOption = m_pConfig->getValue( + WaveformRendererSignalBase::Option option, bool enabled) { + WaveformRendererSignalBase::Options currentOption = m_pConfig->getValue( kWaveformOptionsKey, - allshader::WaveformRendererSignalBase::Option::None); + WaveformRendererSignalBase::Option::None); m_pConfig->setValue(ConfigKey("[Waveform]", "waveform_options"), enabled ? currentOption | option @@ -293,9 +293,9 @@ void DlgPrefWaveform::slotUpdate() { bool useWaveform = factory->getType() != WaveformWidgetType::Empty; useWaveformCheckBox->setChecked(useWaveform); - allshader::WaveformRendererSignalBase::Options currentOptions = m_pConfig->getValue( + WaveformRendererSignalBase::Options currentOptions = m_pConfig->getValue( kWaveformOptionsKey, - allshader::WaveformRendererSignalBase::Option::None); + WaveformRendererSignalBase::Option::None); WaveformWidgetBackend backend = m_pConfig->getValue( kHardwareAccelerationKey, factory->preferredBackend()); @@ -384,11 +384,11 @@ void DlgPrefWaveform::slotResetToDefaults() { updateWaveformAcceleration(WaveformWidgetFactory::defaultType(), defaultBackend); updateWaveformTypeOptions(true, defaultBackend, - allshader::WaveformRendererSignalBase::Option::None); + WaveformRendererSignalBase::Option::None); // Restore waveform backend and option setting instantly m_pConfig->setValue(kWaveformOptionsKey, - allshader::WaveformRendererSignalBase::Option::None); + WaveformRendererSignalBase::Option::None); m_pConfig->setValue(kHardwareAccelerationKey, defaultBackend); factory->setWidgetTypeFromHandle( factory->findHandleIndexFromType( @@ -472,9 +472,9 @@ void DlgPrefWaveform::slotSetWaveformType(int index) { // Now set the new type factory->setWidgetTypeFromHandle(factory->findHandleIndexFromType(type)); - allshader::WaveformRendererSignalBase::Options currentOptions = m_pConfig->getValue( + WaveformRendererSignalBase::Options currentOptions = m_pConfig->getValue( kWaveformOptionsKey, - allshader::WaveformRendererSignalBase::Option::None); + WaveformRendererSignalBase::Option::None); updateWaveformTypeOptions(true, backend, currentOptions); updateEnableUntilMark(); updateStemOptionsEnabled(); @@ -509,9 +509,9 @@ void DlgPrefWaveform::slotSetWaveformAcceleration(bool checked) { auto type = static_cast(waveformTypeComboBox->currentData().toInt()); auto* factory = WaveformWidgetFactory::instance(); factory->setWidgetTypeFromHandle(factory->findHandleIndexFromType(type), true); - allshader::WaveformRendererSignalBase::Options currentOptions = m_pConfig->getValue( + WaveformRendererSignalBase::Options currentOptions = m_pConfig->getValue( kWaveformOptionsKey, - allshader::WaveformRendererSignalBase::Option::None); + WaveformRendererSignalBase::Option::None); updateWaveformTypeOptions(true, backend, currentOptions); updateEnableUntilMark(); updateStemOptionsEnabled(); @@ -547,14 +547,14 @@ void DlgPrefWaveform::updateWaveformAcceleration( void DlgPrefWaveform::updateWaveformTypeOptions(bool useWaveform, WaveformWidgetBackend backend, - allshader::WaveformRendererSignalBase::Options currentOptions) { + WaveformRendererSignalBase::Options currentOptions) { splitLeftRightCheckBox->blockSignals(true); highDetailCheckBox->blockSignals(true); #ifdef MIXXX_USE_QOPENGL WaveformWidgetFactory* factory = WaveformWidgetFactory::instance(); - allshader::WaveformRendererSignalBase::Options supportedOption = - allshader::WaveformRendererSignalBase::Option::None; + WaveformRendererSignalBase::Options supportedOption = + WaveformRendererSignalBase::Option::None; auto type = static_cast(waveformTypeComboBox->currentData().toInt()); int handleIdx = factory->findHandleIndexFromType(type); @@ -565,15 +565,15 @@ void DlgPrefWaveform::updateWaveformTypeOptions(bool useWaveform, splitLeftRightCheckBox->setEnabled(useWaveform && supportedOption & - allshader::WaveformRendererSignalBase::Option::SplitStereoSignal); + WaveformRendererSignalBase::Option::SplitStereoSignal); highDetailCheckBox->setEnabled(useWaveform && supportedOption & - allshader::WaveformRendererSignalBase::Option::HighDetail); + WaveformRendererSignalBase::Option::HighDetail); splitLeftRightCheckBox->setChecked(splitLeftRightCheckBox->isEnabled() && currentOptions & - allshader::WaveformRendererSignalBase::Option::SplitStereoSignal); + WaveformRendererSignalBase::Option::SplitStereoSignal); highDetailCheckBox->setChecked(highDetailCheckBox->isEnabled() && - currentOptions & allshader::WaveformRendererSignalBase::Option::HighDetail); + currentOptions & WaveformRendererSignalBase::Option::HighDetail); #else splitLeftRightCheckBox->setVisible(false); highDetailCheckBox->setVisible(false); diff --git a/src/preferences/dialog/dlgprefwaveform.h b/src/preferences/dialog/dlgprefwaveform.h index f5d3545f0cfa..c15d47b77228 100644 --- a/src/preferences/dialog/dlgprefwaveform.h +++ b/src/preferences/dialog/dlgprefwaveform.h @@ -35,14 +35,14 @@ class DlgPrefWaveform : public DlgPreferencePage, public Ui::DlgPrefWaveformDlg void slotSetWaveformEnabled(bool checked); void slotSetWaveformAcceleration(bool checked); #ifdef MIXXX_USE_QOPENGL - void slotSetWaveformOptions(allshader::WaveformRendererSignalBase::Option option, bool enabled); + void slotSetWaveformOptions(WaveformRendererSignalBase::Option option, bool enabled); void slotSetWaveformOptionSplitStereoSignal(bool checked) { - slotSetWaveformOptions(allshader::WaveformRendererSignalBase::Option:: + slotSetWaveformOptions(WaveformRendererSignalBase::Option:: SplitStereoSignal, checked); } void slotSetWaveformOptionHighDetail(bool checked) { - slotSetWaveformOptions(allshader::WaveformRendererSignalBase::Option::HighDetail, checked); + slotSetWaveformOptions(WaveformRendererSignalBase::Option::HighDetail, checked); } #endif void slotSetDefaultZoom(int index); @@ -75,7 +75,7 @@ class DlgPrefWaveform : public DlgPreferencePage, public Ui::DlgPrefWaveformDlg void updateEnableUntilMark(); void updateWaveformTypeOptions(bool useWaveform, WaveformWidgetBackend backend, - allshader::WaveformRendererSignalBase::Options currentOption); + WaveformRendererSignalBase::Options currentOption); void updateWaveformAcceleration( WaveformWidgetType::Type type, WaveformWidgetBackend backend); void updateWaveformGeneralOptionsEnabled(); diff --git a/src/preferences/upgrade.cpp b/src/preferences/upgrade.cpp index 1d7704a6da47..3406ef54b162 100644 --- a/src/preferences/upgrade.cpp +++ b/src/preferences/upgrade.cpp @@ -37,7 +37,7 @@ namespace { // mapping to proactively move users to the new all-shader waveform types std::tuple + WaveformRendererSignalBase::Options> upgradeToAllShaders(int unsafeWaveformType, int unsafeWaveformBackend, int unsafeWaveformOption) { @@ -45,10 +45,10 @@ upgradeToAllShaders(int unsafeWaveformType, using WWT = WaveformWidgetType; if (static_cast(WaveformWidgetBackend::AllShader) == unsafeWaveformBackend) { - allshader::WaveformRendererSignalBase::Options waveformOption = - static_cast( + WaveformRendererSignalBase::Options waveformOption = + static_cast( unsafeWaveformOption) & - allshader::WaveformRendererSignalBase::Option::AllOptionsCombined; + WaveformRendererSignalBase::Option::AllOptionsCombined; switch (unsafeWaveformType) { case WWT::Simple: case WWT::Filtered: @@ -67,8 +67,8 @@ upgradeToAllShaders(int unsafeWaveformType, } // Reset the options - allshader::WaveformRendererSignalBase::Options waveformOption = - allshader::WaveformRendererSignalBase::Option::None; + WaveformRendererSignalBase::Options waveformOption = + WaveformRendererSignalBase::Option::None; WaveformWidgetType::Type waveformType = static_cast(unsafeWaveformType); WaveformWidgetBackend waveformBackend = WaveformWidgetBackend::AllShader; @@ -97,7 +97,7 @@ upgradeToAllShaders(int unsafeWaveformType, // Filtered waveforms case WWT::Filtered: // GLSLFilteredWaveform case 22: // AllShaderTexturedFiltered - waveformOption = allshader::WaveformRendererSignalBase::Option::HighDetail; + waveformOption = WaveformRendererSignalBase::Option::HighDetail; [[fallthrough]]; case 2: // SoftwareWaveform case 4: // QtWaveform @@ -116,7 +116,7 @@ upgradeToAllShaders(int unsafeWaveformType, // Stacked waveform case 24: // AllShaderTexturedStacked case WWT::Stacked: // GLSLRGBStackedWaveform - waveformOption = allshader::WaveformRendererSignalBase::Option::HighDetail; + waveformOption = WaveformRendererSignalBase::Option::HighDetail; [[fallthrough]]; case 26: // AllShaderRGBStackedWaveform waveformType = WaveformWidgetType::Stacked; @@ -127,8 +127,8 @@ upgradeToAllShaders(int unsafeWaveformType, case 23: // AllShaderTexturedRGB case 12: // GLSLRGBWaveform waveformOption = unsafeWaveformType == 18 - ? allshader::WaveformRendererSignalBase::Option::SplitStereoSignal - : allshader::WaveformRendererSignalBase::Option::HighDetail; + ? WaveformRendererSignalBase::Option::SplitStereoSignal + : WaveformRendererSignalBase::Option::HighDetail; [[fallthrough]]; default: waveformType = WaveformWidgetFactory::defaultType(); @@ -357,9 +357,20 @@ UserSettingsPointer Upgrade::versionUpgrade(const QString& settingsPath) { else { #endif // This must have been the first run... right? :) - qDebug() << "No version number in configuration file. Setting to" - << VersionStore::version(); - config->set(ConfigKey("[Config]", "Version"), ConfigValue(VersionStore::version())); +#ifdef MIXXX_USE_QML + if (CmdlineArgs::Instance().isQml()) { + // If running the QML version (aka 3.0 unstable), we set a dummy + // unstable version in the settings. This is used to detect if + // the current user profile is being used for testing purpose + // and if it is safe for the user to potentially lose their data + config->setValue(ConfigKey("[Config]", "Version"), VersionStore::FUTURE_UNSTABLE); + } else +#endif + { + qDebug() << "No version number in configuration file. Setting to" + << VersionStore::version(); + config->set(ConfigKey("[Config]", "Version"), ConfigValue(VersionStore::version())); + } m_bFirstRun = true; return config; #ifdef __APPLE__ diff --git a/src/qml/qml_owned_ptr.h b/src/qml/qml_owned_ptr.h new file mode 100644 index 000000000000..58c68f815d9f --- /dev/null +++ b/src/qml/qml_owned_ptr.h @@ -0,0 +1,120 @@ +#pragma once + +#include +#include +#include +#include + +#include "util/assert.h" + +// Use this wrapper class to clearly represent a raw pointer that is owned by a +// QML Engine. Objects which derive from QObject, have their lifetime governed +// by the QML (or JavaScript) Engine, and thus such pointers do not require a +// manual delete to free the heap memory when they go out of scope, as they will +// be handled by the engine garbage collector. +template + requires(std::is_base_of_v) +class qml_owned_ptr final { + public: + explicit qml_owned_ptr(T* t = nullptr) noexcept + : m_ptr{t} { + if (m_ptr) { + QQmlEngine::setObjectOwnership(m_ptr, QQmlEngine::JavaScriptOwnership); + } + } + + // explicitly generate trivial destructor (since decltype(m_ptr) is not a class type) + ~qml_owned_ptr() noexcept = default; + + // Rule of 5 + qml_owned_ptr(const qml_owned_ptr& other) + : m_ptr{other.m_ptr} { + DEBUG_ASSERT(!m_ptr || + QQmlEngine::objectOwnership(m_ptr) == + QQmlEngine::JavaScriptOwnership); + } + qml_owned_ptr& operator=(const qml_owned_ptr&) = delete; + qml_owned_ptr(const qml_owned_ptr&& other) + : m_ptr{other.m_ptr} { + DEBUG_ASSERT(!m_ptr || + QQmlEngine::objectOwnership(m_ptr) == + QQmlEngine::JavaScriptOwnership); + } + qml_owned_ptr& operator=(const qml_owned_ptr&& other) = delete; + + // If U* is convertible to T* then qml_owned_ptr is convertible to qml_owned_ptr + template< + typename U, + typename = typename std::enable_if_t, U>> + qml_owned_ptr(qml_owned_ptr&& u) noexcept + : m_ptr{u.m_ptr} { + u.m_ptr = nullptr; + } + + // If U* is convertible to T* then qml_owned_ptr is assignable to qml_owned_ptr + template + requires std::is_convertible_v + qml_owned_ptr& operator=(qml_owned_ptr&& u) noexcept { + qml_owned_ptr temp{std::move(u)}; + std::swap(temp.m_ptr, m_ptr); + DEBUG_ASSERT(!m_ptr || + QQmlEngine::objectOwnership(m_ptr) == + QQmlEngine::JavaScriptOwnership); + return *this; + } + + qml_owned_ptr& operator=(std::nullptr_t) noexcept { + qml_owned_ptr{std::move(*this)}; // move *this into a temporary that gets destructed + return *this; + } + + // Prevent unintended invocation of delete on qml_owned_ptr + operator void*() const = delete; + + operator T*() const noexcept { + return m_ptr; + } + + T* get() const noexcept { + return m_ptr; + } + + T& operator*() const noexcept { + return *m_ptr; + } + + T* operator->() const noexcept { + return m_ptr; + } + + operator bool() const noexcept { + return m_ptr != nullptr; + } + + QPointer toWeakRef() { + return m_ptr; + } + + private: + T* m_ptr; +}; + +template +qml_owned_ptr make_qml_owned(Args&&... args) { + return qml_owned_ptr(new T(std::forward(args)...)); +} + +// A use case for this function is when giving an object owned by `std::unique_ptr` to a Qt +// function, that will make the object owned by the Qt object tree. Example: +// ``` +// parent->someFunctionThatAddsAChild(to_qml_owned(child)) +// ``` +// where `child` is a `std::unique_ptr`. After the call, the created `qml_owned_ptr` will +// automatically be destructed such that the DEBUG_ASSERT that checks whether a parent exists is +// triggered. +template +qml_owned_ptr to_qml_owned(std::unique_ptr& u) noexcept { + // the DEBUG_ASSERT in the qml_owned_ptr constructor will catch cases where + // the unique_ptr should not have been released + return qml_owned_ptr{u.release()}; +} diff --git a/src/qml/qmlapplication.cpp b/src/qml/qmlapplication.cpp index 062164021d9c..973c74ac4724 100644 --- a/src/qml/qmlapplication.cpp +++ b/src/qml/qmlapplication.cpp @@ -1,14 +1,18 @@ #include "qmlapplication.h" +#include + #include #include #include "controllers/controllermanager.h" #include "mixer/playermanager.h" #include "moc_qmlapplication.cpp" +#include "preferences/configobject.h" #include "qml/asyncimageprovider.h" #include "qml/qmldlgpreferencesproxy.h" #include "soundio/soundmanager.h" +#include "util/versionstore.h" #include "waveform/visualsmanager.h" #include "waveform/waveformwidgetfactory.h" Q_IMPORT_QML_PLUGIN(MixxxPlugin) @@ -42,6 +46,36 @@ QmlApplication::QmlApplication( QQuickStyle::setStyle("Basic"); m_pCoreServices->initialize(app); + + QString configVersion = m_pCoreServices->getSettings()->getValue( + ConfigKey("[Config]", "Version"), ""); + if (configVersion == VersionStore::FUTURE_UNSTABLE) { + qDebug() << "Generating a new user profile for safe testing with unstable code"; + } else if (CmdlineArgs::Instance().isAwareOfRisk()) { + qCritical() << "Existing user profile detected from" << configVersion + << "but you said you wanted to play with fire!"; + m_pCoreServices->getSettings()->setValue( + ConfigKey("[Config]", "did_run_with_unstable"), true); + } else { + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Critical); + msgBox.setWindowTitle(tr("Existing user profile detected")); + msgBox.setText( + tr("Trying to run Mixxx 3.0 with an existing %0 user profile! " + "

There is serious risks of data loss and " + "corruption.
We recommend using a test profile folder " + "with the '--settings-path' argument.

If you want " + "to continue at your own risk, run Mixxx with the argument " + "'--allow-dangerous-data-corruption-risk'.") + .arg(configVersion)); + + QPushButton* continueButton = + msgBox.addButton(tr("Ok"), QMessageBox::ActionRole); + msgBox.exec(); + m_pCoreServices.reset(); + exit(-1); + } + SoundDeviceStatus result = m_pCoreServices->getSoundManager()->setupDevices(); if (result != SoundDeviceStatus::Ok) { const int reInt = static_cast(result); diff --git a/src/qml/qmlconfigproxy.cpp b/src/qml/qmlconfigproxy.cpp index 091d4e348293..4d3aba4f5e87 100644 --- a/src/qml/qmlconfigproxy.cpp +++ b/src/qml/qmlconfigproxy.cpp @@ -15,6 +15,13 @@ QVariantList paletteToQColorList(const ColorPalette& palette) { const QString kPreferencesGroup = QStringLiteral("[Preferences]"); const QString kMultiSamplingKey = QStringLiteral("multi_sampling"); +const QString k3DHardwareAccelerationKey = QStringLiteral("force_hardware_acceleration"); + +const QString kWaveformGroup = QStringLiteral("[Waveform]"); +const QString kWaveformZoomSynchronizationKey = QStringLiteral("ZoomSynchronization"); +const QString kWaveformDefaultZoomKey = QStringLiteral("DefaultZoom"); +const bool kWaveformZoomSynchronizationDefault = true; +const double kWaveformDefaultZoomDefault = 3.0; } // namespace @@ -42,6 +49,27 @@ int QmlConfigProxy::getMultiSamplingLevel() { mixxx::preferences::MultiSamplingMode::Disabled)); } +bool QmlConfigProxy::useAcceleration() { + if (!m_pConfig->exists( + ConfigKey(kPreferencesGroup, k3DHardwareAccelerationKey))) { + // TODO: detect whether QML currently run with 3D acceleration. QSGRendererInterface? + return false; + } + return m_pConfig->getValue( + ConfigKey(kPreferencesGroup, k3DHardwareAccelerationKey)); +} + +bool QmlConfigProxy::waveformZoomSynchronization() { + return m_pConfig->getValue( + ConfigKey(kWaveformGroup, kWaveformZoomSynchronizationKey), + kWaveformZoomSynchronizationDefault); +} +double QmlConfigProxy::waveformDefaultZoom() { + return m_pConfig->getValue( + ConfigKey(kWaveformGroup, kWaveformDefaultZoomKey), + kWaveformDefaultZoomDefault); +} + // static QmlConfigProxy* QmlConfigProxy::create(QQmlEngine* pQmlEngine, QJSEngine* pJsEngine) { // The implementation of this method is mostly taken from the code example diff --git a/src/qml/qmlconfigproxy.h b/src/qml/qmlconfigproxy.h index a0e107276d9a..3b2e534fb34d 100644 --- a/src/qml/qmlconfigproxy.h +++ b/src/qml/qmlconfigproxy.h @@ -23,12 +23,21 @@ class QmlConfigProxy : public QObject { Q_INVOKABLE QVariantList getHotcueColorPalette(); Q_INVOKABLE QVariantList getTrackColorPalette(); Q_INVOKABLE int getMultiSamplingLevel(); + Q_INVOKABLE bool useAcceleration(); + + // Waveform settings + Q_INVOKABLE bool waveformZoomSynchronization(); + Q_INVOKABLE double waveformDefaultZoom(); static QmlConfigProxy* create(QQmlEngine* pQmlEngine, QJSEngine* pJsEngine); static inline void registerUserSettings(UserSettingsPointer pConfig) { s_pUserSettings = std::move(pConfig); } + static UserSettingsPointer get() { + return s_pUserSettings; + } + private: static inline UserSettingsPointer s_pUserSettings = nullptr; diff --git a/src/qml/qmllibraryproxy.cpp b/src/qml/qmllibraryproxy.cpp index fec3d21120c4..5856438354ed 100644 --- a/src/qml/qmllibraryproxy.cpp +++ b/src/qml/qmllibraryproxy.cpp @@ -1,17 +1,35 @@ #include "qml/qmllibraryproxy.h" #include +#include #include "library/library.h" +#include "library/librarytablemodel.h" #include "moc_qmllibraryproxy.cpp" +#include "qml/qmllibraryproxy.h" +#include "qml/qmllibrarytracklistmodel.h" +#include "qmltrackproxy.h" +#include "track/track.h" +#include "util/assert.h" namespace mixxx { namespace qml { -QmlLibraryProxy::QmlLibraryProxy(std::shared_ptr pLibrary, QObject* parent) - : QObject(parent), - m_pLibrary(pLibrary), - m_pModelProperty(new QmlLibraryTrackListModel(m_pLibrary->trackTableModel(), this)) { +QmlLibraryProxy::QmlLibraryProxy(QObject* parent) + : QObject(parent) { +} + +QmlLibraryTrackListModel* QmlLibraryProxy::model() const { + return make_qml_owned( + QList{}, s_pLibrary->trackTableModel()) + .get(); +} + +void QmlLibraryProxy::analyze(const QmlTrackProxy* track) const { + VERIFY_OR_DEBUG_ASSERT(track && track->internal()) { + return; + } + emit s_pLibrary->analyzeTracks({track->internal()->getId()}); } // static @@ -26,7 +44,7 @@ QmlLibraryProxy* QmlLibraryProxy::create(QQmlEngine* pQmlEngine, QJSEngine* pJsE qWarning() << "Library hasn't been registered yet"; return nullptr; } - return new QmlLibraryProxy(s_pLibrary, pQmlEngine); + return new QmlLibraryProxy(pQmlEngine); } } // namespace qml diff --git a/src/qml/qmllibraryproxy.h b/src/qml/qmllibraryproxy.h index 3b5d80967b9b..07f46106ac4d 100644 --- a/src/qml/qmllibraryproxy.h +++ b/src/qml/qmllibraryproxy.h @@ -1,39 +1,42 @@ #pragma once #include #include +#include #include -#include "qml/qmllibrarytracklistmodel.h" -#include "util/parented_ptr.h" +#include "qml_owned_ptr.h" +#include "qmllibrarytracklistmodel.h" class Library; namespace mixxx { namespace qml { -class QmlLibraryTrackListModel; +class QmlTrackProxy; class QmlLibraryProxy : public QObject { Q_OBJECT - Q_PROPERTY(mixxx::qml::QmlLibraryTrackListModel* model MEMBER m_pModelProperty CONSTANT) + Q_PROPERTY(mixxx::qml::QmlLibraryTrackListModel* model READ model CONSTANT) QML_NAMED_ELEMENT(Library) QML_SINGLETON public: - explicit QmlLibraryProxy(std::shared_ptr pLibrary, QObject* parent = nullptr); + explicit QmlLibraryProxy(QObject* parent = nullptr); static QmlLibraryProxy* create(QQmlEngine* pQmlEngine, QJSEngine* pJsEngine); static void registerLibrary(std::shared_ptr pLibrary) { s_pLibrary = std::move(pLibrary); } - private: - static inline std::shared_ptr s_pLibrary; + static Library* get() { + return s_pLibrary.get(); + } - std::shared_ptr m_pLibrary; + QmlLibraryTrackListModel* model() const; + Q_INVOKABLE void analyze(const mixxx::qml::QmlTrackProxy* track) const; - /// This needs to be a plain pointer because it's used as a `Q_PROPERTY` member variable. - QmlLibraryTrackListModel* m_pModelProperty; + private: + static inline std::shared_ptr s_pLibrary; }; } // namespace qml diff --git a/src/qml/qmllibrarysource.cpp b/src/qml/qmllibrarysource.cpp new file mode 100644 index 000000000000..cc11d6f16606 --- /dev/null +++ b/src/qml/qmllibrarysource.cpp @@ -0,0 +1,61 @@ +#include "qml/qmllibrarysource.h" + +#include +#include +#include + +#include +#include +#include +#include + +#include "library/browse/browsefeature.h" +#include "library/library.h" +#include "library/librarytablemodel.h" +#include "library/trackcollection.h" +#include "library/trackcollectionmanager.h" +#include "library/trackset/crate/cratefeature.h" +#include "library/trackset/crate/cratesummary.h" +#include "library/trackset/playlistfeature.h" +#include "library/treeitemmodel.h" +#include "moc_qmllibrarysource.cpp" +#include "qmllibraryproxy.h" +#include "track/track.h" + +AllTrackLibraryFeature::AllTrackLibraryFeature(Library* pLibrary, UserSettingsPointer pConfig) + : LibraryFeature(pLibrary, pConfig, QStringLiteral("")), + m_pSidebarModel(make_parented(this)), + m_pLibraryTableModel(pLibrary->trackTableModel()) { + m_pSidebarModel->setRootItem(TreeItem::newRoot(this)); +} + +void AllTrackLibraryFeature::activate() { + emit showTrackModel(m_pLibraryTableModel); +} + +namespace mixxx { +namespace qml { + +QmlLibrarySource::QmlLibrarySource( + QObject* parent, const QList& columns) + : QObject(parent), + m_columns(columns) { +} + +void QmlLibrarySource::slotShowTrackModel(QAbstractItemModel* pModel) { + emit requestTrackModel(std::make_shared(columns(), pModel)); +} + +QmlLibraryAllTrackSource::QmlLibraryAllTrackSource( + QObject* parent, const QList& columns) + : QmlLibrarySource(parent, columns), + m_pLibraryFeature(std::make_unique( + QmlLibraryProxy::get(), QmlConfigProxy::get())) { + connect(m_pLibraryFeature.get(), + &LibraryFeature::showTrackModel, + this, + &QmlLibrarySource::slotShowTrackModel); +} + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmllibrarysource.h b/src/qml/qmllibrarysource.h new file mode 100644 index 000000000000..88e4d675d96a --- /dev/null +++ b/src/qml/qmllibrarysource.h @@ -0,0 +1,116 @@ +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "library/browse/browsefeature.h" +#include "library/libraryfeature.h" +#include "library/sidebarmodel.h" +#include "library/trackset/crate/cratefeature.h" +#include "library/trackset/playlistfeature.h" +#include "library/treeitem.h" +#include "qmlconfigproxy.h" +#include "qmllibrarytracklistmodel.h" +#include "util/parented_ptr.h" + +class LibraryTableModel; +class TreeItemModel; +class AllTrackLibraryFeature final : public LibraryFeature { + Q_OBJECT + public: + AllTrackLibraryFeature(Library* pLibrary, + UserSettingsPointer pConfig); + ~AllTrackLibraryFeature() override = default; + + QVariant title() override { + return tr("All..."); + } + TreeItemModel* sidebarModel() const override { + return m_pSidebarModel; + } + + bool hasTrackTable() override { + return true; + } + + LibraryTableModel* trackTableModel() const { + return m_pLibraryTableModel; + } + + void searchAndActivate(const QString& query); + + public slots: + void activate() override; + + private: + LibraryTableModel* m_pLibraryTableModel; + + parented_ptr m_pSidebarModel; +}; + +namespace mixxx { +namespace qml { + +class QmlLibraryTrackListColumn; + +class QmlLibrarySource : public QObject { + Q_OBJECT + Q_PROPERTY(QString label MEMBER m_label) + Q_PROPERTY(QString icon MEMBER m_icon) + Q_PROPERTY(QQmlListProperty columns READ columnsQml) + Q_CLASSINFO("DefaultProperty", "columns") + QML_NAMED_ELEMENT(LibrarySource) + QML_UNCREATABLE("Only accessible via its specialization") + public: + explicit QmlLibrarySource(QObject* parent = nullptr, + const QList& columns = {}); + + QQmlListProperty columnsQml() { + return {this, &m_columns}; + } + + const QList& columns() const { + return m_columns; + } + virtual LibraryFeature* internal() = 0; + public slots: + void slotShowTrackModel(QAbstractItemModel* pModel); + + signals: +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + void requestTrackModel(std::shared_ptr pModel); +#else + void requestTrackModel(std::shared_ptr pModel); +#endif + + protected: + QString m_label; + QString m_icon; + QList m_columns; +}; + +class QmlLibraryAllTrackSource : public QmlLibrarySource { + Q_OBJECT + QML_NAMED_ELEMENT(LibraryAllTrackSource) + public: + explicit QmlLibraryAllTrackSource(QObject* parent = nullptr, + const QList& columns = {}); + + LibraryFeature* internal() override { + return m_pLibraryFeature.get(); + } + + private: + std::unique_ptr m_pLibraryFeature; +}; + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmllibrarysourcetree.cpp b/src/qml/qmllibrarysourcetree.cpp new file mode 100644 index 000000000000..2854c2b5063d --- /dev/null +++ b/src/qml/qmllibrarysourcetree.cpp @@ -0,0 +1,80 @@ +#include "qml/qmllibrarysourcetree.h" + +#include +#include + +#include +#include + +#include "library/library.h" +#include "library/librarytablemodel.h" +#include "moc_qmllibrarysourcetree.cpp" +#include "qml_owned_ptr.h" +#include "qmllibraryproxy.h" +#include "qmllibrarytracklistmodel.h" +#include "qmlsidebarmodelproxy.h" + +namespace mixxx { +namespace qml { + +QmlLibrarySourceTree::QmlLibrarySourceTree(QQuickItem* parent) + : QQuickItem(parent), + m_model(new QmlSidebarModelProxy(this)) { +} +QmlLibrarySourceTree::~QmlLibrarySourceTree() = default; + +Q_INVOKABLE QmlLibraryTrackListModel* QmlLibrarySourceTree::allTracks() const { + return make_qml_owned( + m_defaultColumns, QmlLibraryProxy::get()->trackTableModel()); +}; + +void QmlLibrarySourceTree::append_source( + QQmlListProperty* list, QmlLibrarySource* source) { + reinterpret_cast*>(list->data)->append(source); + QmlLibrarySourceTree* librarySourceTree = qobject_cast(list->object); + if (librarySourceTree && librarySourceTree->isComponentComplete()) { + librarySourceTree->m_model->update(librarySourceTree->m_sources); + } +} + +void QmlLibrarySourceTree::clear_source(QQmlListProperty* p) { + reinterpret_cast*>(p->data)->clear(); + QmlLibrarySourceTree* librarySourceTree = qobject_cast(p->object); + if (librarySourceTree) { + librarySourceTree->m_model->update(librarySourceTree->m_sources); + } +} +void QmlLibrarySourceTree::replace_source(QQmlListProperty* p, + qsizetype idx, + QmlLibrarySource* v) { + return reinterpret_cast*>(p->data)->replace(idx, v); + QmlLibrarySourceTree* librarySourceTree = qobject_cast(p->object); + if (librarySourceTree && librarySourceTree->isComponentComplete()) { + librarySourceTree->m_model->update(librarySourceTree->m_sources); + } +} +void QmlLibrarySourceTree::removeLast_source(QQmlListProperty* p) { + return reinterpret_cast*>(p->data)->removeLast(); + QmlLibrarySourceTree* librarySourceTree = qobject_cast(p->object); + if (librarySourceTree && librarySourceTree->isComponentComplete()) { + librarySourceTree->m_model->update(librarySourceTree->m_sources); + } +} + +QQmlListProperty QmlLibrarySourceTree::sources() { + return QQmlListProperty(this, + &m_sources, + &QmlLibrarySourceTree::append_source, + &QmlLibrarySourceTree::count_source, + &QmlLibrarySourceTree::at_source, + &QmlLibrarySourceTree::clear_source, + &QmlLibrarySourceTree::replace_source, + &QmlLibrarySourceTree::removeLast_source); +} + +void QmlLibrarySourceTree::componentComplete() { + m_model->update(m_sources); +} + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmllibrarysourcetree.h b/src/qml/qmllibrarysourcetree.h new file mode 100644 index 000000000000..907f890f2aa5 --- /dev/null +++ b/src/qml/qmllibrarysourcetree.h @@ -0,0 +1,65 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "qmllibrarysource.h" +#include "qmllibrarytracklistcolumn.h" +#include "qmlsidebarmodelproxy.h" +#include "util/parented_ptr.h" + +namespace mixxx { +namespace qml { + +class QmlLibrarySourceTree : public QQuickItem { + Q_OBJECT + Q_INTERFACES(QQmlParserStatus) + Q_PROPERTY(QQmlListProperty sources READ sources) + Q_PROPERTY(QQmlListProperty defaultColumns READ + defaultColumns CONSTANT) + Q_CLASSINFO("DefaultProperty", "sources") + QML_NAMED_ELEMENT(LibrarySourceTree) + + public: + Q_DISABLE_COPY_MOVE(QmlLibrarySourceTree) + explicit QmlLibrarySourceTree(QQuickItem* parent = nullptr); + ~QmlLibrarySourceTree() override; + + void componentComplete() override; + + QQmlListProperty defaultColumns() { + return {this, &m_defaultColumns}; + } + + QQmlListProperty sources(); + Q_INVOKABLE mixxx::qml::QmlSidebarModelProxy* sidebar() const { + return m_model.get(); + }; + Q_INVOKABLE mixxx::qml::QmlLibraryTrackListModel* allTracks() const; + + private: + static void append_source(QQmlListProperty* list, QmlLibrarySource* slice); + static qsizetype count_source(QQmlListProperty* p) { + return reinterpret_cast*>(p->data)->size(); + } + static QmlLibrarySource* at_source(QQmlListProperty* p, qsizetype idx) { + return reinterpret_cast*>(p->data)->at(idx); + } + static void clear_source(QQmlListProperty* p); + static void replace_source(QQmlListProperty* p, + qsizetype idx, + QmlLibrarySource* v); + static void removeLast_source(QQmlListProperty* p); + + QList m_sources; + parented_ptr m_model; + QList m_defaultColumns; +}; + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmllibrarytracklistcolumn.cpp b/src/qml/qmllibrarytracklistcolumn.cpp new file mode 100644 index 000000000000..5e64555c6f7d --- /dev/null +++ b/src/qml/qmllibrarytracklistcolumn.cpp @@ -0,0 +1,25 @@ +#include "qml/qmllibrarytracklistcolumn.h" + +#include "moc_qmllibrarytracklistcolumn.cpp" + +namespace mixxx { +namespace qml { + +QmlLibraryTrackListColumn::QmlLibraryTrackListColumn(QObject* parent, + const QString& label, + int fillSpan, + int columnIdx, + double preferredWidth, + QQmlComponent* pDelegate, + Role role) + : QObject(parent), + m_label(label), + m_role(role), + m_fillSpan(fillSpan), + m_columnIdx(columnIdx), + m_preferredWidth(preferredWidth), + m_pDelegate(pDelegate) { +} + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmllibrarytracklistcolumn.h b/src/qml/qmllibrarytracklistcolumn.h new file mode 100644 index 000000000000..3d55002ba9a6 --- /dev/null +++ b/src/qml/qmllibrarytracklistcolumn.h @@ -0,0 +1,86 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "library/columncache.h" +#include "qml/qml_owned_ptr.h" + +namespace mixxx { +namespace qml { + +class QmlLibraryTrackListColumn : public QObject { + Q_OBJECT + Q_PROPERTY(QString label MEMBER m_label FINAL) + Q_PROPERTY(int fillSpan MEMBER m_fillSpan FINAL) + Q_PROPERTY(int columnIdx MEMBER m_columnIdx FINAL) + Q_PROPERTY(double preferredWidth MEMBER m_preferredWidth FINAL) + Q_PROPERTY(QQmlComponent* delegate READ delegate WRITE setDelegate FINAL) + Q_PROPERTY(Role role MEMBER m_role FINAL) + QML_NAMED_ELEMENT(TrackListColumn) + public: + enum class SQLColumns { + Album = ColumnCache::COLUMN_LIBRARYTABLE_ALBUM, + Artist = ColumnCache::COLUMN_LIBRARYTABLE_ARTIST, + Title = ColumnCache::COLUMN_LIBRARYTABLE_TITLE, + Year = ColumnCache::COLUMN_LIBRARYTABLE_YEAR, + Bpm = ColumnCache::COLUMN_LIBRARYTABLE_BPM, + Key = ColumnCache::COLUMN_LIBRARYTABLE_KEY, + FileType = ColumnCache::COLUMN_LIBRARYTABLE_FILETYPE, + Bitrate = ColumnCache::COLUMN_LIBRARYTABLE_BITRATE, + }; + Q_ENUM(SQLColumns) + enum class Role { + Location, + Artist, + Title, + Cover, + }; + Q_ENUM(Role) + explicit QmlLibraryTrackListColumn(QObject* parent = nullptr) + : QObject(parent) { + } + explicit QmlLibraryTrackListColumn(QObject* parent, + const QString& label, + int fillSpan, + int columnIdx, + double preferredWidth, + QQmlComponent* delegate, + Role role); + const QString& label() const { + return m_label; + } + Role role() const { + return m_role; + } + int fillSpan() const { + return m_fillSpan; + } + int columnIdx() const { + return m_columnIdx; + } + double preferredWidth() const { + return m_preferredWidth; + } + QQmlComponent* delegate() const { + return m_pDelegate; + } + void setDelegate(QQmlComponent* delegate) { + m_pDelegate = qml_owned_ptr(delegate); + } + + private: + QString m_label; + Role m_role; + int m_fillSpan{0}; + int m_columnIdx{-1}; + double m_preferredWidth{-1}; + qml_owned_ptr m_pDelegate; +}; +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmllibrarytracklistmodel.cpp b/src/qml/qmllibrarytracklistmodel.cpp index 1d8d77c27b16..2c14a5ccffc9 100644 --- a/src/qml/qmllibrarytracklistmodel.cpp +++ b/src/qml/qmllibrarytracklistmodel.cpp @@ -1,23 +1,68 @@ #include "qml/qmllibrarytracklistmodel.h" -#include "library/librarytablemodel.h" +#include + +#include +#include +#include +#include +#include + +#include "library/basetracktablemodel.h" +#include "library/columncache.h" #include "moc_qmllibrarytracklistmodel.cpp" +#include "qml/asyncimageprovider.h" +#include "qml/qmllibrarytracklistcolumn.h" +#include "qml_owned_ptr.h" +#include "qmltrackproxy.h" +#include "track/track.h" +#include "util/assert.h" +#include "util/parented_ptr.h" namespace mixxx { namespace qml { namespace { const QHash kRoleNames = { - {QmlLibraryTrackListModel::TitleRole, "title"}, - {QmlLibraryTrackListModel::ArtistRole, "artist"}, - {QmlLibraryTrackListModel::AlbumRole, "album"}, - {QmlLibraryTrackListModel::AlbumArtistRole, "albumArtist"}, - {QmlLibraryTrackListModel::FileUrlRole, "fileUrl"}, + {Qt::DisplayRole, "display"}, + {Qt::DecorationRole, "decoration"}, + {QmlLibraryTrackListModel::Delegate, "delegate"}, + {QmlLibraryTrackListModel::Track, "track"}, + {QmlLibraryTrackListModel::FileURL, "file_url"}, + {QmlLibraryTrackListModel::CoverArt, "cover_art"}, }; + +QColor colorFromRgbCode(double colorValue) { + if (colorValue < 0 || colorValue > 0xFFFFFF) { + return {}; + } + + QRgb rgbValue = static_cast(colorValue) | 0xFF000000; + return QColor(rgbValue); } +} // namespace -QmlLibraryTrackListModel::QmlLibraryTrackListModel(LibraryTableModel* pModel, QObject* pParent) - : QIdentityProxyModel(pParent) { - pModel->select(); +QmlLibraryTrackListModel::QmlLibraryTrackListModel( + const QList& librarySource, + QAbstractItemModel* pModel, + QObject* pParent) + : QIdentityProxyModel(pParent), + m_columns() { + m_columns.reserve(librarySource.size()); + for (const auto* pColumn : std::as_const(librarySource)) { + m_columns.emplace_back(make_parented(this, + pColumn->label(), + pColumn->fillSpan(), + pColumn->columnIdx(), + pColumn->preferredWidth(), + pColumn->delegate(), + pColumn->role())); + } + + auto* pTrackModel = dynamic_cast(pModel); + VERIFY_OR_DEBUG_ASSERT(pTrackModel) { + return; + } + pTrackModel->select(); setSourceModel(pModel); } @@ -29,72 +74,148 @@ QVariant QmlLibraryTrackListModel::data(const QModelIndex& proxyIndex, int role) VERIFY_OR_DEBUG_ASSERT(checkIndex(proxyIndex)) { return {}; } - - const auto pSourceModel = static_cast(sourceModel()); - VERIFY_OR_DEBUG_ASSERT(pSourceModel) { + auto columnIdx = proxyIndex.column(); + VERIFY_OR_DEBUG_ASSERT(columnIdx >= 0 || columnIdx < m_columns.size()) { return {}; } - if (proxyIndex.column() > 0) { - return {}; - } + auto* const pTrackTableModel = qobject_cast(sourceModel()); + auto* const pTrackModel = dynamic_cast(sourceModel()); + + const auto& pColumn = m_columns[columnIdx]; - int column = -1; switch (role) { - case TitleRole: - column = pSourceModel->fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_TITLE); - break; - case ArtistRole: - column = pSourceModel->fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ARTIST); - break; - case AlbumRole: - column = pSourceModel->fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUM); - break; - case AlbumArtistRole: - column = pSourceModel->fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUMARTIST); - break; - case FileUrlRole: { - column = pSourceModel->fieldIndex(ColumnCache::COLUMN_TRACKLOCATIONSTABLE_LOCATION); - const QString location = QIdentityProxyModel::data( - proxyIndex.siblingAtColumn(column), Qt::DisplayRole) - .toString(); + case Track: { + if (pTrackModel == nullptr) { + return {}; + } + auto pTrack = make_qml_owned(pTrackModel->getTrack( + QIdentityProxyModel::mapToSource(proxyIndex))); + return QVariant::fromValue(pTrack.get()); + } + case Qt::DecorationRole: { + if (pTrackTableModel == nullptr) { + return {}; + }; + return colorFromRgbCode(QIdentityProxyModel::data( + proxyIndex.siblingAtColumn(pTrackTableModel->fieldIndex( + ColumnCache::COLUMN_LIBRARYTABLE_COLOR)), + Qt::DisplayRole) + .toDouble()); + } + case CoverArt: { + QString location; + if (pTrackTableModel != nullptr) { + location = QIdentityProxyModel::data( + proxyIndex.siblingAtColumn(pTrackTableModel->fieldIndex( + ColumnCache::COLUMN_TRACKLOCATIONSTABLE_LOCATION)), + Qt::DisplayRole) + .toString(); + } else if (pTrackModel != nullptr) { + auto pTrack = pTrackModel->getTrack( + QIdentityProxyModel::mapToSource(proxyIndex)); + location = pTrack->getCoverInfo().coverLocation; + } if (location.isEmpty()) { return {}; } - return QUrl::fromLocalFile(location); + + return AsyncImageProvider::trackLocationToCoverArtUrl(location); + } + case FileURL: { + if (pTrackModel == nullptr) { + return {}; + } + return pTrackModel->getTrackUrl(QIdentityProxyModel::mapToSource(proxyIndex)); } - default: + case Delegate: + return QVariant::fromValue(pColumn->delegate()); break; } - - if (column < 0) { - return {}; + if (pColumn->columnIdx() < 0) { + // Use proxyIndex.column() + return QIdentityProxyModel::data(proxyIndex, role); } - - return QIdentityProxyModel::data(proxyIndex.siblingAtColumn(column), Qt::DisplayRole); + return QIdentityProxyModel::data( + proxyIndex.siblingAtColumn(pTrackTableModel != nullptr + ? pTrackTableModel->fieldIndex( + static_cast( + pColumn->columnIdx())) + : pColumn->columnIdx()), + role); } int QmlLibraryTrackListModel::columnCount(const QModelIndex& parent) const { - // This is a list model, i.e. no entries have a parent. - VERIFY_OR_DEBUG_ASSERT(!parent.isValid()) { + VERIFY_OR_DEBUG_ASSERT(static_cast( + parent.internalPointer()) != this) { return 0; } + return m_columns.size(); +} - // There is exactly one column. All data is exposed as roles. - return 1; +QVariant QmlLibraryTrackListModel::headerData( + int section, Qt::Orientation orientation, int role) const { + VERIFY_OR_DEBUG_ASSERT(section >= 0 || section < m_columns.size()) { + return {}; + } + // TODO role + return m_columns[section]->label(); } QHash QmlLibraryTrackListModel::roleNames() const { return kRoleNames; } -QVariant QmlLibraryTrackListModel::get(int row) const { - QModelIndex idx = index(row, 0); - QVariantMap dataMap; - for (auto it = kRoleNames.constBegin(); it != kRoleNames.constEnd(); it++) { - dataMap.insert(it.value(), data(idx, it.key())); +QUrl QmlLibraryTrackListModel::getUrl(int row) const { + auto* const pTrackModel = dynamic_cast(sourceModel()); + + if (pTrackModel == nullptr) { + // TODO search for column with role + return {}; + } + return pTrackModel->getTrackUrl(sourceModel()->index(row, 0)); +} + +QmlTrackProxy* QmlLibraryTrackListModel::getTrack(int row) const { + auto* const pTrackModel = dynamic_cast(sourceModel()); + + if (pTrackModel == nullptr) { + // TODO search for column with role + return {}; + } + return make_qml_owned(pTrackModel->getTrack(sourceModel()->index(row, 0))); +} + +TrackModel::Capabilities QmlLibraryTrackListModel::getCapabilities() const { + auto* const pTrackModel = dynamic_cast(sourceModel()); + + if (pTrackModel != nullptr) { + return pTrackModel->getCapabilities(); + } + return TrackModel::Capability::None; +} +bool QmlLibraryTrackListModel::hasCapabilities(TrackModel::Capabilities caps) const { + return (getCapabilities() & caps) == caps; +} +void QmlLibraryTrackListModel::sort(int column, Qt::SortOrder order) { + VERIFY_OR_DEBUG_ASSERT(column >= 0 || column < m_columns.size()) { + return; + } + const auto& pColumn = m_columns[column]; + emit layoutAboutToBeChanged(QList(), + QAbstractItemModel::VerticalSortHint); + if (pColumn->columnIdx() < 0) { + // Use proxyIndex.column() + return sourceModel()->sort(column, order); } - return dataMap; + auto* const pTrackTableModel = qobject_cast(sourceModel()); + sourceModel()->sort(pTrackTableModel != nullptr + ? pTrackTableModel->fieldIndex( + static_cast( + pColumn->columnIdx())) + : pColumn->columnIdx(), + order); + emit layoutChanged(QList(), QAbstractItemModel::VerticalSortHint); } } // namespace qml diff --git a/src/qml/qmllibrarytracklistmodel.h b/src/qml/qmllibrarytracklistmodel.h index 10d8e9d5353f..6ee7203b8ae9 100644 --- a/src/qml/qmllibrarytracklistmodel.h +++ b/src/qml/qmllibrarytracklistmodel.h @@ -2,7 +2,9 @@ #include #include -class LibraryTableModel; +#include "library/trackmodel.h" +#include "qml/qmllibrarytracklistcolumn.h" +#include "qml/qmltrackproxy.h" namespace mixxx { namespace qml { @@ -10,25 +12,97 @@ namespace qml { class QmlLibraryTrackListModel : public QIdentityProxyModel { Q_OBJECT QML_NAMED_ELEMENT(LibraryTrackListModel) - QML_UNCREATABLE("Only accessible via Mixxx.Library.model") + Q_PROPERTY(QQmlListProperty columns READ columns FINAL) + QML_UNCREATABLE("Only accessible via Mixxx.Library") public: enum Roles { - TitleRole = Qt::UserRole, - ArtistRole, - AlbumRole, - AlbumArtistRole, - FileUrlRole, + Track = Qt::UserRole, + FileURL, + CoverArt, + Delegate }; Q_ENUM(Roles); - QmlLibraryTrackListModel(LibraryTableModel* pModel, QObject* pParent = nullptr); + // FIXME Remove the enum duplication with the `Capability` in `trackmodel.h` + enum class Capability { + None = 0u, + Reorder = 1u << 0u, + ReceiveDrops = 1u << 1u, + AddToTrackSet = 1u << 2u, + AddToAutoDJ = 1u << 3u, + Locked = 1u << 4u, + EditMetadata = 1u << 5u, + LoadToDeck = 1u << 6u, + LoadToSampler = 1u << 7u, + LoadToPreviewDeck = 1u << 8u, + Remove = 1u << 9u, + ResetPlayed = 1u << 10u, + Hide = 1u << 11u, + Unhide = 1u << 12u, + Purge = 1u << 13u, + RemovePlaylist = 1u << 14u, + RemoveCrate = 1u << 15u, + RemoveFromDisk = 1u << 16u, + Analyze = 1u << 17u, + Properties = 1u << 18u, + Sorting = 1u << 19u, + }; + Q_ENUM(Capability) + + QmlLibraryTrackListModel(const QList& librarySource, + QAbstractItemModel* pModel, + QObject* pParent = nullptr); ~QmlLibraryTrackListModel() = default; + QQmlListProperty columns() { + return {this, + &m_columns, + parent_qlist_append, + parent_qlist_count, + parent_qlist_at, + parent_qlist_clear}; + } + QVariant data(const QModelIndex& index, int role) const override; int columnCount(const QModelIndex& index = QModelIndex()) const override; + Q_INVOKABLE QUrl getUrl(int row) const; + Q_INVOKABLE mixxx::qml::QmlTrackProxy* getTrack(int row) const; + Q_INVOKABLE TrackModel::Capabilities getCapabilities() const; + Q_INVOKABLE bool hasCapabilities(TrackModel::Capabilities caps) const; QHash roleNames() const override; - Q_INVOKABLE QVariant get(int row) const; + Q_INVOKABLE QVariant headerData(int section, + Qt::Orientation orientation, + int role = Qt::DisplayRole) const override; + Q_INVOKABLE void sort(int column, Qt::SortOrder order) override; + + private: + std::vector> m_columns; + + static void parent_qlist_append( + QQmlListProperty* p, + QmlLibraryTrackListColumn* v) { + reinterpret_cast>*>( + p->data) + ->emplace_back(v); + } + static qsizetype parent_qlist_count(QQmlListProperty* p) { + return reinterpret_cast< + std::vector>*>(p->data) + ->size(); + } + static QmlLibraryTrackListColumn* parent_qlist_at( + QQmlListProperty* p, qsizetype idx) { + return reinterpret_cast< + std::vector>*>(p->data) + ->at(idx) + .get(); + } + static void parent_qlist_clear(QQmlListProperty* p) { + return reinterpret_cast< + std::vector>*>(p->data) + ->clear(); + } }; } // namespace qml diff --git a/src/qml/qmlplayermanagerproxy.cpp b/src/qml/qmlplayermanagerproxy.cpp index 2544b34f3ad5..cc2d1b3a8e97 100644 --- a/src/qml/qmlplayermanagerproxy.cpp +++ b/src/qml/qmlplayermanagerproxy.cpp @@ -5,6 +5,7 @@ #include "mixer/playermanager.h" #include "moc_qmlplayermanagerproxy.cpp" #include "qml/qmlplayerproxy.h" +#include "track/track_decl.h" namespace mixxx { namespace qml { @@ -31,6 +32,20 @@ QmlPlayerProxy* QmlPlayerManagerProxy::getPlayer(const QString& group) { [this, group](const QString& trackLocation, bool play) { loadLocationToPlayer(trackLocation, group, play); }); + connect(pPlayerProxy, + &QmlPlayerProxy::loadTrackRequested, + this, + [this, group](TrackPointer track, +#ifdef __STEM__ + mixxx::StemChannelSelection stemSelection, +#endif + bool play) { + loadTrackToPlayer(track, group, +#ifdef __STEM__ + stemSelection, +#endif + play); + }); connect(pPlayerProxy, &QmlPlayerProxy::cloneFromGroup, this, @@ -59,6 +74,19 @@ void QmlPlayerManagerProxy::loadLocationToPlayer( m_pPlayerManager->slotLoadLocationToPlayer(location, group, play); } +void QmlPlayerManagerProxy::loadTrackToPlayer(TrackPointer track, + const QString& group, +#ifdef __STEM__ + mixxx::StemChannelSelection stemSelection, +#endif + bool play) { + m_pPlayerManager->slotLoadTrackToPlayer(track, group, +#ifdef __STEM__ + stemSelection, +#endif + play); +} + // static QmlPlayerManagerProxy* QmlPlayerManagerProxy::create(QQmlEngine* pQmlEngine, QJSEngine* pJsEngine) { // The implementation of this method is mostly taken from the code example diff --git a/src/qml/qmlplayermanagerproxy.h b/src/qml/qmlplayermanagerproxy.h index 1cf650b7ceb8..3f23ad664867 100644 --- a/src/qml/qmlplayermanagerproxy.h +++ b/src/qml/qmlplayermanagerproxy.h @@ -24,6 +24,12 @@ class QmlPlayerManagerProxy : public QObject { const QUrl& locationUrl, bool play = false); Q_INVOKABLE void loadLocationToPlayer( const QString& location, const QString& group, bool play = false); + Q_INVOKABLE void loadTrackToPlayer(TrackPointer track, + const QString& group, +#ifdef __STEM__ + mixxx::StemChannelSelection stemSelection, +#endif + bool play); static QmlPlayerManagerProxy* create(QQmlEngine* pQmlEngine, QJSEngine* pJsEngine); static void registerPlayerManager(std::shared_ptr pPlayerManager) { diff --git a/src/qml/qmlplayerproxy.cpp b/src/qml/qmlplayerproxy.cpp index d3b6056fda6b..ba5b58ea2b6d 100644 --- a/src/qml/qmlplayerproxy.cpp +++ b/src/qml/qmlplayerproxy.cpp @@ -1,42 +1,19 @@ #include "qml/qmlplayerproxy.h" #include +#include #include "mixer/basetrackplayer.h" #include "moc_qmlplayerproxy.cpp" -#include "qml/asyncimageprovider.h" - -#define PROPERTY_IMPL_GETTER(TYPE, NAME, GETTER) \ - TYPE QmlPlayerProxy::GETTER() const { \ - const TrackPointer pTrack = m_pCurrentTrack; \ - if (pTrack == nullptr) { \ - return TYPE(); \ - } \ - return pTrack->GETTER(); \ - } - -#define PROPERTY_IMPL(TYPE, NAME, GETTER, SETTER) \ - PROPERTY_IMPL_GETTER(TYPE, NAME, GETTER) \ - void QmlPlayerProxy::SETTER(const TYPE& value) { \ - const TrackPointer pTrack = m_pCurrentTrack; \ - if (pTrack != nullptr) { \ - pTrack->SETTER(value); \ - } \ - } +#include "qmltrackproxy.h" +#include "track/track.h" namespace mixxx { namespace qml { QmlPlayerProxy::QmlPlayerProxy(BaseTrackPlayer* pTrackPlayer, QObject* parent) : QObject(parent), - m_pTrackPlayer(pTrackPlayer), - m_pBeatsModel(new QmlBeatsModel(this)), - m_pHotcuesModel(new QmlCuesModel(this)) -#ifdef __STEM__ - , - m_pStemsModel(std::make_unique(this)) -#endif -{ + m_pTrackPlayer(pTrackPlayer) { connect(m_pTrackPlayer, &BaseTrackPlayer::loadingTrack, this, @@ -46,15 +23,25 @@ QmlPlayerProxy::QmlPlayerProxy(BaseTrackPlayer* pTrackPlayer, QObject* parent) this, &QmlPlayerProxy::slotTrackLoaded); connect(m_pTrackPlayer, - &BaseTrackPlayer::playerEmpty, + &BaseTrackPlayer::trackUnloaded, this, - &QmlPlayerProxy::trackUnloaded); - connect(this, &QmlPlayerProxy::trackChanged, this, &QmlPlayerProxy::slotTrackChanged); + &QmlPlayerProxy::slotTrackUnloaded); if (m_pTrackPlayer && m_pTrackPlayer->getLoadedTrack()) { slotTrackLoaded(pTrackPlayer->getLoadedTrack()); } } +void QmlPlayerProxy::loadTrack(QmlTrackProxy* track, bool play) { + if (track == nullptr || track->internal() == nullptr) { + return; + } + emit loadTrackRequested(track->internal(), +#ifdef __STEM__ + mixxx::StemChannel::All, +#endif + play); +} + void QmlPlayerProxy::loadTrackFromLocation(const QString& trackLocation, bool play) { emit loadTrackFromLocationRequested(trackLocation, play); } @@ -69,323 +56,47 @@ void QmlPlayerProxy::loadTrackFromLocationUrl(const QUrl& trackLocationUrl, bool void QmlPlayerProxy::slotTrackLoaded(TrackPointer pTrack) { m_pCurrentTrack = pTrack; - if (pTrack != nullptr) { - connect(pTrack.get(), - &Track::artistChanged, - this, - &QmlPlayerProxy::artistChanged); - connect(pTrack.get(), - &Track::titleChanged, - this, - &QmlPlayerProxy::titleChanged); - connect(pTrack.get(), - &Track::albumChanged, - this, - &QmlPlayerProxy::albumChanged); - connect(pTrack.get(), - &Track::albumArtistChanged, - this, - &QmlPlayerProxy::albumArtistChanged); - connect(pTrack.get(), - &Track::genreChanged, - this, - &QmlPlayerProxy::genreChanged); - connect(pTrack.get(), - &Track::composerChanged, - this, - &QmlPlayerProxy::composerChanged); - connect(pTrack.get(), - &Track::groupingChanged, - this, - &QmlPlayerProxy::groupingChanged); - connect(pTrack.get(), - &Track::yearChanged, - this, - &QmlPlayerProxy::yearChanged); - connect(pTrack.get(), - &Track::trackNumberChanged, - this, - &QmlPlayerProxy::trackNumberChanged); - connect(pTrack.get(), - &Track::trackTotalChanged, - this, - &QmlPlayerProxy::trackTotalChanged); - connect(pTrack.get(), - &Track::commentChanged, - this, - &QmlPlayerProxy::commentChanged); - connect(pTrack.get(), - &Track::keyChanged, - this, - &QmlPlayerProxy::keyTextChanged); - connect(pTrack.get(), - &Track::colorUpdated, - this, - &QmlPlayerProxy::colorChanged); - connect(pTrack.get(), - &Track::waveformUpdated, - this, - &QmlPlayerProxy::slotWaveformChanged); - connect(pTrack.get(), - &Track::beatsUpdated, - this, - &QmlPlayerProxy::slotBeatsChanged); - connect(pTrack.get(), - &Track::cuesUpdated, - this, - &QmlPlayerProxy::slotHotcuesChanged); -#ifdef __STEM__ - connect(pTrack.get(), - &Track::stemsUpdated, - this, - &QmlPlayerProxy::slotStemsChanged); -#endif - slotBeatsChanged(); - slotHotcuesChanged(); -#ifdef __STEM__ - slotStemsChanged(); -#endif - slotWaveformChanged(); - } emit trackChanged(); emit trackLoaded(); } -void QmlPlayerProxy::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack) { +void QmlPlayerProxy::slotTrackUnloaded(TrackPointer pOldTrack) { VERIFY_OR_DEBUG_ASSERT(pOldTrack == m_pCurrentTrack) { qWarning() << "QML Player proxy was expected to contain " << pOldTrack.get() << "as active track but got" << m_pCurrentTrack.get(); } - - if (pNewTrack.get() == m_pCurrentTrack.get()) { - emit trackLoading(); - return; - } - - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack != nullptr) { - disconnect(pTrack.get(), nullptr, this, nullptr); + if (m_pCurrentTrack != nullptr) { + disconnect(m_pCurrentTrack.get(), nullptr, this, nullptr); } m_pCurrentTrack.reset(); - m_pCurrentTrack = pNewTrack; - m_waveformTexture = QImage(); emit trackChanged(); - emit trackLoading(); -} - -void QmlPlayerProxy::slotTrackChanged() { - emit artistChanged(); - emit titleChanged(); - emit albumChanged(); - emit albumArtistChanged(); - emit genreChanged(); - emit composerChanged(); - emit groupingChanged(); - emit yearChanged(); - emit trackNumberChanged(); - emit trackTotalChanged(); - emit commentChanged(); - emit keyTextChanged(); - emit colorChanged(); - emit coverArtUrlChanged(); - emit trackLocationUrlChanged(); -#ifdef __STEM__ - emit stemsChanged(); -#endif - - emit waveformLengthChanged(); - emit waveformTextureChanged(); - emit waveformTextureSizeChanged(); - emit waveformTextureStrideChanged(); + emit trackUnloaded(); } -void QmlPlayerProxy::slotWaveformChanged() { - emit waveformLengthChanged(); - emit waveformTextureSizeChanged(); - emit waveformTextureStrideChanged(); - - const TrackPointer pTrack = m_pCurrentTrack; - if (!pTrack) { - return; - } - const ConstWaveformPointer pWaveform = - pTrack->getWaveform(); - if (!pWaveform) { - return; - } - const int textureWidth = pWaveform->getTextureStride(); - const int textureHeight = pWaveform->getTextureSize() / pWaveform->getTextureStride(); - - const WaveformData* data = pWaveform->data(); - // Make a copy of the waveform data, stripping the stems portion. Note that the datasize is - // different from the texture size -- we want the full texture size so the upload works. See - // m_data in waveform/waveform.h. - m_waveformData.resize(pWaveform->getTextureSize()); - for (int i = 0; i < pWaveform->getDataSize(); i++) { - m_waveformData[i] = data[i].filtered; - } - - m_waveformTexture = - QImage(reinterpret_cast(m_waveformData.data()), - textureWidth, - textureHeight, - QImage::Format_RGBA8888); - DEBUG_ASSERT(!m_waveformTexture.isNull()); - emit waveformTextureChanged(); -} - -void QmlPlayerProxy::slotBeatsChanged() { - VERIFY_OR_DEBUG_ASSERT(m_pBeatsModel != nullptr) { - return; - } - - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack) { - const auto trackEndPosition = mixxx::audio::FramePos{ - pTrack->getDuration() * pTrack->getSampleRate()}; - const auto pBeats = pTrack->getBeats(); - m_pBeatsModel->setBeats(pBeats, trackEndPosition); - } else { - m_pBeatsModel->setBeats(nullptr, audio::kStartFramePos); - } +QmlTrackProxy* QmlPlayerProxy::currentTrack() { + auto* pTrack = new QmlTrackProxy(m_pCurrentTrack, this); + QQmlEngine::setObjectOwnership(pTrack, QQmlEngine::JavaScriptOwnership); + return pTrack; } -#ifdef __STEM__ -void QmlPlayerProxy::slotStemsChanged() { - VERIFY_OR_DEBUG_ASSERT(m_pStemsModel != nullptr) { - return; - } - - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack) { - m_pStemsModel->setStems(pTrack->getStemInfo()); - emit stemsChanged(); - } -} -#endif - -void QmlPlayerProxy::slotHotcuesChanged() { - VERIFY_OR_DEBUG_ASSERT(m_pHotcuesModel != nullptr) { +void QmlPlayerProxy::slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack) { + if (pNewTrack.get() == m_pCurrentTrack.get()) { + emit trackLoading(); return; } - QList hotcues; - - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack) { - const auto& cuePoints = pTrack->getCuePoints(); - for (const auto& cuePoint : cuePoints) { - if (cuePoint->getHotCue() == Cue::kNoHotCue) - continue; - hotcues.append(cuePoint); - } + if (m_pCurrentTrack != nullptr) { + disconnect(m_pCurrentTrack.get(), nullptr, this, nullptr); } - m_pHotcuesModel->setCues(hotcues); - emit cuesChanged(); -} - -int QmlPlayerProxy::getWaveformLength() const { - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack) { - const ConstWaveformPointer pWaveform = pTrack->getWaveform(); - if (pWaveform) { - return pWaveform->getDataSize(); - } - } - return 0; -} - -QString QmlPlayerProxy::getWaveformTexture() const { - if (m_waveformTexture.isNull()) { - return QString(); - } - QByteArray byteArray; - QBuffer buffer(&byteArray); - buffer.open(QIODevice::WriteOnly); - m_waveformTexture.save(&buffer, "png"); - - QString imageData = QString::fromLatin1(byteArray.toBase64().data()); - if (imageData.isEmpty()) { - return QString(); - } - - return QStringLiteral("data:image/png;base64,") + imageData; -} - -int QmlPlayerProxy::getWaveformTextureSize() const { - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack) { - const ConstWaveformPointer pWaveform = pTrack->getWaveform(); - if (pWaveform) { - return pWaveform->getTextureSize(); - } - } - return 0; -} - -int QmlPlayerProxy::getWaveformTextureStride() const { - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack) { - const ConstWaveformPointer pWaveform = pTrack->getWaveform(); - if (pWaveform) { - return pWaveform->getTextureStride(); - } - } - return 0; + m_pCurrentTrack = pNewTrack; + emit trackChanged(); + emit trackLoading(); } bool QmlPlayerProxy::isLoaded() const { return m_pCurrentTrack != nullptr; } -PROPERTY_IMPL(QString, artist, getArtist, setArtist) -PROPERTY_IMPL(QString, title, getTitle, setTitle) -PROPERTY_IMPL(QString, album, getAlbum, setAlbum) -PROPERTY_IMPL(QString, albumArtist, getAlbumArtist, setAlbumArtist) -PROPERTY_IMPL_GETTER(QString, genre, getGenre) -PROPERTY_IMPL(QString, composer, getComposer, setComposer) -PROPERTY_IMPL(QString, grouping, getGrouping, setGrouping) -PROPERTY_IMPL(QString, year, getYear, setYear) -PROPERTY_IMPL(QString, trackNumber, getTrackNumber, setTrackNumber) -PROPERTY_IMPL(QString, trackTotal, getTrackTotal, setTrackTotal) -PROPERTY_IMPL(QString, comment, getComment, setComment) -PROPERTY_IMPL(QString, keyText, getKeyText, setKeyText) - -QColor QmlPlayerProxy::getColor() const { - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack == nullptr) { - return QColor(); - } - return RgbColor::toQColor(pTrack->getColor()); -} - -void QmlPlayerProxy::setColor(const QColor& value) { - const TrackPointer pTrack = m_pTrackPlayer->getLoadedTrack(); - if (pTrack != nullptr) { - std::optional color = RgbColor::fromQColor(value); - pTrack->setColor(color); - } -} - -QUrl QmlPlayerProxy::getCoverArtUrl() const { - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack == nullptr) { - return QUrl(); - } - - const CoverInfo coverInfo = pTrack->getCoverInfoWithLocation(); - return AsyncImageProvider::trackLocationToCoverArtUrl(coverInfo.trackLocation); -} - -QUrl QmlPlayerProxy::getTrackLocationUrl() const { - const TrackPointer pTrack = m_pCurrentTrack; - if (pTrack == nullptr) { - return QUrl(); - } - - return QUrl::fromLocalFile(pTrack->getLocation()); -} - } // namespace qml } // namespace mixxx diff --git a/src/qml/qmlplayerproxy.h b/src/qml/qmlplayerproxy.h index 54f42bb9c9a3..538639bdb0fa 100644 --- a/src/qml/qmlplayerproxy.h +++ b/src/qml/qmlplayerproxy.h @@ -7,115 +7,36 @@ #include #include "mixer/basetrackplayer.h" -#include "qml/qmlbeatsmodel.h" -#include "qml/qmlcuesmodel.h" -#include "qml/qmlstemsmodel.h" -#include "track/cueinfo.h" -#include "track/track.h" -#include "waveform/waveform.h" +#include "qmltrackproxy.h" +#include "track/track_decl.h" namespace mixxx { namespace qml { class QmlPlayerProxy : public QObject { Q_OBJECT + Q_PROPERTY(QmlTrackProxy* currentTrack READ currentTrack NOTIFY trackChanged) Q_PROPERTY(bool isLoaded READ isLoaded NOTIFY trackChanged) - Q_PROPERTY(QString artist READ getArtist WRITE setArtist NOTIFY artistChanged) - Q_PROPERTY(QString title READ getTitle WRITE setTitle NOTIFY titleChanged) - Q_PROPERTY(QString album READ getAlbum WRITE setAlbum NOTIFY albumChanged) - Q_PROPERTY(QString albumArtist READ getAlbumArtist WRITE setAlbumArtist - NOTIFY albumArtistChanged) - Q_PROPERTY(QString genre READ getGenre STORED false NOTIFY genreChanged) - Q_PROPERTY(QString composer READ getComposer WRITE setComposer NOTIFY composerChanged) - Q_PROPERTY(QString grouping READ getGrouping WRITE setGrouping NOTIFY groupingChanged) - Q_PROPERTY(QString year READ getYear WRITE setYear NOTIFY yearChanged) - Q_PROPERTY(QString trackNumber READ getTrackNumber WRITE setTrackNumber - NOTIFY trackNumberChanged) - Q_PROPERTY(QString trackTotal READ getTrackTotal WRITE setTrackTotal NOTIFY trackTotalChanged) - Q_PROPERTY(QString comment READ getComment WRITE setComment NOTIFY commentChanged) - Q_PROPERTY(QString keyText READ getKeyText WRITE setKeyText NOTIFY keyTextChanged) - Q_PROPERTY(QColor color READ getColor WRITE setColor NOTIFY colorChanged) - Q_PROPERTY(QUrl coverArtUrl READ getCoverArtUrl NOTIFY coverArtUrlChanged) - Q_PROPERTY(QUrl trackLocationUrl READ getTrackLocationUrl NOTIFY trackLocationUrlChanged) QML_NAMED_ELEMENT(Player) QML_UNCREATABLE("Only accessible via Mixxx.PlayerManager.getPlayer(group)") - Q_PROPERTY(int waveformLength READ getWaveformLength NOTIFY waveformLengthChanged) - Q_PROPERTY(QString waveformTexture READ getWaveformTexture NOTIFY waveformTextureChanged) - Q_PROPERTY(int waveformTextureSize READ getWaveformTextureSize NOTIFY - waveformTextureSizeChanged) - Q_PROPERTY(int waveformTextureStride READ getWaveformTextureStride NOTIFY - waveformTextureStrideChanged) - - Q_PROPERTY(mixxx::qml::QmlBeatsModel* beatsModel MEMBER m_pBeatsModel CONSTANT); - Q_PROPERTY(mixxx::qml::QmlCuesModel* hotcuesModel MEMBER m_pHotcuesModel CONSTANT); -#ifdef __STEM__ - Q_PROPERTY(mixxx::qml::QmlStemsModel* stemsModel READ getStemsModel CONSTANT); -#endif - public: explicit QmlPlayerProxy(BaseTrackPlayer* pTrackPlayer, QObject* parent = nullptr); bool isLoaded() const; - QString getTrack() const; - QString getTitle() const; - QString getArtist() const; - QString getAlbum() const; - QString getAlbumArtist() const; - QString getGenre() const; - QString getComposer() const; - QString getGrouping() const; - QString getYear() const; - QString getTrackNumber() const; - QString getTrackTotal() const; - QString getComment() const; - QString getKeyText() const; - QColor getColor() const; - QUrl getCoverArtUrl() const; - QUrl getTrackLocationUrl() const; - - int getWaveformLength() const; - QString getWaveformTexture() const; - int getWaveformTextureSize() const; - int getWaveformTextureStride() const; - /// Needed for interacting with the raw track player object. BaseTrackPlayer* internalTrackPlayer() const { return m_pTrackPlayer; } + Q_INVOKABLE void loadTrack(mixxx::qml::QmlTrackProxy* track, bool play = false); Q_INVOKABLE void loadTrackFromLocation(const QString& trackLocation, bool play = false); Q_INVOKABLE void loadTrackFromLocationUrl(const QUrl& trackLocationUrl, bool play = false); -#ifdef __STEM__ - QmlStemsModel* getStemsModel() const { - return m_pStemsModel.get(); - } -#endif - public slots: void slotTrackLoaded(TrackPointer pTrack); + void slotTrackUnloaded(TrackPointer pOldTrack); void slotLoadingTrack(TrackPointer pNewTrack, TrackPointer pOldTrack); - void slotTrackChanged(); - void slotWaveformChanged(); - void slotBeatsChanged(); - void slotHotcuesChanged(); -#ifdef __STEM__ - void slotStemsChanged(); -#endif - - void setArtist(const QString& artist); - void setTitle(const QString& title); - void setAlbum(const QString& album); - void setAlbumArtist(const QString& albumArtist); - void setComposer(const QString& composer); - void setGrouping(const QString& grouping); - void setYear(const QString& year); - void setTrackNumber(const QString& trackNumber); - void setTrackTotal(const QString& trackTotal); - void setComment(const QString& comment); - void setKeyText(const QString& keyText); - void setColor(const QColor& color); signals: void trackLoading(); @@ -124,43 +45,18 @@ class QmlPlayerProxy : public QObject { void trackChanged(); void cloneFromGroup(const QString& group); - void albumChanged(); - void titleChanged(); - void artistChanged(); - void albumArtistChanged(); - void genreChanged(); - void composerChanged(); - void groupingChanged(); - void yearChanged(); - void trackNumberChanged(); - void trackTotalChanged(); - void commentChanged(); - void keyTextChanged(); - void colorChanged(); - void coverArtUrlChanged(); - void trackLocationUrlChanged(); - void cuesChanged(); + void loadTrackFromLocationRequested(const QString& trackLocation, bool play); + void loadTrackRequested(TrackPointer track, #ifdef __STEM__ - void stemsChanged(); + mixxx::StemChannelSelection stemSelection, #endif - - void loadTrackFromLocationRequested(const QString& trackLocation, bool play); - - void waveformLengthChanged(); - void waveformTextureChanged(); - void waveformTextureSizeChanged(); - void waveformTextureStrideChanged(); + bool play); private: - std::vector m_waveformData; - QImage m_waveformTexture; + QmlTrackProxy* currentTrack(); + QPointer m_pTrackPlayer; TrackPointer m_pCurrentTrack; - QmlBeatsModel* m_pBeatsModel; - QmlCuesModel* m_pHotcuesModel; -#ifdef __STEM__ - std::unique_ptr m_pStemsModel; -#endif }; } // namespace qml diff --git a/src/qml/qmlsettingparameter.cpp b/src/qml/qmlsettingparameter.cpp new file mode 100644 index 000000000000..a951c179df33 --- /dev/null +++ b/src/qml/qmlsettingparameter.cpp @@ -0,0 +1,74 @@ +#include "qml/qmlsettingparameter.h" + +#include +#include + +#include "moc_qmlsettingparameter.cpp" +#include "util/assert.h" + +namespace mixxx { +namespace qml { + +QmlSettingGroup::QmlSettingGroup(QQuickItem* parent) + : QQuickItem(parent) { +} +QmlSettingParameter::QmlSettingParameter(QQuickItem* parent) + : QmlSettingGroup(parent) { +} + +void QmlSettingParameter::componentComplete() { + QmlSettingGroup::componentComplete(); + QList pathItems; + auto* pParent = parentItem(); + while (pParent != nullptr) { + auto* pManager = qobject_cast(pParent); + if (pManager) { + pManager->registerSettingParamater(this, pathItems); + return; + } + auto* pGroup = qobject_cast(pParent); + if (pGroup) { + pathItems.prepend(pGroup); + } + pParent = pParent->parentItem(); + } + DEBUG_ASSERT(!"Couldn't find manager!"); +} + +QmlSettingParameterManager::QmlSettingParameterManager(QQuickItem* parent) + : QQuickItem(parent), + m_model(this) { + m_model.setSourceModel(&m_sourceModel); + m_model.setFilterKeyColumn(1); + m_model.setFilterCaseSensitivity(Qt::CaseInsensitive); +} +QmlSettingParameterManager::~QmlSettingParameterManager() { + // Manually deleting children so they can complete deregistration + qDeleteAll(childItems()); +} + +void QmlSettingParameterManager::registerSettingParamater( + QmlSettingParameter* pParameter, QList pathItems) { + QStringList path; + for (const auto* pItem : pathItems) { + path.append(pItem->label()); + } + pathItems.append(pParameter); + + auto* pItem = new QStandardItem(pParameter->label()); + pItem->setData(path.join(" > "), Qt::WhatsThisRole); + pItem->setData(QVariant::fromValue(pathItems), Qt::ToolTipRole); + m_sourceModel.appendRow(QList{pItem, + new QStandardItem(pParameter->label() + path.join(" > "))}); + auto rowIndex = m_sourceModel.index(m_sourceModel.rowCount() - 1, 0); + connect(pParameter, &QObject::destroyed, this, [this, rowIndex](QObject*) { + m_sourceModel.removeRow(rowIndex.row()); + }); +} + +void QmlSettingParameterManager::search(const QString& criteria) { + m_model.setFilterFixedString(criteria); +} + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmlsettingparameter.h b/src/qml/qmlsettingparameter.h new file mode 100644 index 000000000000..fc67c6b26772 --- /dev/null +++ b/src/qml/qmlsettingparameter.h @@ -0,0 +1,67 @@ +#pragma once +#include +#include +#include +#include + +namespace mixxx { +namespace qml { + +class QmlSettingGroup : public QQuickItem { + Q_OBJECT + Q_PROPERTY(QString label MEMBER m_label FINAL) + QML_NAMED_ELEMENT(SettingGroup) + public: + explicit QmlSettingGroup(QQuickItem* parent = nullptr); + + const QString& label() const { + return m_label; + } + signals: + Q_INVOKABLE void activated(); + + private: + QString m_label; +}; + +class QmlSettingParameterManager; +class QmlSettingParameter : public QmlSettingGroup { + Q_OBJECT + Q_PROPERTY(QStringList keywords MEMBER m_keywords FINAL) + QML_NAMED_ELEMENT(SettingParameter) + Q_INTERFACES(QQmlParserStatus) + public: + explicit QmlSettingParameter(QQuickItem* parent = nullptr); + + void componentComplete() override; + + const QStringList& keywords() const { + return m_keywords; + } + + private: + QStringList m_keywords; +}; + +class QmlSettingParameterManager : public QQuickItem { + Q_OBJECT + Q_PROPERTY(QSortFilterProxyModel* model READ model CONSTANT) + QML_NAMED_ELEMENT(SettingParameterManager) + public: + explicit QmlSettingParameterManager(QQuickItem* parent = nullptr); + ~QmlSettingParameterManager(); + + void registerSettingParamater(QmlSettingParameter* parameter, QList); + Q_INVOKABLE void search(const QString& criteria); + + QSortFilterProxyModel* model() { + return &m_model; + } + + private: + QStandardItemModel m_sourceModel; + QSortFilterProxyModel m_model; +}; + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmlsidebarmodelproxy.cpp b/src/qml/qmlsidebarmodelproxy.cpp new file mode 100644 index 000000000000..4483a732ccab --- /dev/null +++ b/src/qml/qmlsidebarmodelproxy.cpp @@ -0,0 +1,88 @@ +#include "qml/qmlsidebarmodelproxy.h" + +#include + +#include +#include +#include + +#include "library/treeitem.h" +#include "moc_qmlsidebarmodelproxy.cpp" +#include "qml/qmllibrarysource.h" +#include "util/assert.h" +#include "util/parented_ptr.h" + +namespace mixxx { +namespace qml { + +namespace { +const QHash kRoleNames = { + {Qt::DisplayRole, "label"}, + {QmlSidebarModelProxy::IconRole, "icon"}, +}; +} // namespace + +QHash QmlSidebarModelProxy::roleNames() const { + return kRoleNames; +} + +QVariant QmlSidebarModelProxy::get(int row) const { + QModelIndex idx = index(row, 0); + QVariantMap dataMap; + for (auto it = kRoleNames.constBegin(); it != kRoleNames.constEnd(); it++) { + dataMap.insert(it.value(), data(idx, it.key())); + } + return dataMap; +} + +void QmlSidebarModelProxy::activate(const QModelIndex& index) { + VERIFY_OR_DEBUG_ASSERT(index.isValid()) { + return; + } + if (index.internalPointer() == this) { + VERIFY_OR_DEBUG_ASSERT(index.row() >= 0 && index.row() < m_sFeatures.length()) { + return; + } + m_sFeatures[index.row()]->activate(); + } else { + TreeItem* pTreeItem = static_cast(index.internalPointer()); + VERIFY_OR_DEBUG_ASSERT(pTreeItem != nullptr) { + return; + } + LibraryFeature* pFeature = pTreeItem->feature(); + DEBUG_ASSERT(pFeature); + pFeature->activateChild(index); + pFeature->onLazyChildExpandation(index); + } +} + +QmlSidebarModelProxy::QmlSidebarModelProxy(QObject* parent) + : SidebarModel(parent), + m_tracklist(nullptr) { +} +QmlSidebarModelProxy::~QmlSidebarModelProxy() = default; + +void QmlSidebarModelProxy::update(const QList& sources) { + beginResetModel(); + qDeleteAll(m_sFeatures); + for (const auto& librarySource : sources) { + VERIFY_OR_DEBUG_ASSERT(librarySource) { + continue; + } + connect(librarySource, + &QmlLibrarySource::requestTrackModel, + this, + &QmlSidebarModelProxy::slotShowTrackModel); + auto* pLibrarySource = librarySource->internal(); + addLibraryFeature(pLibrarySource); + } + endResetModel(); +} + +void QmlSidebarModelProxy::slotShowTrackModel(std::shared_ptr pModel) { + m_tracklist = pModel; + emit tracklistChanged(); +} + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmlsidebarmodelproxy.h b/src/qml/qmlsidebarmodelproxy.h new file mode 100644 index 000000000000..8607da4c2562 --- /dev/null +++ b/src/qml/qmlsidebarmodelproxy.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "library/libraryfeature.h" +#include "library/sidebarmodel.h" +#include "qmllibrarytracklistmodel.h" +#include "util/parented_ptr.h" + +namespace mixxx { +namespace qml { + +class QmlLibrarySource; + +class QmlSidebarModelProxy : public SidebarModel { + Q_OBJECT + Q_PROPERTY(QmlLibraryTrackListModel* tracklist READ tracklist NOTIFY tracklistChanged) + QML_ANONYMOUS + public: + enum Roles { + LabelRole = Qt::UserRole, + IconRole, + }; + Q_ENUM(Roles); + Q_DISABLE_COPY_MOVE(QmlSidebarModelProxy) + explicit QmlSidebarModelProxy(QObject* parent = nullptr); + ~QmlSidebarModelProxy() override; + + QmlLibraryTrackListModel* tracklist() const { + return m_tracklist.get(); + } + + void update(const QList& sources); + QHash roleNames() const override; + Q_INVOKABLE QVariant get(int row) const; + Q_INVOKABLE void activate(const QModelIndex& index); + signals: + void tracklistChanged(); + + protected slots: + void slotShowTrackModel(std::shared_ptr pModel); + + private: + std::shared_ptr m_tracklist; +}; + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmlsoundmanagerproxy.cpp b/src/qml/qmlsoundmanagerproxy.cpp new file mode 100644 index 000000000000..2ca419d348d4 --- /dev/null +++ b/src/qml/qmlsoundmanagerproxy.cpp @@ -0,0 +1,264 @@ +#include "qmlsoundmanagerproxy.h" + +#include + +#include + +#include "moc_qmlsoundmanagerproxy.cpp" +#include "qml_owned_ptr.h" +#include "soundio/soundmanager.h" +#include "soundio/soundmanagerutil.h" +#include "util/assert.h" +#include "util/scopedoverridecursor.h" + +namespace mixxx { +namespace qml { + +namespace { +const QString kAppGroup = QStringLiteral("[App]"); +const ConfigKey kKeylockEngineCfgkey = + ConfigKey(kAppGroup, QStringLiteral("keylock_engine")); + +} // namespace + +uint QmlSoundInputDeviceProxy::getChannelCount() const { + return m_pInternal->getNumInputChannels(); +} +uint QmlSoundOutputDeviceProxy::getChannelCount() const { + return m_pInternal->getNumOutputChannels(); +} +SoundDeviceId QmlSoundDeviceProxy::getDeviceId() const { + return m_pInternal->getDeviceId(); +} + +QList QmlSoundInputDeviceProxy::connections( + mixxx::qml::QmlSoundManagerProxy* manager) { + DEBUG_ASSERT(qml_owned_ptr(manager)); + QList connections; + + auto pManager = manager->internal(); + auto config = pManager->getConfig(); + + const auto inputDeviceMap = config.getInputs(); + for (auto it = inputDeviceMap.cbegin(); it != inputDeviceMap.cend(); ++it) { + if (it.key() == getDeviceId()) { + connections.push_back(make_qml_owned( + std::make_unique(it.value()), this)); + } + } + return connections; +} + +QList QmlSoundOutputDeviceProxy::connections( + mixxx::qml::QmlSoundManagerProxy* manager) { + DEBUG_ASSERT(qml_owned_ptr(manager)); + QList connections; + + auto pManager = manager->internal(); + auto config = pManager->getConfig(); + const auto ouputDeviceMap = config.getOutputs(); + for (auto it = ouputDeviceMap.cbegin(); it != ouputDeviceMap.cend(); ++it) { + if (it.key() == getDeviceId()) { + connections.push_back(make_qml_owned( + std::make_unique(it.value()), this)); + } + } + return connections; +} + +int QmlSoundDeviceConnection::getType() const { + return static_cast(m_audioPath->getType()); +} + +uchar QmlSoundDeviceConnection::getChannelGroup() const { + auto group = m_audioPath->getChannelGroup(); + return group.getChannelBase(); +} +uchar QmlSoundDeviceConnection::getIndex() const { + return m_audioPath->getIndex(); +} + +QmlSoundManagerProxy::QmlSoundManagerProxy( + std::shared_ptr pSoundManager, + QObject* parent) + : QObject(parent), + m_pSoundManager(pSoundManager), + m_keylockEngine(kKeylockEngineCfgkey), + m_config(m_pSoundManager->getConfig()) { + connect(m_pSoundManager.get(), &SoundManager::devicesClosed, this, [this]() { + SoundDeviceStatus status = SoundDeviceStatus::Ok; + { + ScopedWaitCursor cursor; + + if (m_commitInProgress.fetchAndStoreRelease(0) != 1) { + return; + } + + status = m_pSoundManager->setConfig(m_config); + } + if (status != SoundDeviceStatus::Ok) { + emit committed(m_pSoundManager->getLastErrorMessage(status)); + } else { + emit committed(); + } + m_config = m_pSoundManager->getConfig(); + }); +} + +// static +QmlSoundManagerProxy* QmlSoundManagerProxy::create( + QQmlEngine* pQmlEngine, + QJSEngine*) { + // The instance has to exist before it is used. We cannot replace it. + VERIFY_OR_DEBUG_ASSERT(s_pSoundManager) { + qWarning() << "SoundManager hasn't been registered yet"; + return nullptr; + } + return make_qml_owned(s_pSoundManager, pQmlEngine); +} + +QList QmlSoundManagerProxy::getHostAPIList() const { + return m_pSoundManager->getHostAPIList(); +} + +QList QmlSoundManagerProxy::availableInputDevices(const QString& filterAPI) { + QList devices; + + for (const auto& device : m_pSoundManager->getDeviceList(filterAPI, false, true)) { + devices.push_back(make_qml_owned(device, this)); + } + + return devices; +} + +QList QmlSoundManagerProxy::availableOutputDevices(const QString& filterAPI) { + QList devices; + + for (const auto& device : m_pSoundManager->getDeviceList(filterAPI, true, false)) { + devices.push_back(make_qml_owned(device, this)); + } + + return devices; +} + +QList QmlSoundManagerProxy::getKeylockEngines() const { + QList list; + for (const auto engine : EngineBuffer::kKeylockEngines) { + if (EngineBuffer::isKeylockEngineAvailable(engine)) { + list.append(engine); + } + } + return list; +} + +void QmlSoundManagerProxy::setKeylockEngine(EngineBuffer::KeylockEngine keylockEngine) { + m_keylockEngine.set(static_cast(keylockEngine)); + m_pSoundManager->userSettings()->setValue(kKeylockEngineCfgkey, keylockEngine); +} + +EngineBuffer::KeylockEngine QmlSoundManagerProxy::getKeylockEngine() const { + return m_pSoundManager->userSettings() + ->getValue( + kKeylockEngineCfgkey, EngineBuffer::defaultKeylockEngine()); +} + +QString QmlSoundManagerProxy::getAPI() const { + return m_config.getAPI(); +} +void QmlSoundManagerProxy::setAPI(const QString& api) { + m_config.setAPI(api); +} + +unsigned int QmlSoundManagerProxy::getSyncBuffers() const { + return m_config.getSyncBuffers(); +} + +void QmlSoundManagerProxy::setSyncBuffers(unsigned int syncBuffers) { + m_config.setSyncBuffers(syncBuffers); +} + +uint32_t QmlSoundManagerProxy::getSampleRate() const { + return m_config.getSampleRate(); +} + +void QmlSoundManagerProxy::setSampleRate(uint32_t sampleRate) { + m_config.setSampleRate(mixxx::audio::SampleRate(sampleRate)); +} + +QList QmlSoundManagerProxy::getSampleRates(const QString& filterAPI) const { + QList sampleRates; + for (const auto& sampleRate : m_pSoundManager->getSampleRates(filterAPI)) { + if (sampleRate.isValid()) { + sampleRates.append(sampleRate); + } + } + return sampleRates; +} + +bool QmlSoundManagerProxy::getForceNetworkClock() const { + return m_config.getForceNetworkClock(); +} + +void QmlSoundManagerProxy::setForceNetworkClock(bool force) { + m_config.setForceNetworkClock(force); +} + +unsigned int QmlSoundManagerProxy::getAudioBufferSizeIndex() const { + return m_config.getAudioBufferSizeIndex(); +} + +void QmlSoundManagerProxy::setAudioBufferSizeIndex(unsigned int latency) { + m_config.setAudioBufferSizeIndex(latency); +} + +void QmlSoundManagerProxy::addOutput(QmlSoundOutputDeviceProxy* device, + int type, + unsigned char channelGroup, + unsigned char index) { + VERIFY_OR_DEBUG_ASSERT(device && qml_owned_ptr(device)) { + return; + } + m_config.addOutput(device->getDeviceId(), + AudioOutput(static_cast(type), + channelGroup, + mixxx::audio::ChannelCount::stereo(), + index)); +} + +void QmlSoundManagerProxy::addInput(QmlSoundInputDeviceProxy* device, + int type, + unsigned char channelGroup, + unsigned char index) { + VERIFY_OR_DEBUG_ASSERT(device && qml_owned_ptr(device)) { + return; + } + m_config.addInput(device->getDeviceId(), + AudioInput(static_cast(type), + channelGroup, + mixxx::audio::ChannelCount::stereo(), + index)); +} + +void QmlSoundManagerProxy::clearOutputs() { + m_config.clearOutputs(); +} + +void QmlSoundManagerProxy::clearInputs() { + m_config.clearInputs(); +} + +bool QmlSoundManagerProxy::hasMicInputs() { + return m_config.hasMicInputs(); +} + +std::shared_ptr QmlSoundManagerProxy::internal() const { + return m_pSoundManager; +} + +void QmlSoundManagerProxy::commit() { + m_commitInProgress.storeRelease(1); + m_pSoundManager->closeActiveConfig(true); +} + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmlsoundmanagerproxy.h b/src/qml/qmlsoundmanagerproxy.h new file mode 100644 index 000000000000..0cddcbbe15fc --- /dev/null +++ b/src/qml/qmlsoundmanagerproxy.h @@ -0,0 +1,178 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include + +#include "control/pollingcontrolproxy.h" +#include "engine/enginebuffer.h" +#include "qml_owned_ptr.h" +#include "soundio/sounddevice.h" +#include "soundio/soundmanagerconfig.h" + +class SoundManager; + +namespace mixxx { +namespace qml { + +class QmlSoundManagerProxy; +class QmlSoundDeviceConnection; +class QmlSoundDeviceProxy : public QObject { + Q_OBJECT + Q_PROPERTY(QString displayName READ getDisplayName CONSTANT) + Q_PROPERTY(uint channelCount READ getChannelCount CONSTANT) + QML_ANONYMOUS + public: + explicit QmlSoundDeviceProxy(SoundDevicePointer pInternal, QObject* parent) + : QObject(parent), + m_pInternal(std::move(pInternal)) { + } + + QString getDisplayName() const { + return m_pInternal->getDisplayName(); + } + + virtual uint getChannelCount() const = 0; + SoundDeviceId getDeviceId() const; + + Q_INVOKABLE virtual QList connections( + mixxx::qml::QmlSoundManagerProxy* manager) = 0; + + protected: + SoundDevicePointer m_pInternal; +}; + +class QmlSoundInputDeviceProxy : public QmlSoundDeviceProxy { + Q_OBJECT + QML_NAMED_ELEMENT(InputDevice) + QML_UNCREATABLE("Use Mixxx.SoundManager to get devices") + public: + explicit QmlSoundInputDeviceProxy(SoundDevicePointer pInternal, QObject* parent) + : QmlSoundDeviceProxy(std::move(pInternal), parent) { + } + uint getChannelCount() const override; + Q_INVOKABLE QList connections( + mixxx::qml::QmlSoundManagerProxy* manager) override; +}; + +class QmlSoundOutputDeviceProxy : public QmlSoundDeviceProxy { + Q_OBJECT + QML_NAMED_ELEMENT(OutputDevice) + QML_UNCREATABLE("Use Mixxx.SoundManager to get devices") + public: + explicit QmlSoundOutputDeviceProxy(SoundDevicePointer pInternal, QObject* parent) + : QmlSoundDeviceProxy(std::move(pInternal), parent) { + } + uint getChannelCount() const override; + Q_INVOKABLE QList connections( + mixxx::qml::QmlSoundManagerProxy* manager) override; +}; + +class QmlSoundDeviceConnection : public QObject { + Q_OBJECT + Q_PROPERTY(int type READ getType CONSTANT) + Q_PROPERTY(uchar channelGroup READ getChannelGroup CONSTANT) + Q_PROPERTY(uchar index READ getIndex CONSTANT) + QML_ANONYMOUS + public: + QmlSoundDeviceConnection(std::unique_ptr path, QObject* parent = nullptr) + : QObject(parent), + m_audioPath(std::move(path)) { + } + + int getType() const; + uchar getChannelGroup() const; + uchar getIndex() const; + + private: + std::unique_ptr m_audioPath; +}; + +class QmlSoundDeviceInputConnection : public QmlSoundDeviceConnection { + Q_OBJECT + QML_NAMED_ELEMENT(InputConnection) + QML_UNCREATABLE("Use Mixxx.SoundDevice to get connections") + public: + QmlSoundDeviceInputConnection(std::unique_ptr path, QObject* parent = nullptr) + : QmlSoundDeviceConnection(std::move(path), parent) { + } +}; + +class QmlSoundDeviceOutputConnection : public QmlSoundDeviceConnection { + Q_OBJECT + QML_NAMED_ELEMENT(OutputConnection) + QML_UNCREATABLE("Use Mixxx.SoundDevice to get connections") + public: + QmlSoundDeviceOutputConnection(std::unique_ptr path, QObject* parent = nullptr) + : QmlSoundDeviceConnection(std::move(path), parent) { + } +}; + +class QmlSoundManagerProxy : public QObject { + Q_OBJECT + QML_NAMED_ELEMENT(SoundManager) + QML_SINGLETON + public: + explicit QmlSoundManagerProxy( + std::shared_ptr pSoundManager, + QObject* parent = nullptr); + + Q_INVOKABLE QList getHostAPIList() const; + Q_INVOKABLE QList availableInputDevices( + const QString& filterAPI); + Q_INVOKABLE QList availableOutputDevices( + const QString& filterAPI); + + Q_INVOKABLE QList getKeylockEngines() const; + Q_INVOKABLE EngineBuffer::KeylockEngine getKeylockEngine() const; + Q_INVOKABLE void setKeylockEngine(EngineBuffer::KeylockEngine); + Q_INVOKABLE QString getAPI() const; + Q_INVOKABLE void setAPI(const QString& api); + Q_INVOKABLE unsigned int getSyncBuffers() const; + Q_INVOKABLE void setSyncBuffers(unsigned int syncBuffers); + Q_INVOKABLE uint32_t getSampleRate() const; + Q_INVOKABLE void setSampleRate(uint32_t sampleRate); + Q_INVOKABLE bool getForceNetworkClock() const; + Q_INVOKABLE void setForceNetworkClock(bool force); + Q_INVOKABLE unsigned int getAudioBufferSizeIndex() const; + Q_INVOKABLE void setAudioBufferSizeIndex(unsigned int latency); + Q_INVOKABLE QList getSampleRates(const QString& filterAPI) const; + Q_INVOKABLE void addOutput(mixxx::qml::QmlSoundOutputDeviceProxy* device, + int type, + unsigned char channelGroup, + unsigned char index); + Q_INVOKABLE void addInput(mixxx::qml::QmlSoundInputDeviceProxy* device, + int type, + unsigned char channelGroup, + unsigned char index); + Q_INVOKABLE void clearOutputs(); + Q_INVOKABLE void clearInputs(); + Q_INVOKABLE bool hasMicInputs(); + + std::shared_ptr internal() const; + Q_INVOKABLE void commit(); + + static QmlSoundManagerProxy* create(QQmlEngine* pQmlEngine, QJSEngine* pJsEngine); + static void registerManager(std::shared_ptr pManager) { + s_pSoundManager = std::move(pManager); + } + + signals: + void committed(const QString& error = {}); + + private: + static inline std::shared_ptr s_pSoundManager; + + PollingControlProxy m_keylockEngine; + + std::shared_ptr m_pSoundManager; + SoundManagerConfig m_config; + QAtomicInt m_commitInProgress; +}; + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmltrackproxy.cpp b/src/qml/qmltrackproxy.cpp new file mode 100644 index 000000000000..61adb7af19b8 --- /dev/null +++ b/src/qml/qmltrackproxy.cpp @@ -0,0 +1,244 @@ +#include "qml/qmltrackproxy.h" + +#include + +#include "mixer/basetrackplayer.h" +#include "moc_qmltrackproxy.cpp" +#include "qml/asyncimageprovider.h" +#include "track/track.h" +#include "util/parented_ptr.h" + +#define PROPERTY_IMPL_GETTER(TYPE, NAME, GETTER) \ + TYPE QmlTrackProxy::GETTER() const { \ + const TrackPointer pTrack = m_pTrack; \ + if (pTrack == nullptr) { \ + return TYPE(); \ + } \ + return pTrack->GETTER(); \ + } + +#define PROPERTY_IMPL(TYPE, NAME, GETTER, SETTER) \ + PROPERTY_IMPL_GETTER(TYPE, NAME, GETTER) \ + void QmlTrackProxy::SETTER(const TYPE& value) { \ + const TrackPointer pTrack = m_pTrack; \ + if (pTrack != nullptr) { \ + pTrack->SETTER(value); \ + } \ + } + +namespace mixxx { +namespace qml { + +QmlTrackProxy::QmlTrackProxy(TrackPointer track, QObject* parent) + : QObject(parent), + m_pTrack(track), + m_pBeatsModel(make_parented(this)), + m_pHotcuesModel(make_parented(this)) +#ifdef __STEM__ + , + m_pStemsModel(make_parented(this)) +#endif +{ + if (m_pTrack == nullptr) { + return; + } + connect(m_pTrack.get(), + &Track::artistChanged, + this, + &QmlTrackProxy::artistChanged); + connect(m_pTrack.get(), + &Track::titleChanged, + this, + &QmlTrackProxy::titleChanged); + connect(m_pTrack.get(), + &Track::albumChanged, + this, + &QmlTrackProxy::albumChanged); + connect(m_pTrack.get(), + &Track::albumArtistChanged, + this, + &QmlTrackProxy::albumArtistChanged); + connect(m_pTrack.get(), + &Track::genreChanged, + this, + &QmlTrackProxy::genreChanged); + connect(m_pTrack.get(), + &Track::composerChanged, + this, + &QmlTrackProxy::composerChanged); + connect(m_pTrack.get(), + &Track::groupingChanged, + this, + &QmlTrackProxy::groupingChanged); + connect(m_pTrack.get(), + &Track::yearChanged, + this, + &QmlTrackProxy::yearChanged); + connect(m_pTrack.get(), + &Track::trackNumberChanged, + this, + &QmlTrackProxy::trackNumberChanged); + connect(m_pTrack.get(), + &Track::trackTotalChanged, + this, + &QmlTrackProxy::trackTotalChanged); + connect(m_pTrack.get(), + &Track::commentChanged, + this, + &QmlTrackProxy::commentChanged); + connect(m_pTrack.get(), + &Track::keyChanged, + this, + &QmlTrackProxy::keyTextChanged); + connect(m_pTrack.get(), + &Track::colorUpdated, + this, + &QmlTrackProxy::colorChanged); + connect(m_pTrack.get(), + &Track::beatsUpdated, + this, + &QmlTrackProxy::slotBeatsChanged); + connect(m_pTrack.get(), + &Track::cuesUpdated, + this, + &QmlTrackProxy::slotHotcuesChanged); + connect(m_pTrack.get(), + &Track::durationChanged, + this, + &QmlTrackProxy::durationChanged); +#ifdef __STEM__ + connect(m_pTrack.get(), + &Track::stemsUpdated, + this, + &QmlTrackProxy::slotStemsChanged); +#endif + slotBeatsChanged(); + slotHotcuesChanged(); +#ifdef __STEM__ + slotStemsChanged(); +#endif +} + +void QmlTrackProxy::slotBeatsChanged() { + VERIFY_OR_DEBUG_ASSERT(m_pBeatsModel) { + return; + } + + const TrackPointer pTrack = m_pTrack; + if (pTrack) { + const auto trackEndPosition = mixxx::audio::FramePos{ + pTrack->getDuration() * pTrack->getSampleRate()}; + const auto pBeats = pTrack->getBeats(); + m_pBeatsModel->setBeats(pBeats, trackEndPosition); + } else { + m_pBeatsModel->setBeats(nullptr, audio::kStartFramePos); + } +} + +#ifdef __STEM__ +void QmlTrackProxy::slotStemsChanged() { + VERIFY_OR_DEBUG_ASSERT(m_pStemsModel) { + return; + } + + if (m_pTrack) { + m_pStemsModel->setStems(m_pTrack->getStemInfo()); + emit stemsChanged(); + } +} +#endif + +void QmlTrackProxy::slotHotcuesChanged() { + VERIFY_OR_DEBUG_ASSERT(m_pHotcuesModel) { + return; + } + + QList hotcues; + + if (m_pTrack) { + const auto& cuePoints = m_pTrack->getCuePoints(); + for (const auto& cuePoint : cuePoints) { + if (cuePoint->getHotCue() == Cue::kNoHotCue) { + continue; + } + hotcues.append(cuePoint); + } + } + m_pHotcuesModel->setCues(hotcues); + emit cuesChanged(); +} + +PROPERTY_IMPL(QString, artist, getArtist, setArtist) +PROPERTY_IMPL(QString, title, getTitle, setTitle) +PROPERTY_IMPL(QString, album, getAlbum, setAlbum) +PROPERTY_IMPL(QString, albumArtist, getAlbumArtist, setAlbumArtist) +PROPERTY_IMPL_GETTER(QString, genre, getGenre) +PROPERTY_IMPL(QString, composer, getComposer, setComposer) +PROPERTY_IMPL(QString, grouping, getGrouping, setGrouping) +PROPERTY_IMPL(QString, year, getYear, setYear) +PROPERTY_IMPL(QString, trackNumber, getTrackNumber, setTrackNumber) +PROPERTY_IMPL(QString, trackTotal, getTrackTotal, setTrackTotal) +PROPERTY_IMPL(QString, comment, getComment, setComment) +PROPERTY_IMPL(QString, keyText, getKeyText, setKeyText) + +QColor QmlTrackProxy::getColor() const { + if (m_pTrack == nullptr) { + return QColor(); + } + return RgbColor::toQColor(m_pTrack->getColor()); +} + +double QmlTrackProxy::getDuration() const { + if (m_pTrack == nullptr) { + return -1; + } + return m_pTrack->getDuration(); +} + +int QmlTrackProxy::getSampleRate() const { + if (m_pTrack == nullptr) { + return 0; + } + return m_pTrack->getSampleRate(); +} + +void QmlTrackProxy::setColor(const QColor& value) { + if (m_pTrack) { + std::optional color = RgbColor::fromQColor(value); + m_pTrack->setColor(color); + } +} + +int QmlTrackProxy::getStars() const { + if (m_pTrack == nullptr) { + return -1; + } + return m_pTrack->getRating(); +} + +void QmlTrackProxy::setStars(int value) { + if (m_pTrack && value <= mixxx::TrackRecord::kMaxRating && + value >= mixxx::TrackRecord::kMinRating) { + m_pTrack->setRating(value); + } +} + +QUrl QmlTrackProxy::getCoverArtUrl() const { + if (m_pTrack == nullptr) { + return QUrl(); + } + + const CoverInfo coverInfo = m_pTrack->getCoverInfoWithLocation(); + return AsyncImageProvider::trackLocationToCoverArtUrl(coverInfo.trackLocation); +} + +QUrl QmlTrackProxy::getTrackLocationUrl() const { + if (m_pTrack == nullptr) { + return QUrl(); + } + + return QUrl::fromLocalFile(m_pTrack->getLocation()); +} + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmltrackproxy.h b/src/qml/qmltrackproxy.h new file mode 100644 index 000000000000..8b0e292d355c --- /dev/null +++ b/src/qml/qmltrackproxy.h @@ -0,0 +1,148 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include + +#include "mixer/basetrackplayer.h" +#include "qml/qmlbeatsmodel.h" +#include "qml/qmlcuesmodel.h" +#include "qml/qmlstemsmodel.h" +#include "track/track_decl.h" +#include "util/parented_ptr.h" + +namespace mixxx { +namespace qml { + +class QmlTrackProxy : public QObject { + Q_OBJECT + + Q_PROPERTY(QString artist READ getArtist WRITE setArtist NOTIFY artistChanged) + Q_PROPERTY(QString title READ getTitle WRITE setTitle NOTIFY titleChanged) + Q_PROPERTY(QString album READ getAlbum WRITE setAlbum NOTIFY albumChanged) + Q_PROPERTY(QString albumArtist READ getAlbumArtist WRITE setAlbumArtist + NOTIFY albumArtistChanged) + Q_PROPERTY(QString genre READ getGenre STORED false NOTIFY genreChanged) + Q_PROPERTY(QString composer READ getComposer WRITE setComposer NOTIFY composerChanged) + Q_PROPERTY(QString grouping READ getGrouping WRITE setGrouping NOTIFY groupingChanged) + Q_PROPERTY(int stars READ getStars WRITE setStars NOTIFY starsChanged) + Q_PROPERTY(QString year READ getYear WRITE setYear NOTIFY yearChanged) + Q_PROPERTY(QString trackNumber READ getTrackNumber WRITE setTrackNumber + NOTIFY trackNumberChanged) + Q_PROPERTY(QString trackTotal READ getTrackTotal WRITE setTrackTotal NOTIFY trackTotalChanged) + Q_PROPERTY(QString comment READ getComment WRITE setComment NOTIFY commentChanged) + Q_PROPERTY(QString keyText READ getKeyText WRITE setKeyText NOTIFY keyTextChanged) + Q_PROPERTY(QColor color READ getColor WRITE setColor NOTIFY colorChanged) + Q_PROPERTY(double duration READ getDuration NOTIFY durationChanged) + Q_PROPERTY(int sampleRate READ getSampleRate NOTIFY sampleRateChanged) + Q_PROPERTY(QUrl coverArtUrl READ getCoverArtUrl NOTIFY coverArtUrlChanged) + Q_PROPERTY(QUrl trackLocationUrl READ getTrackLocationUrl NOTIFY trackLocationUrlChanged) + + Q_PROPERTY(mixxx::qml::QmlBeatsModel* beatsModel READ getBeatsModel CONSTANT); + Q_PROPERTY(mixxx::qml::QmlCuesModel* hotcuesModel READ getCuesModel CONSTANT); +#ifdef __STEM__ + Q_PROPERTY(mixxx::qml::QmlStemsModel* stemsModel READ getStemsModel CONSTANT); +#endif + + QML_NAMED_ELEMENT(Track) + QML_UNCREATABLE("Only accessible via Mixxx.PlayerManager and Mixxx.Library") + public: + explicit QmlTrackProxy(TrackPointer track, QObject* parent = nullptr); + + QString getTrack() const; + QString getTitle() const; + QString getArtist() const; + QString getAlbum() const; + QString getAlbumArtist() const; + QString getGenre() const; + QString getComposer() const; + QString getGrouping() const; + QString getYear() const; + int getStars() const; + QString getTrackNumber() const; + QString getTrackTotal() const; + QString getComment() const; + QString getKeyText() const; + QColor getColor() const; + double getDuration() const; + int getSampleRate() const; + QUrl getCoverArtUrl() const; + QUrl getTrackLocationUrl() const; + + QmlBeatsModel* getBeatsModel() const { + return m_pBeatsModel.get(); + } + + QmlCuesModel* getCuesModel() const { + return m_pHotcuesModel.get(); + } + +#ifdef __STEM__ + QmlStemsModel* getStemsModel() const { + return m_pStemsModel.get(); + } +#endif + + TrackPointer internal() const { + return m_pTrack; + } + + public slots: + void slotBeatsChanged(); + void slotHotcuesChanged(); +#ifdef __STEM__ + void slotStemsChanged(); +#endif + + void setArtist(const QString& artist); + void setTitle(const QString& title); + void setAlbum(const QString& album); + void setAlbumArtist(const QString& albumArtist); + void setComposer(const QString& composer); + void setGrouping(const QString& grouping); + void setStars(int stars); + void setYear(const QString& year); + void setTrackNumber(const QString& trackNumber); + void setTrackTotal(const QString& trackTotal); + void setComment(const QString& comment); + void setKeyText(const QString& keyText); + void setColor(const QColor& color); + + signals: + void albumChanged(); + void titleChanged(); + void artistChanged(); + void albumArtistChanged(); + void genreChanged(); + void composerChanged(); + void groupingChanged(); + void starsChanged(); + void yearChanged(); + void trackNumberChanged(); + void trackTotalChanged(); + void commentChanged(); + void keyTextChanged(); + void colorChanged(); + void durationChanged(); + void sampleRateChanged(); + void coverArtUrlChanged(); + void trackLocationUrlChanged(); + void cuesChanged(); +#ifdef __STEM__ + void stemsChanged(); +#endif + + private: + TrackPointer m_pTrack; + parented_ptr m_pBeatsModel; + parented_ptr m_pHotcuesModel; +#ifdef __STEM__ + parented_ptr m_pStemsModel; +#endif +}; + +} // namespace qml +} // namespace mixxx diff --git a/src/qml/qmlwaveformdisplay.cpp b/src/qml/qmlwaveformdisplay.cpp index 3030c31a95d5..30f65275fc02 100644 --- a/src/qml/qmlwaveformdisplay.cpp +++ b/src/qml/qmlwaveformdisplay.cpp @@ -1,11 +1,10 @@ #include "qml/qmlwaveformdisplay.h" -#include - #include #include #include #include +#include #include #include #include @@ -24,7 +23,7 @@ using namespace allshader; namespace { constexpr int kDefaultSyncInternalMs = 100; -} +} // namespace namespace mixxx { namespace qml { @@ -87,6 +86,7 @@ void QmlWaveformDisplay::geometryChange(const QRectF& newGeometry, const QRectF& QSGNode* QmlWaveformDisplay::updatePaintNode(QSGNode* node, UpdatePaintNodeData*) { if (m_dirtyFlag.testFlag(DirtyFlag::Window)) { delete node; + node = nullptr; m_dirtyFlag.setFlag(DirtyFlag::Window, false); } @@ -251,7 +251,55 @@ void QmlWaveformDisplay::slotWaveformUpdated() { } QQmlListProperty QmlWaveformDisplay::renderers() { - return {this, &m_waveformRenderers}; + return {this, + nullptr, + &QmlWaveformDisplay::renderers_append, + &QmlWaveformDisplay::renderers_count, + &QmlWaveformDisplay::renderers_at, + &QmlWaveformDisplay::renderers_clear}; +} + +// Static +void QmlWaveformDisplay::renderers_append( + QQmlListProperty* pList, + QmlWaveformRendererFactory* value) { + QmlWaveformDisplay* pWaveform = static_cast(pList->object); + VERIFY_OR_DEBUG_ASSERT(pWaveform) { + return; + } + pWaveform->m_dirtyFlag.setFlag(DirtyFlag::Window, true); + pWaveform->m_waveformRenderers.append(value); +} + +// Static +qsizetype QmlWaveformDisplay::renderers_count(QQmlListProperty* pList) { + QmlWaveformDisplay* pWaveform = static_cast(pList->object); + VERIFY_OR_DEBUG_ASSERT(pWaveform) { + return 0; + } + pWaveform->m_dirtyFlag.setFlag(DirtyFlag::Window, true); + return pWaveform->m_waveformRenderers.count(); +} + +// Static +QmlWaveformRendererFactory* QmlWaveformDisplay::renderers_at( + QQmlListProperty* pList, qsizetype index) { + VERIFY_OR_DEBUG_ASSERT(pList && pList->object) { + return nullptr; + } + QmlWaveformDisplay* pWaveform = static_cast(pList->object); + pWaveform->m_dirtyFlag.setFlag(DirtyFlag::Window, true); + return pWaveform->m_waveformRenderers.at(index); +} + +// Static +void QmlWaveformDisplay::renderers_clear(QQmlListProperty* pList) { + QmlWaveformDisplay* pWaveform = static_cast(pList->object); + VERIFY_OR_DEBUG_ASSERT(pWaveform) { + return; + } + pWaveform->m_dirtyFlag.setFlag(DirtyFlag::Window, true); + return pWaveform->m_waveformRenderers.clear(); } } // namespace qml diff --git a/src/qml/qmlwaveformdisplay.h b/src/qml/qmlwaveformdisplay.h index ae77f5c86f21..6c5088e6361e 100644 --- a/src/qml/qmlwaveformdisplay.h +++ b/src/qml/qmlwaveformdisplay.h @@ -75,6 +75,13 @@ class QmlWaveformDisplay : public QQuickItem, VSyncTimeProvider, public Waveform void componentComplete() override; QQmlListProperty renderers(); + static void renderers_append( + QQmlListProperty* property, + QmlWaveformRendererFactory* value); + static qsizetype renderers_count(QQmlListProperty* property); + static QmlWaveformRendererFactory* renderers_at( + QQmlListProperty* property, qsizetype index); + static void renderers_clear(QQmlListProperty* property); protected: QSGNode* updatePaintNode(QSGNode* old, QQuickItem::UpdatePaintNodeData*) override; diff --git a/src/qml/qmlwaveformoverview.cpp b/src/qml/qmlwaveformoverview.cpp index 54d2d1051ca2..133f627ed637 100644 --- a/src/qml/qmlwaveformoverview.cpp +++ b/src/qml/qmlwaveformoverview.cpp @@ -1,7 +1,9 @@ #include "qml/qmlwaveformoverview.h" -#include "mixer/basetrackplayer.h" #include "moc_qmlwaveformoverview.cpp" +#include "qmlplayerproxy.h" +#include "qmltrackproxy.h" +#include "track/track.h" namespace { constexpr double kDesiredChannelHeight = 255; @@ -12,7 +14,7 @@ namespace qml { QmlWaveformOverview::QmlWaveformOverview(QQuickItem* parent) : QQuickPaintedItem(parent), - m_pPlayer(nullptr), + m_pTrack(nullptr), m_channels(ChannelFlag::BothChannels), m_renderer(Renderer::RGB), m_colorHigh(0xFF0000), @@ -20,39 +22,28 @@ QmlWaveformOverview::QmlWaveformOverview(QQuickItem* parent) m_colorLow(0x0000FF) { } -QmlPlayerProxy* QmlWaveformOverview::getPlayer() const { - return m_pPlayer; +QmlTrackProxy* QmlWaveformOverview::getTrack() const { + return m_pTrack; } -void QmlWaveformOverview::setPlayer(QmlPlayerProxy* pPlayer) { - if (m_pPlayer == pPlayer) { +void QmlWaveformOverview::setTrack(QmlTrackProxy* pTrack) { + if (m_pTrack == pTrack) { return; } - if (m_pPlayer != nullptr) { - m_pPlayer->internalTrackPlayer()->disconnect(this); + if (m_pTrack != nullptr && m_pTrack->internal() != nullptr) { + m_pTrack->internal()->disconnect(this); } - m_pPlayer = pPlayer; + m_pTrack = pTrack; - if (m_pPlayer != nullptr) { - setCurrentTrack(m_pPlayer->internalTrackPlayer()->getLoadedTrack()); - connect(m_pPlayer->internalTrackPlayer(), - &BaseTrackPlayer::newTrackLoaded, - this, - &QmlWaveformOverview::slotTrackLoaded); - connect(m_pPlayer->internalTrackPlayer(), - &BaseTrackPlayer::loadingTrack, - this, - &QmlWaveformOverview::slotTrackLoading); - connect(m_pPlayer->internalTrackPlayer(), - &BaseTrackPlayer::playerEmpty, + if (m_pTrack != nullptr && pTrack->internal() != nullptr) { + connect(pTrack->internal().get(), + &Track::waveformSummaryUpdated, this, - &QmlWaveformOverview::slotTrackUnloaded); + &QmlWaveformOverview::slotWaveformUpdated); } - - emit playerChanged(); - update(); + slotWaveformUpdated(); } QmlWaveformOverview::Channels QmlWaveformOverview::getChannels() const { @@ -68,49 +59,15 @@ void QmlWaveformOverview::setChannels(QmlWaveformOverview::Channels channels) { emit channelsChanged(channels); } -void QmlWaveformOverview::slotTrackLoaded(TrackPointer pTrack) { - // TODO: Investigate if it's a bug that this debug assertion fails when - // passing tracks on the command line - // DEBUG_ASSERT(m_pCurrentTrack == pTrack); - setCurrentTrack(pTrack); -} - -void QmlWaveformOverview::slotTrackLoading(TrackPointer pNewTrack, TrackPointer pOldTrack) { - Q_UNUSED(pOldTrack); // only used in DEBUG_ASSERT - DEBUG_ASSERT(m_pCurrentTrack == pOldTrack); - setCurrentTrack(pNewTrack); -} - -void QmlWaveformOverview::slotTrackUnloaded() { - setCurrentTrack(nullptr); -} - -void QmlWaveformOverview::setCurrentTrack(TrackPointer pTrack) { - // TODO: Check if this is actually possible - if (m_pCurrentTrack == pTrack) { - return; - } - - if (m_pCurrentTrack != nullptr) { - disconnect(m_pCurrentTrack.get(), nullptr, this, nullptr); - } - - m_pCurrentTrack = pTrack; - if (pTrack != nullptr) { - connect(pTrack.get(), - &Track::waveformSummaryUpdated, - this, - &QmlWaveformOverview::slotWaveformUpdated); - } - slotWaveformUpdated(); -} - void QmlWaveformOverview::slotWaveformUpdated() { update(); } void QmlWaveformOverview::paint(QPainter* pPainter) { - TrackPointer pTrack = m_pCurrentTrack; + if (!m_pTrack) { + return; + } + TrackPointer pTrack = m_pTrack->internal(); if (!pTrack) { return; } diff --git a/src/qml/qmlwaveformoverview.h b/src/qml/qmlwaveformoverview.h index 4b51bb83747d..431ab48aa034 100644 --- a/src/qml/qmlwaveformoverview.h +++ b/src/qml/qmlwaveformoverview.h @@ -6,18 +6,17 @@ #include #include -#include "qml/qmlplayerproxy.h" -#include "track/track.h" +#include "qmltrackproxy.h" +#include "waveform/waveform.h" namespace mixxx { namespace qml { - class QmlWaveformOverview : public QQuickPaintedItem { Q_OBJECT Q_FLAGS(Channels) - Q_PROPERTY(mixxx::qml::QmlPlayerProxy* player READ getPlayer WRITE setPlayer - NOTIFY playerChanged REQUIRED) + Q_PROPERTY(mixxx::qml::QmlTrackProxy* track READ getTrack WRITE setTrack + NOTIFY trackChanged REQUIRED) Q_PROPERTY(Channels channels READ getChannels WRITE setChannels NOTIFY channelsChanged) Q_PROPERTY(Renderer renderer MEMBER m_renderer NOTIFY rendererChanged) Q_PROPERTY(QColor colorHigh MEMBER m_colorHigh NOTIFY colorHighChanged) @@ -44,19 +43,16 @@ class QmlWaveformOverview : public QQuickPaintedItem { void paint(QPainter* painter) override; - void setPlayer(QmlPlayerProxy* player); - QmlPlayerProxy* getPlayer() const; + void setTrack(QmlTrackProxy* track); + QmlTrackProxy* getTrack() const; void setChannels(Channels channels); Channels getChannels() const; private slots: - void slotTrackLoaded(TrackPointer pLoadedTrack); - void slotTrackLoading(TrackPointer pNewTrack, TrackPointer pOldTrack); - void slotTrackUnloaded(); void slotWaveformUpdated(); signals: - void playerChanged(); + void trackChanged(); void channelsChanged(mixxx::qml::QmlWaveformOverview::Channels channels); #if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) void rendererChanged(Renderer renderer); @@ -68,7 +64,6 @@ class QmlWaveformOverview : public QQuickPaintedItem { void colorLowChanged(const QColor& color); private: - void setCurrentTrack(TrackPointer pTrack); void drawFiltered(QPainter* pPainter, Channels channels, ConstWaveformPointer pWaveform, @@ -78,9 +73,7 @@ class QmlWaveformOverview : public QQuickPaintedItem { ConstWaveformPointer pWaveform, int completion) const; QColor getRgbPenColor(ConstWaveformPointer pWaveform, int completion) const; - - QPointer m_pPlayer; - TrackPointer m_pCurrentTrack; + QmlTrackProxy* m_pTrack; Channels m_channels; Renderer m_renderer; QColor m_colorHigh; diff --git a/src/qml/qmlwaveformrenderer.cpp b/src/qml/qmlwaveformrenderer.cpp index 2f98fe8b2926..08eee1717368 100644 --- a/src/qml/qmlwaveformrenderer.cpp +++ b/src/qml/qmlwaveformrenderer.cpp @@ -1,13 +1,22 @@ #include "qml/qmlwaveformrenderer.h" +#include +#include +#include +#include + #include #include "moc_qmlwaveformrenderer.cpp" #include "util/assert.h" #include "waveform/renderers/allshader/waveformrenderbeat.h" #include "waveform/renderers/allshader/waveformrendererendoftrack.h" +#include "waveform/renderers/allshader/waveformrendererfiltered.h" +#include "waveform/renderers/allshader/waveformrendererhsv.h" #include "waveform/renderers/allshader/waveformrendererpreroll.h" #include "waveform/renderers/allshader/waveformrendererrgb.h" +#include "waveform/renderers/allshader/waveformrenderersignalbase.h" +#include "waveform/renderers/allshader/waveformrenderersimple.h" #ifdef __STEM__ #include "waveform/renderers/allshader/waveformrendererstem.h" #endif @@ -18,7 +27,8 @@ namespace mixxx { namespace qml { QmlWaveformRendererMark::QmlWaveformRendererMark() - : m_defaultMark(nullptr), + : m_playMarkerPosition(0.5), + m_defaultMark(nullptr), m_untilMark(std::make_unique()) { } @@ -51,52 +61,142 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererPreroll::create( return QmlWaveformRendererFactory::Renderer{pRenderer.get(), std::move(pRenderer)}; } +void QmlWaveformRendererSignal::setup( + allshader::WaveformRendererSignalBase* pRenderer) const { + pRenderer->setAxesColor(m_axesColor); + pRenderer->setLowColor(m_lowColor); + pRenderer->setMidColor(m_midColor); + pRenderer->setHighColor(m_highColor); + connect(this, + &QmlWaveformRendererSignal::axesColorChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setAxesColor); + connect(this, + &QmlWaveformRendererSignal::lowColorChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setLowColor); + connect(this, + &QmlWaveformRendererSignal::midColorChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setMidColor); + connect(this, + &QmlWaveformRendererSignal::highColorChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setHighColor); + + pRenderer->setAllChannelVisualGain(m_gainAll); + pRenderer->setLowVisualGain(m_gainLow); + pRenderer->setMidVisualGain(m_gainMid); + pRenderer->setHighVisualGain(m_gainHigh); + connect(this, + &QmlWaveformRendererSignal::gainAllChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setAllChannelVisualGain); + connect(this, + &QmlWaveformRendererSignal::gainLowChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setLowVisualGain); + connect(this, + &QmlWaveformRendererSignal::gainMidChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setMidVisualGain); + connect(this, + &QmlWaveformRendererSignal::gainHighChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setHighVisualGain); + pRenderer->setIgnoreStem(m_ignoreStem); + connect(this, + &QmlWaveformRendererSignal::ignoreStemChanged, + pRenderer, + &allshader::WaveformRendererSignalBase::setIgnoreStem); +} + QmlWaveformRendererFactory::Renderer QmlWaveformRendererRGB::create( WaveformWidgetRenderer* waveformWidget) const { auto pRenderer = std::make_unique( waveformWidget, m_position, m_options); + setup(pRenderer.get()); + return QmlWaveformRendererFactory::Renderer{pRenderer.get(), std::move(pRenderer)}; +} + +QmlWaveformRendererFactory::Renderer QmlWaveformRendererFiltered::create( + WaveformWidgetRenderer* waveformWidget) const { + auto pRenderer = std::make_unique( + waveformWidget, m_ignoreStem, m_options); + + setup(pRenderer.get()); + return QmlWaveformRendererFactory::Renderer{pRenderer.get(), std::move(pRenderer)}; +} + +QmlWaveformRendererFactory::Renderer QmlWaveformRendererHSV::create( + WaveformWidgetRenderer* waveformWidget) const { + auto pRenderer = std::make_unique( + waveformWidget, m_options); + pRenderer->setAxesColor(m_axesColor); - pRenderer->setLowColor(m_lowColor); - pRenderer->setMidColor(m_midColor); - pRenderer->setHighColor(m_highColor); + pRenderer->setColor(m_color); + pRenderer->setIgnoreStem(m_ignoreStem); + pRenderer->setAllChannelVisualGain(m_gainAll); + pRenderer->setLowVisualGain(m_gainLow); + pRenderer->setMidVisualGain(m_gainMid); + pRenderer->setHighVisualGain(m_gainHigh); connect(this, - &QmlWaveformRendererRGB::axesColorChanged, + &QmlWaveformRendererHSV::gainAllChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setAxesColor); + &allshader::WaveformRendererSignalBase::setAllChannelVisualGain); connect(this, - &QmlWaveformRendererRGB::lowColorChanged, + &QmlWaveformRendererHSV::gainLowChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setLowColor); + &allshader::WaveformRendererSignalBase::setLowVisualGain); connect(this, - &QmlWaveformRendererRGB::midColorChanged, + &QmlWaveformRendererHSV::gainMidChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setMidColor); + &allshader::WaveformRendererSignalBase::setMidVisualGain); connect(this, - &QmlWaveformRendererRGB::highColorChanged, + &QmlWaveformRendererHSV::gainHighChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setHighColor); + &allshader::WaveformRendererSignalBase::setHighVisualGain); + connect(this, + &QmlWaveformRendererHSV::axesColorChanged, + pRenderer.get(), + &allshader::WaveformRendererSignalBase::setAxesColor); + connect(this, + &QmlWaveformRendererHSV::colorChanged, + pRenderer.get(), + &allshader::WaveformRendererSignalBase::setColor); + connect(this, + &QmlWaveformRendererHSV::ignoreStemChanged, + pRenderer.get(), + &allshader::WaveformRendererSignalBase::setIgnoreStem); + return QmlWaveformRendererFactory::Renderer{pRenderer.get(), std::move(pRenderer)}; +} - pRenderer->setAllChannelVisualGain(m_gainAll); - pRenderer->setLowVisualGain(m_gainLow); - pRenderer->setMidVisualGain(m_gainMid); - pRenderer->setHighVisualGain(m_gainHigh); +QmlWaveformRendererFactory::Renderer QmlWaveformRendererSimple::create( + WaveformWidgetRenderer* waveformWidget) const { + auto pRenderer = std::make_unique( + waveformWidget, m_options); + + pRenderer->setAxesColor(m_axesColor); + pRenderer->setColor(m_color); + pRenderer->setAllChannelVisualGain(m_gain); + pRenderer->setIgnoreStem(m_ignoreStem); connect(this, - &QmlWaveformRendererRGB::gainAllChanged, + &QmlWaveformRendererSimple::axesColorChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setAllChannelVisualGain); + &allshader::WaveformRendererSignalBase::setAxesColor); connect(this, - &QmlWaveformRendererRGB::gainLowChanged, + &QmlWaveformRendererSimple::colorChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setLowVisualGain); + &allshader::WaveformRendererSignalBase::setColor); connect(this, - &QmlWaveformRendererRGB::gainMidChanged, + &QmlWaveformRendererSimple::gainChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setMidVisualGain); + &allshader::WaveformRendererSignalBase::setAllChannelVisualGain); connect(this, - &QmlWaveformRendererRGB::gainHighChanged, + &QmlWaveformRendererSimple::ignoreStemChanged, pRenderer.get(), - &allshader::WaveformRendererRGB::setHighVisualGain); + &allshader::WaveformRendererSignalBase::setIgnoreStem); return QmlWaveformRendererFactory::Renderer{pRenderer.get(), std::move(pRenderer)}; } @@ -104,11 +204,15 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererBeat::create( WaveformWidgetRenderer* waveformWidget) const { auto pRenderer = std::make_unique( waveformWidget, m_position); - pRenderer->setColor(m_color); + waveformWidget->setDisplayBeatGridAlpha(m_color.alphaF() * 100); + pRenderer->setColor(m_color.rgb()); connect(this, &QmlWaveformRendererBeat::colorChanged, pRenderer.get(), - &allshader::WaveformRenderBeat::setColor); + [waveformWidget, &pRenderer](const QColor& color) { + waveformWidget->setDisplayBeatGridAlpha(color.alphaF() * 100); + pRenderer->setColor(color.rgb()); + }); return QmlWaveformRendererFactory::Renderer{pRenderer.get(), std::move(pRenderer)}; } @@ -164,6 +268,7 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererMark::create( pRenderer->setPlayMarkerForegroundColor(m_playMarkerColor); pRenderer->setPlayMarkerBackgroundColor(m_playMarkerBackground); + waveformWidget->setPlayMarkerPosition(m_playMarkerPosition); pRenderer->setUntilMarkShowBeats(m_untilMark->showTime()); pRenderer->setUntilMarkShowTime(m_untilMark->showBeats()); @@ -196,6 +301,12 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererMark::create( &QmlWaveformRendererMark::playMarkerBackgroundChanged, pRenderer.get(), &allshader::WaveformRenderMark::setPlayMarkerBackgroundColor); + connect(this, + &QmlWaveformRendererMark::playMarkerPositionChanged, + pRenderer.get(), + [waveformWidget](double value) { + waveformWidget->setPlayMarkerPosition(value); + }); // The initialisation is closely inspired from WaveformMarkSet::setup int priority = 0; @@ -207,14 +318,43 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererMark::create( pMark->textColor(), pMark->align(), pMark->text(), - pMark->pixmap(), - pMark->icon(), + pMark->pixmap().toLocalFile(), + pMark->icon().toLocalFile(), pMark->color(), - priority))); + priority, + Cue::kNoHotCue, + {}, + pMark->endPixmap().toLocalFile(), + pMark->endIcon().toLocalFile(), + pMark->disabledOpacity(), + pMark->enabledOpacity()))); priority--; } const auto* pMark = defaultMark(); if (pMark != nullptr) { + const QString pixmap = pMark->pixmap().toLocalFile(); + const QString endPixmap = pMark->endPixmap().toLocalFile(); + const QString icon = pMark->icon().toLocalFile(); + const QString endIcon = pMark->endIcon().toLocalFile(); + // FIXME: the following checks should be done on the WaveformMarker + // setter (depends of #14515) + if (!pixmap.isEmpty() && !QFileInfo::exists(pixmap)) { + qmlEngine(this)->throwError(tr("Cannot find the marker pixmap") + " \"" + pixmap + '"'); + } + + if (!endPixmap.isEmpty() && !QFileInfo::exists(endPixmap)) { + qmlEngine(this)->throwError(tr("Cannot find the marker endPixmap") + + " \"" + endPixmap + '"'); + } + + if (!icon.isEmpty() && !QFileInfo::exists(icon)) { + qmlEngine(this)->throwError(tr("Cannot find the marker icon") + " \"" + icon + '"'); + } + + if (!endIcon.isEmpty() && !QFileInfo::exists(endIcon)) { + qmlEngine(this)->throwError(tr("Cannot find the marker endIcon") + + " \"" + endIcon + '"'); + } pRenderer->setDefaultMark( waveformWidget->getGroup(), WaveformMarkSet::DefaultMarkerStyle{ @@ -223,9 +363,13 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererMark::create( pMark->textColor(), pMark->align(), pMark->text(), - pMark->pixmap(), - pMark->icon(), + pixmap, + endPixmap, + icon, + endIcon, pMark->color(), + pMark->enabledOpacity(), + pMark->disabledOpacity(), }); } return QmlWaveformRendererFactory::Renderer{pRenderer.get(), std::move(pRenderer)}; diff --git a/src/qml/qmlwaveformrenderer.h b/src/qml/qmlwaveformrenderer.h index 361691ea48a3..44e1ef7049dd 100644 --- a/src/qml/qmlwaveformrenderer.h +++ b/src/qml/qmlwaveformrenderer.h @@ -1,5 +1,7 @@ #pragma once +#include + #include #include @@ -19,8 +21,12 @@ class WaveformRenderBeat; namespace mixxx { namespace qml { +using WaveformRendererPositionSource = ::WaveformRendererAbstract::PositionSource; + class QmlWaveformRendererFactory : public QObject { Q_OBJECT + Q_PROPERTY(WaveformRendererPositionSource position MEMBER + m_position NOTIFY positionChanged) QML_ANONYMOUS public: struct Renderer { @@ -33,6 +39,16 @@ class QmlWaveformRendererFactory : public QObject { } virtual Renderer create(WaveformWidgetRenderer* waveformWidget) const = 0; + + signals: +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + void positionChanged(WaveformRendererPositionSource); +#else + void positionChanged(mixxx::qml::WaveformRendererPositionSource); +#endif + + protected: + WaveformRendererPositionSource m_position{::WaveformRendererAbstract::Play}; }; class QmlWaveformRendererEndOfTrack @@ -71,9 +87,11 @@ class QmlWaveformRendererPreroll ::WaveformRendererAbstract::PositionSource m_position{::WaveformRendererAbstract::Play}; }; -class QmlWaveformRendererRGB +typedef WaveformRendererSignalBase::Options WaveformRendererSignalBaseOptions; +class QmlWaveformRendererSignal : public QmlWaveformRendererFactory { Q_OBJECT + Q_PROPERTY(bool ignoreStem MEMBER m_ignoreStem NOTIFY ignoreStemChanged) Q_PROPERTY(QColor axesColor MEMBER m_axesColor NOTIFY axesColorChanged REQUIRED) Q_PROPERTY(QColor lowColor MEMBER m_lowColor NOTIFY lowColorChanged REQUIRED) Q_PROPERTY(QColor midColor MEMBER m_midColor NOTIFY midColorChanged REQUIRED) @@ -82,10 +100,15 @@ class QmlWaveformRendererRGB Q_PROPERTY(double gainLow MEMBER m_gainLow NOTIFY gainLowChanged REQUIRED) Q_PROPERTY(double gainMid MEMBER m_gainMid NOTIFY gainMidChanged REQUIRED) Q_PROPERTY(double gainHigh MEMBER m_gainHigh NOTIFY gainHighChanged REQUIRED) - QML_NAMED_ELEMENT(WaveformRendererRGB) + Q_PROPERTY(WaveformRendererSignalBaseOptions options MEMBER + m_options NOTIFY optionsChanged) + QML_ANONYMOUS public: - Renderer create(WaveformWidgetRenderer* waveformWidget) const override; + Q_ENUM(WaveformRendererSignalBaseOptions) + + protected: + void setup(allshader::WaveformRendererSignalBase* renderer) const; signals: void axesColorChanged(const QColor&); @@ -96,8 +119,14 @@ class QmlWaveformRendererRGB void gainLowChanged(double); void gainMidChanged(double); void gainHighChanged(double); + void ignoreStemChanged(bool); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + void optionsChanged(WaveformRendererSignalBaseOptions); +#else + void optionsChanged(mixxx::qml::WaveformRendererSignalBaseOptions); +#endif - private: + protected: QColor m_axesColor; QColor m_lowColor; QColor m_midColor; @@ -108,9 +137,111 @@ class QmlWaveformRendererRGB double m_gainMid; double m_gainHigh; + bool m_ignoreStem{false}; + ::WaveformRendererAbstract::PositionSource m_position{::WaveformRendererAbstract::Play}; - allshader::WaveformRendererSignalBase::Options m_options{ - allshader::WaveformRendererSignalBase::Option::None}; + WaveformRendererSignalBaseOptions m_options{ + WaveformRendererSignalBase::Option::None}; +}; + +class QmlWaveformRendererRGB + : public QmlWaveformRendererSignal { + Q_OBJECT + QML_NAMED_ELEMENT(WaveformRendererRGB) + + public: + Renderer create(WaveformWidgetRenderer* waveformWidget) const override; +}; + +class QmlWaveformRendererFiltered + : public QmlWaveformRendererSignal { + Q_OBJECT + Q_PROPERTY(bool stacked MEMBER m_stacked FINAL) + + QML_NAMED_ELEMENT(WaveformRendererFiltered) + + public: + Renderer create(WaveformWidgetRenderer* waveformWidget) const override; + + private: + bool m_stacked{false}; +}; + +class QmlWaveformRendererHSV + : public QmlWaveformRendererFactory { + Q_OBJECT + Q_PROPERTY(bool ignoreStem MEMBER m_ignoreStem NOTIFY ignoreStemChanged) + Q_PROPERTY(QColor axesColor MEMBER m_axesColor NOTIFY axesColorChanged REQUIRED) + Q_PROPERTY(QColor color MEMBER m_color NOTIFY colorChanged REQUIRED) + Q_PROPERTY(double gainAll MEMBER m_gainAll NOTIFY gainAllChanged REQUIRED) + Q_PROPERTY(double gainLow MEMBER m_gainLow NOTIFY gainLowChanged REQUIRED) + Q_PROPERTY(double gainMid MEMBER m_gainMid NOTIFY gainMidChanged REQUIRED) + Q_PROPERTY(double gainHigh MEMBER m_gainHigh NOTIFY gainHighChanged REQUIRED) + Q_PROPERTY(WaveformRendererSignalBaseOptions options MEMBER + m_options NOTIFY optionsChanged) + QML_NAMED_ELEMENT(WaveformRendererHSV) + + public: + Renderer create(WaveformWidgetRenderer* waveformWidget) const override; + signals: + void axesColorChanged(const QColor&); + void colorChanged(const QColor&); + void ignoreStemChanged(bool); + void gainAllChanged(double); + void gainLowChanged(double); + void gainMidChanged(double); + void gainHighChanged(double); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + void optionsChanged(WaveformRendererSignalBaseOptions); +#else + void optionsChanged(mixxx::qml::WaveformRendererSignalBaseOptions); +#endif + + private: + QColor m_axesColor; + QColor m_color; + + double m_gainAll; + double m_gainLow; + double m_gainMid; + double m_gainHigh; + + bool m_ignoreStem{false}; + WaveformRendererSignalBaseOptions m_options{ + WaveformRendererSignalBase::Option::None}; +}; + +class QmlWaveformRendererSimple + : public QmlWaveformRendererFactory { + Q_OBJECT + Q_PROPERTY(bool ignoreStem MEMBER m_ignoreStem NOTIFY ignoreStemChanged) + Q_PROPERTY(QColor axesColor MEMBER m_axesColor NOTIFY axesColorChanged REQUIRED) + Q_PROPERTY(QColor color MEMBER m_color NOTIFY colorChanged REQUIRED) + Q_PROPERTY(double gain MEMBER m_gain NOTIFY gainChanged REQUIRED) + Q_PROPERTY(WaveformRendererSignalBaseOptions options MEMBER + m_options NOTIFY optionsChanged) + QML_NAMED_ELEMENT(WaveformRendererSimple) + + public: + Renderer create(WaveformWidgetRenderer* waveformWidget) const override; + signals: + void axesColorChanged(const QColor&); + void colorChanged(const QColor&); + void ignoreStemChanged(bool); + void gainChanged(double); +#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) + void optionsChanged(WaveformRendererSignalBaseOptions); +#else + void optionsChanged(mixxx::qml::WaveformRendererSignalBaseOptions); +#endif + + private: + QColor m_axesColor; + QColor m_color; + double m_gain; + bool m_ignoreStem{false}; + WaveformRendererSignalBaseOptions m_options{ + WaveformRendererSignalBase::Option::None}; }; class QmlWaveformRendererBeat @@ -218,8 +349,10 @@ class QmlWaveformMark : public QObject { Q_PROPERTY(QString textColor MEMBER m_textColor NOTIFY textColorChanged) Q_PROPERTY(QString align MEMBER m_align NOTIFY alignChanged) Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged) - Q_PROPERTY(QString pixmap MEMBER m_pixmap NOTIFY pixmapChanged) - Q_PROPERTY(QString icon MEMBER m_icon NOTIFY iconChanged) + Q_PROPERTY(QUrl pixmap MEMBER m_pixmap NOTIFY pixmapChanged) + Q_PROPERTY(QUrl icon MEMBER m_icon NOTIFY iconChanged) + Q_PROPERTY(QUrl endPixmap MEMBER m_endPixmap NOTIFY endPixmapChanged) + Q_PROPERTY(QUrl endIcon MEMBER m_endIcon NOTIFY endIconChanged) QML_NAMED_ELEMENT(WaveformMark) public: QString control() const { @@ -240,12 +373,24 @@ class QmlWaveformMark : public QObject { QString text() const { return m_text; } - QString pixmap() const { + QUrl pixmap() const { return m_pixmap; } - QString icon() const { + QUrl icon() const { return m_icon; } + QUrl endPixmap() const { + return m_endPixmap; + } + QUrl endIcon() const { + return m_endIcon; + } + float disabledOpacity() const { + return m_disabledOpacity; + } + float enabledOpacity() const { + return m_enabledOpacity; + } signals: void controlChanged(QString control); @@ -254,8 +399,12 @@ class QmlWaveformMark : public QObject { void textColorChanged(QString textColor); void alignChanged(QString align); void textChanged(QString text); - void pixmapChanged(QString pixmap); - void iconChanged(QString icon); + void pixmapChanged(QUrl pixmap); + void iconChanged(QUrl icon); + void endPixmapChanged(QUrl pixmap); + void endIconChanged(QUrl icon); + void disabledOpacityChanged(float opacity); + void enabledOpacityChanged(float opacity); private: QString m_control; @@ -264,8 +413,12 @@ class QmlWaveformMark : public QObject { QString m_textColor; QString m_align; QString m_text; - QString m_pixmap; - QString m_icon; + QUrl m_pixmap; + QUrl m_icon; + QUrl m_endPixmap; + QUrl m_endIcon; + float m_disabledOpacity; + float m_enabledOpacity; }; class QmlWaveformUntilMark : public QObject { @@ -373,6 +526,8 @@ class QmlWaveformRendererMark Q_PROPERTY(QColor playMarkerColor MEMBER m_playMarkerColor NOTIFY playMarkerColorChanged) Q_PROPERTY(QColor playMarkerBackground MEMBER m_playMarkerBackground NOTIFY playMarkerBackgroundChanged) + Q_PROPERTY(double playMarkerPosition MEMBER m_playMarkerPosition NOTIFY + playMarkerPositionChanged) Q_PROPERTY(QmlWaveformMark* defaultMark MEMBER m_defaultMark NOTIFY defaultMarkChanged) Q_PROPERTY(QmlWaveformUntilMark* untilMark READ untilMark FINAL) Q_CLASSINFO("DefaultProperty", "marks") @@ -397,6 +552,7 @@ class QmlWaveformRendererMark signals: void playMarkerColorChanged(const QColor&); void playMarkerBackgroundChanged(const QColor&); + void playMarkerPositionChanged(double); #if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) void defaultMarkChanged(QmlWaveformMark*); #else @@ -406,6 +562,7 @@ class QmlWaveformRendererMark private: QColor m_playMarkerColor; QColor m_playMarkerBackground; + double m_playMarkerPosition; QList m_marks; QmlWaveformMark* m_defaultMark; std::unique_ptr m_untilMark; diff --git a/src/rendergraph/common/rendergraph/material/texturematerial.cpp b/src/rendergraph/common/rendergraph/material/texturematerial.cpp index b3f61767626c..2b5b3cdcf73b 100644 --- a/src/rendergraph/common/rendergraph/material/texturematerial.cpp +++ b/src/rendergraph/common/rendergraph/material/texturematerial.cpp @@ -18,7 +18,7 @@ TextureMaterial::TextureMaterial() } /* static */ const UniformSet& TextureMaterial::uniforms() { - static UniformSet set = makeUniformSet({"ubuf.matrix"}); + static UniformSet set = makeUniformSet({"ubuf.matrix", "ubuf.alpha"}); return set; } diff --git a/src/rendergraph/shaders/texture.frag b/src/rendergraph/shaders/texture.frag index bbe37bccd69c..3eb4ce3d0aff 100644 --- a/src/rendergraph/shaders/texture.frag +++ b/src/rendergraph/shaders/texture.frag @@ -1,9 +1,18 @@ #version 440 +layout(std140, binding = 0) uniform buf { + mat4 matrix; + float alpha; +} +ubuf; + layout(binding = 1) uniform sampler2D texture1; layout(location = 0) in vec2 vTexcoord; layout(location = 0) out vec4 fragColor; void main() { fragColor = texture(texture1, vTexcoord); + if (ubuf.alpha > 0.0) { + fragColor *= ubuf.alpha; + } } diff --git a/src/rendergraph/shaders/texture.frag.gl b/src/rendergraph/shaders/texture.frag.gl index b2d03f1352c6..71ab6a34dd65 100644 --- a/src/rendergraph/shaders/texture.frag.gl +++ b/src/rendergraph/shaders/texture.frag.gl @@ -1,6 +1,14 @@ #version 120 //// GENERATED - EDITS WILL BE OVERWRITTEN +struct buf +{ + mat4 matrix; + float alpha; +}; + +uniform buf ubuf; + uniform sampler2D texture1; varying vec2 vTexcoord; @@ -8,4 +16,8 @@ varying vec2 vTexcoord; void main() { gl_FragData[0] = texture2D(texture1, vTexcoord); + if (ubuf.alpha > 0.0) + { + gl_FragData[0] *= ubuf.alpha; + } } diff --git a/src/rendergraph/shaders/texture.vert b/src/rendergraph/shaders/texture.vert index 07b3d7f1f3ba..3cf7f4cd8240 100644 --- a/src/rendergraph/shaders/texture.vert +++ b/src/rendergraph/shaders/texture.vert @@ -2,6 +2,7 @@ layout(std140, binding = 0) uniform buf { mat4 matrix; + float alpha; } ubuf; diff --git a/src/rendergraph/shaders/texture.vert.gl b/src/rendergraph/shaders/texture.vert.gl index a3d58014be32..b048df2a4893 100644 --- a/src/rendergraph/shaders/texture.vert.gl +++ b/src/rendergraph/shaders/texture.vert.gl @@ -4,6 +4,7 @@ struct buf { mat4 matrix; + float alpha; }; uniform buf ubuf; diff --git a/src/shaders/textureshader.cpp b/src/shaders/textureshader.cpp index f5363d771694..c9399795b9a8 100644 --- a/src/shaders/textureshader.cpp +++ b/src/shaders/textureshader.cpp @@ -16,11 +16,13 @@ void main() )--"); QString fragmentShaderCode = QStringLiteral(R"--( +#version 120 uniform sampler2D texture; varying highp vec2 vTexcoord; +uniform float alpha; void main() { - gl_FragColor = texture2D(texture, vTexcoord); + gl_FragColor = texture2D(texture, vTexcoord) * vec4(1.0, 1.0, 1.0, alpha > .0 ? alpha : 1.0); } )--"); diff --git a/src/skin/legacy/legacyskinparser.cpp b/src/skin/legacy/legacyskinparser.cpp index e1e889faf177..fbae6d04efa0 100644 --- a/src/skin/legacy/legacyskinparser.cpp +++ b/src/skin/legacy/legacyskinparser.cpp @@ -36,6 +36,7 @@ #include "widget/wbasewidget.h" #include "widget/wbattery.h" #include "widget/wbeatspinbox.h" +#include "widget/wbpmeditor.h" #include "widget/wcombobox.h" #include "widget/wcoverart.h" #include "widget/wcuebutton.h" @@ -575,6 +576,8 @@ QList LegacySkinParser::parseNode(const QDomElement& node) { } else if (nodeName == "Number" || nodeName == "NumberBpm") { // NumberBpm is deprecated, and is now the same as a Number result = wrapWidget(parseLabelWidget(node)); + } else if (nodeName == "BpmEditor") { + result = wrapWidget(parseBpmEditor(node)); } else if (nodeName == "NumberDb") { result = wrapWidget(parseLabelWidget(node)); } else if (nodeName == "Label") { @@ -1031,6 +1034,24 @@ QWidget* LegacySkinParser::parseStemLabelWidget(const QDomElement& element) { } #endif +QWidget* LegacySkinParser::parseBpmEditor(const QDomElement& node) { + const QString group = lookupNodeGroup(node); + BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group); + if (!pPlayer) { + SKIN_WARNING(node, *m_pContext, QStringLiteral("No player found for group: %1").arg(group)); + return nullptr; + } + WBpmEditor* pBpmEditor = new WBpmEditor(group, m_pParent); + pBpmEditor->setup(node, *m_pContext); + commonWidgetSetup(node, pBpmEditor); + // Set tooltips of child widgets for mode selection & editing + const QString tapTooltip = m_tooltips.tooltipForId("tempo_tap_bpm_tap"); + const QString editTooltip = m_tooltips.tooltipForId("tempo_edit"); + pBpmEditor->setTapButtonTooltip(tapTooltip); + pBpmEditor->setEditButtonTooltip(editTooltip); + return pBpmEditor; +} + QWidget* LegacySkinParser::parseOverview(const QDomElement& node) { #ifdef MIXXX_USE_QML if (CmdlineArgs::Instance().isQml()) { @@ -1320,6 +1341,7 @@ QWidget* LegacySkinParser::parseNumberRate(const QDomElement& node) { WNumberRate* p = new WNumberRate(group, m_pParent); setupLabelWidget(node, p); + // TODO check this and other BgColor/palette hacks // TODO(rryan): Let's look at removing this palette change in 1.12.0. I // don't think it's needed anymore. p->setPalette(palette); @@ -1336,7 +1358,7 @@ QWidget* LegacySkinParser::parseNumberPos(const QDomElement& node) { QWidget* LegacySkinParser::parseEngineKey(const QDomElement& node) { QString group = lookupNodeGroup(node); - WKey* pEngineKey = new WKey(group, m_pParent); + WKey* pEngineKey = new WKey(group, m_pConfig, m_pParent); setupLabelWidget(node, pEngineKey); return pEngineKey; } @@ -1536,6 +1558,19 @@ QWidget* LegacySkinParser::parseSearchBox(const QDomElement& node) { commonWidgetSetup(node, pLineEditSearch, false); pLineEditSearch->setup(node, *m_pContext); + // Translate shortcuts to native text + QString searchInCurrentViewShortcut = + localizeShortcutKeys(m_pKeyboard->getKeyboardConfig()->getValue( + ConfigKey("[KeyboardShortcuts]", + "LibraryMenu_SearchInCurrentView"), + "Ctrl+f")); + QString searchInAllTracksShortcut = + localizeShortcutKeys(m_pKeyboard->getKeyboardConfig()->getValue( + ConfigKey("[KeyboardShortcuts]", + "LibraryMenu_SearchInAllTracks"), + "Ctrl+Shift+F")); + pLineEditSearch->setupToolTip(searchInCurrentViewShortcut, searchInAllTracksShortcut); + m_pLibrary->bindSearchboxWidget(pLineEditSearch); return pLineEditSearch; @@ -2622,9 +2657,6 @@ void LegacySkinParser::addShortcutToToolTip(WBaseWidget* pWidget, QString tooltip; - // translate shortcut to native text - QString nativeShortcut = QKeySequence(shortcut, QKeySequence::PortableText).toString(QKeySequence::NativeText); - tooltip += "\n"; tooltip += tr("Shortcut"); if (!cmd.isEmpty()) { @@ -2632,10 +2664,16 @@ void LegacySkinParser::addShortcutToToolTip(WBaseWidget* pWidget, tooltip += cmd; } tooltip += ": "; - tooltip += nativeShortcut; + tooltip += localizeShortcutKeys(shortcut); pWidget->appendBaseTooltip(tooltip); } +QString LegacySkinParser::localizeShortcutKeys(const QString& shortcut) { + // Translate shortcut to native text + return QKeySequence(shortcut, QKeySequence::PortableText) + .toString(QKeySequence::NativeText); +} + QString LegacySkinParser::parseLaunchImageStyle(const QDomNode& skinDoc) { QString schemeLaunchImageStyle; // Check if the skins has color schemes diff --git a/src/skin/legacy/legacyskinparser.h b/src/skin/legacy/legacyskinparser.h index 059806d6a9c9..c571c13c3c36 100644 --- a/src/skin/legacy/legacyskinparser.h +++ b/src/skin/legacy/legacyskinparser.h @@ -80,7 +80,7 @@ class LegacySkinParser : public QObject, public SkinParser { #ifdef __STEM__ QWidget* parseStemLabelWidget(const QDomElement& element); #endif - + QWidget* parseBpmEditor(const QDomElement& node); QWidget* parseText(const QDomElement& node); QWidget* parseTrackProperty(const QDomElement& node); QWidget* parseStarRating(const QDomElement& node); @@ -143,6 +143,7 @@ class LegacySkinParser : public QObject, public SkinParser { bool setupPosition=true); void setupConnections(const QDomNode& node, WBaseWidget* pWidget); void addShortcutToToolTip(WBaseWidget* pWidget, const QString& shortcut, const QString& cmd); + QString localizeShortcutKeys(const QString& shortcut); QString getLibraryStyle(const QDomNode& node); QString lookupNodeGroup(const QDomElement& node); diff --git a/src/skin/legacy/tooltips.cpp b/src/skin/legacy/tooltips.cpp index 8943cd4e552a..8b1e89b7bce6 100644 --- a/src/skin/legacy/tooltips.cpp +++ b/src/skin/legacy/tooltips.cpp @@ -401,12 +401,16 @@ void Tooltips::addStandardTooltips() { << tr("Holds the gain of the low EQ to zero while active.") << eqKillLatch; - QString tempoDisplay = tr("Displays the tempo of the loaded track in BPM (beats per minute)."); + const QString tempoDisplay = + tr("Displays the tempo of the loaded track in BPM (beats per " + "minute)."); // TODO Clarify this refers to 'file BPM', not playback rate? - QString bpmTapButton = tr("When tapped repeatedly, adjusts the BPM to match the tapped BPM."); - QString tempoTapButton = + const QString bpmTapButton = tr( + "When tapped repeatedly, adjusts the BPM to match the tapped BPM."); + const QString tempoTapButton = tr("When tapped repeatedly, adjusts the tempo to match the tapped " "BPM."); + const QString bpmTempoEdit = tr("Click to open the tempo/BPM editor"); add("visual_bpm") << tr("Tempo") << tempoDisplay; @@ -414,8 +418,13 @@ void Tooltips::addStandardTooltips() { add("visual_key") //: The musical key of a track << tr("Key") - << tr("Displays the current musical key of the loaded track after pitch shifting."); + << tr("Displays the current musical key of the loaded track after pitch shifting.") + << tr("It also shows a colored bar if Key colors are enabled in the Preferences.") + << tr("The bar will be split vertically if the track's key is in between full keys."); + add("visual_bpm_edit") + << tempoDisplay + << bpmTempoEdit; add("bpm_tap") << tr("BPM Tap") << bpmTapButton; @@ -426,6 +435,10 @@ void Tooltips::addStandardTooltips() { << tr("Rate Tap and BPM Tap") << QString("%1: %2").arg(leftClick, tempoTapButton) << QString("%1: %2").arg(rightClick, bpmTapButton); + add("tempo_edit") + << tr("Set Tempo") + << tr("Set the desired tempo in BPM. If the track currently has no BPM detected, " + "set the desired tempo in percent."); add("beats_adjust_slower") << tr("Adjust BPM Down") diff --git a/src/skin/skinloader.cpp b/src/skin/skinloader.cpp index a2795f8b4b6b..271042078383 100644 --- a/src/skin/skinloader.cpp +++ b/src/skin/skinloader.cpp @@ -14,6 +14,8 @@ #include "util/debug.h" #include "util/timer.h" +const QString kSkinsDirName = QStringLiteral("skins"); + namespace mixxx { namespace skin { @@ -30,20 +32,25 @@ SkinLoader::~SkinLoader() { LegacySkinParser::clearSharedGroupStrings(); } -QList SkinLoader::getSkins() const { - const QList skinSearchPaths = getSkinSearchPaths(); +QList SkinLoader::getUserSkins() const { + return getSkinsFromDir(getUserSkinDir()); +} + +QList SkinLoader::getSystemSkins() const { + return getSkinsFromDir(getSytemSkinDir()); +} + +QList SkinLoader::getSkinsFromDir(const QDir& dir) const { QList skins; - for (const QDir& dir : skinSearchPaths) { - const QList fileInfos = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); - for (const QFileInfo& fileInfo : fileInfos) { - QDir skinDir(fileInfo.absoluteFilePath()); - SkinPointer pSkin = skinFromDirectory(skinDir); - if (pSkin) { - VERIFY_OR_DEBUG_ASSERT(pSkin->isValid()) { - continue; - } - skins.append(pSkin); + const QList fileInfos = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo& fileInfo : fileInfos) { + QDir skinDir(fileInfo.absoluteFilePath()); + SkinPointer pSkin = skinFromDirectory(skinDir); + if (pSkin) { + VERIFY_OR_DEBUG_ASSERT(pSkin->isValid()) { + continue; } + skins.append(pSkin); } } @@ -53,25 +60,38 @@ QList SkinLoader::getSkins() const { QList SkinLoader::getSkinSearchPaths() const { QList searchPaths; - // Add user skin path to search paths + const auto userSkinDir = getUserSkinDir(); + if (!userSkinDir.path().isEmpty()) { + searchPaths.append(userSkinDir); + } + + searchPaths.append(getSytemSkinDir()); + + return searchPaths; +} + +QDir SkinLoader::getUserSkinDir() const { QDir userSkinsPath(m_pConfig->getSettingsPath()); - if (userSkinsPath.cd("skins")) { - searchPaths.append(userSkinsPath); + if (userSkinsPath.cd(kSkinsDirName)) { + return userSkinsPath; } + return {}; +} +QDir SkinLoader::getSytemSkinDir() const { // If we can't find the skins folder then we can't load a skin at all. This // is a critical error in the user's Mixxx installation. QDir skinsPath(m_pConfig->getResourcePath()); - if (!skinsPath.cd("skins")) { + if (!skinsPath.cd(kSkinsDirName)) { reportCriticalErrorAndQuit("Skin directory does not exist: " + - skinsPath.absoluteFilePath("skins")); + skinsPath.absoluteFilePath(kSkinsDirName)); } - searchPaths.append(skinsPath); - - return searchPaths; + return skinsPath; } SkinPointer SkinLoader::getSkin(const QString& skinName) const { + // If there are skins with identical name in both the resource and user + // directory, we'll discover the one from the user dir first const QList skinSearchPaths = getSkinSearchPaths(); for (QDir dir : skinSearchPaths) { if (dir.cd(skinName)) { diff --git a/src/skin/skinloader.h b/src/skin/skinloader.h index d306204fca73..c997e22b4fd4 100644 --- a/src/skin/skinloader.h +++ b/src/skin/skinloader.h @@ -32,12 +32,16 @@ class SkinLoader : public QObject { SkinPointer getConfiguredSkin() const; QString getDefaultSkinName() const; QList getSkinSearchPaths() const; - QList getSkins() const; + QDir getUserSkinDir() const; + QDir getSytemSkinDir() const; + QList getUserSkins() const; + QList getSystemSkins() const; private slots: void slotNumMicsChanged(double numMics); private: + QList getSkinsFromDir(const QDir& dir) const; QString pickResizableSkin(const QString& oldSkin) const; SkinPointer skinFromDirectory(const QDir& dir) const; diff --git a/src/soundio/soundmanager.cpp b/src/soundio/soundmanager.cpp index 273211831cac..4241696aa37d 100644 --- a/src/soundio/soundmanager.cpp +++ b/src/soundio/soundmanager.cpp @@ -145,27 +145,48 @@ QList SoundManager::getHostAPIList() const { return apiList; } -void SoundManager::closeDevices(bool sleepAfterClosing) { - //qDebug() << "SoundManager::closeDevices()"; +void SoundManager::closeDevices( + [[maybe_unused]] bool sleepAfterClosing, [[maybe_unused]] bool async) { + // sleepAfterClosing and async maybe unused depending on platform support + // qDebug() << "SoundManager::closeDevices()"; +#ifdef __LINUX__ bool closed = false; +#endif for (const auto& pDevice : std::as_const(m_devices)) { if (pDevice->isOpen()) { // NOTE(rryan): As of 2009 (?) it has been safe to close() a SoundDevice // while callbacks are active. pDevice->close(); +#ifdef __LINUX__ closed = true; +#endif } } - if (closed && sleepAfterClosing) { #ifdef __LINUX__ + if (closed && sleepAfterClosing) { // Sleep for 5 sec to allow asynchronously sound APIs like "pulse" to free // its resources as well + if (async) { + // Async mode - the caller will wait for `devicesClosed` before + // trying to reconfigure or reopen audio devices + QTimer::singleShot( + std::chrono::seconds(kSleepSecondsAfterClosingDevice), + this, + &SoundManager::completeDevicesClosing); + return; + } + // Sync mode, legacy - we sleep the current thread for 5 seconds QThread::sleep(kSleepSecondsAfterClosingDevice); + } else if (!closed) #endif + { + completeDevicesClosing(); } +} +void SoundManager::completeDevicesClosing() { // TODO(rryan): Should we do this before SoundDevice::close()? No! Because // then the callback may be running when we call // onInputDisconnected/onOutputDisconnected. @@ -199,6 +220,7 @@ void SoundManager::closeDevices(bool sleepAfterClosing) { // Indicate to the rest of Mixxx that sound is disconnected. m_pControlObjectSoundStatusCO->set(SOUNDMANAGER_DISCONNECTED); + emit devicesClosed(); } void SoundManager::clearDeviceList(bool sleepAfterClosing) { @@ -553,12 +575,12 @@ SoundManagerConfig SoundManager::getConfig() const { return m_config; } -void SoundManager::closeActiveConfig() { +void SoundManager::closeActiveConfig(bool async) { // Close open devices. After this call we will not get any more // onDeviceOutputCallback() or pushBuffer() calls because all the // SoundDevices are closed. closeDevices() blocks and can take a while. const bool sleepAfterClosing = true; - closeDevices(sleepAfterClosing); + closeDevices(sleepAfterClosing, async); } SoundDeviceStatus SoundManager::setConfig(const SoundManagerConfig& config) { diff --git a/src/soundio/soundmanager.h b/src/soundio/soundmanager.h index 205909535f4b..a5f4e92138cd 100644 --- a/src/soundio/soundmanager.h +++ b/src/soundio/soundmanager.h @@ -74,7 +74,12 @@ class SoundManager : public QObject { QList getHostAPIList() const; SoundManagerConfig getConfig() const; SoundDeviceStatus setConfig(const SoundManagerConfig& config); - void closeActiveConfig(); + // Due to a bug in in PulseAudio, we must give at least 5 seconds of cool + // down before performing further audio related operation. This sleep + // happens during the function call by default (synchronous blocking), but + // the caller may decide to use the async version, and must not performs any + // audio operation till it received the `devicesClosed` signal + void closeActiveConfig(bool async = false); void checkConfig(); void onDeviceOutputCallback(const SINT iFramesPerBuffer); @@ -107,12 +112,20 @@ class SoundManager : public QObject { void processUnderflowHappened(SINT framesPerBuffer); + UserSettingsPointer userSettings() const { + return m_pConfig; + } + signals: void devicesUpdated(); // emitted when pointers to SoundDevices go stale void devicesSetup(); // emitted when the sound devices have been set up + void devicesClosed(); // emitted when the sound devices have been closed and resources freed void outputRegistered(const AudioOutput& output, AudioSource* src); void inputRegistered(const AudioInput& input, AudioDestination* dest); + private slots: + void completeDevicesClosing(); + private: // Closes all the devices and empties the list of devices we have. void clearDeviceList(bool sleepAfterClosing); @@ -121,7 +134,7 @@ class SoundManager : public QObject { // open, this method simply runs through the list of all known soundcards // (from PortAudio) and attempts to close them all. Closing a soundcard that // isn't open is safe. - void closeDevices(bool sleepAfterClosing); + void closeDevices(bool sleepAfterClosing, bool async = false); void setJACKName() const; bool jackApiUsed() const { diff --git a/src/test/controller_hid_reportdescriptor_test.cpp b/src/test/controller_hid_reportdescriptor_test.cpp new file mode 100644 index 000000000000..e12a2f23d9db --- /dev/null +++ b/src/test/controller_hid_reportdescriptor_test.cpp @@ -0,0 +1,286 @@ +#include + +#include +#include + +#include "controllers/hid/hidreportdescriptor.h" + +using namespace hid::reportDescriptor; + +// Example HID report descriptor data + +// clang-format off +uint8_t reportDescriptor[] = { + 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x02, // Usage (Mouse) + 0xA1, 0x01, // Collection (Application) + 0x09, 0x01, // Usage (Pointer) + 0xA1, 0x00, // Collection (Physical) + 0x05, 0x09, // Usage Page (Button) + 0x19, 0x01, // Usage Minimum (1) + 0x29, 0x03, // Usage Maximum (3) + 0x15, 0x00, // Logical Minimum (0) + 0x25, 0x01, // Logical Maximum (1) + 0x95, 0x03, // Report Count (3) + 0x75, 0x01, // Report Size (1) + 0x81, 0x02, // Input (Data, Variable, Absolute) + 0x95, 0x01, // Report Count (1) + 0x75, 0x05, // Report Size (5) + 0x81, 0x01, // Input (Constant) + 0x05, 0x01, // Usage Page (Generic Desktop) + 0x09, 0x30, // Usage (X) + 0x09, 0x31, // Usage (Y) + 0x15, 0x81, // Logical Minimum (-127) + 0x25, 0x7F, // Logical Maximum (127) + 0x75, 0x08, // Report Size (8) + 0x95, 0x02, // Report Count (2) + 0x81, 0x06, // Input (Data, Variable, Relative) + 0xC0, // End Collection + 0xC0 // End Collection +}; +// clang-format on + +TEST(HidReportDescriptorParserTest, ParseReportDescriptor) { + const std::vector reportDescriptorVector( + reportDescriptor, reportDescriptor + sizeof(reportDescriptor)); + HidReportDescriptor parser(reportDescriptorVector); + Collection collection = parser.parse(); + + // Use getListOfReports to get the list of reports + auto reportsList = parser.getListOfReports(); + ASSERT_EQ(reportsList.size(), 1); + + auto& [collectionIdx, reportType, reportId] = reportsList[0]; + ASSERT_EQ(collectionIdx, 0); + + // Use getReport to get the report + auto reportOpt = parser.getReport(reportType, reportId); + ASSERT_TRUE(reportOpt.has_value()); + + const auto& report = reportOpt->get(); + + // Validate Report fields + ASSERT_EQ(report.m_reportType, reportType); + ASSERT_EQ(report.m_reportId, reportId); + + // Validate all Control fields + const std::vector& controls = report.getControls(); + ASSERT_EQ(controls.size(), 5); + + // Mouse Button 1 + EXPECT_EQ(controls[0].m_usage, 0x0009'0001); + EXPECT_EQ(controls[0].m_logicalMinimum, 0); + EXPECT_EQ(controls[0].m_logicalMaximum, 1); + EXPECT_EQ(controls[0].m_physicalMinimum, 0); + EXPECT_EQ(controls[0].m_physicalMaximum, 1); + EXPECT_EQ(controls[0].m_unitExponent, 0); + EXPECT_EQ(controls[0].m_unit, 0); + EXPECT_EQ(controls[0].m_bytePosition, 0); + EXPECT_EQ(controls[0].m_bitPosition, 0); + EXPECT_EQ(controls[0].m_bitSize, 1); + + // Mouse Button 2 + EXPECT_EQ(controls[1].m_usage, 0x0009'0002); + EXPECT_EQ(controls[1].m_logicalMinimum, 0); + EXPECT_EQ(controls[1].m_logicalMaximum, 1); + EXPECT_EQ(controls[1].m_physicalMinimum, 0); + EXPECT_EQ(controls[1].m_physicalMaximum, 1); + EXPECT_EQ(controls[1].m_unitExponent, 0); + EXPECT_EQ(controls[1].m_unit, 0); + EXPECT_EQ(controls[1].m_bytePosition, 0); + EXPECT_EQ(controls[1].m_bitPosition, 1); + EXPECT_EQ(controls[1].m_bitSize, 1); + + // Mouse Button 3 + EXPECT_EQ(controls[2].m_usage, 0x0009'0003); + EXPECT_EQ(controls[2].m_logicalMinimum, 0); + EXPECT_EQ(controls[2].m_logicalMaximum, 1); + EXPECT_EQ(controls[2].m_physicalMinimum, 0); + EXPECT_EQ(controls[2].m_physicalMaximum, 1); + EXPECT_EQ(controls[2].m_unitExponent, 0); + EXPECT_EQ(controls[2].m_unit, 0); + EXPECT_EQ(controls[2].m_bytePosition, 0); + EXPECT_EQ(controls[2].m_bitPosition, 2); + EXPECT_EQ(controls[2].m_bitSize, 1); + + // Mouse Movement X + EXPECT_EQ(controls[3].m_usage, 0x0001'0030); + EXPECT_EQ(controls[3].m_logicalMinimum, -127); + EXPECT_EQ(controls[3].m_logicalMaximum, 127); + EXPECT_EQ(controls[3].m_physicalMinimum, -127); + EXPECT_EQ(controls[3].m_physicalMaximum, 127); + EXPECT_EQ(controls[3].m_unitExponent, 0); + EXPECT_EQ(controls[3].m_unit, 0); + EXPECT_EQ(controls[3].m_bitSize, 8); + EXPECT_EQ(controls[3].m_bytePosition, 1); + EXPECT_EQ(controls[3].m_bitPosition, 0); + + // Mouse Movement Y + EXPECT_EQ(controls[4].m_usage, 0x0001'0031); + EXPECT_EQ(controls[4].m_logicalMinimum, -127); + EXPECT_EQ(controls[4].m_logicalMaximum, 127); + EXPECT_EQ(controls[4].m_physicalMinimum, -127); + EXPECT_EQ(controls[4].m_physicalMaximum, 127); + EXPECT_EQ(controls[4].m_unitExponent, 0); + EXPECT_EQ(controls[4].m_unit, 0); + EXPECT_EQ(controls[4].m_bitSize, 8); + EXPECT_EQ(controls[4].m_bytePosition, 2); + EXPECT_EQ(controls[4].m_bitPosition, 0); +} + +TEST(HidReportDescriptorTest, ControlValue_1Bit) { + auto reportData = QByteArray::fromHex("81'00'00'FF'01"); + Control control({0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Flags + 0x0009'0001, // UsagePage/Usage + 0, // LogicalMinimum + 1, // LogicalMaximum + 0, // PhysicalMinimum + 1, // PhysicalMaximum + 0, // UnitExponent + 0, // Unit + 3, // BytePosition + 0, // BitPosition + 1); // BitSize + + int32_t value = extractLogicalValue(reportData, control); + EXPECT_EQ(value, 0x1); + + bool result = applyLogicalValue(reportData, control, 0); + EXPECT_TRUE(result); + EXPECT_EQ(reportData, QByteArray::fromHex("81'00'00'FE'01")); + + int32_t value2 = extractLogicalValue(reportData, control); + EXPECT_EQ(value2, 0x0); +} + +TEST(HidReportDescriptorTest, ControlValue_unsigned11Bits) { + auto reportData = QByteArray::fromHex("81'30'46'00'01"); + Control control({0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Flags + 0x0009'0001, // UsagePage/Usage + 0, // LogicalMinimum + 2047, // LogicalMaximum + 0, // PhysicalMinimum + 2047, // PhysicalMaximum + 0, // UnitExponent + 0, // Unit + 1, // BytePosition + 2, // BitPosition + 11); // BitSize + + int32_t value = extractLogicalValue(reportData, control); + EXPECT_EQ(value, 0b001'1000'1100); + + bool result = applyLogicalValue(reportData, control, 0b010'1010'1010); + EXPECT_TRUE(result); + EXPECT_EQ(reportData, QByteArray::fromHex("81'A8'4A'00'01")); + + int32_t value2 = extractLogicalValue(reportData, control); + EXPECT_EQ(value2, 0b010'1010'1010); +} + +TEST(HidReportDescriptorTest, ControlValue_signed11Bits) { + auto reportData = QByteArray::fromHex("AA'BB'CC'DD'EE"); + Control control({0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Flags + 0x0009'0001, // UsagePage/Usage + -1000, // LogicalMinimum + 1000, // LogicalMaximum + -10, // PhysicalMinimum + 10, // PhysicalMaximum + 0, // UnitExponent + 0, // Unit + 2, // BytePosition + 0, // BitPosition + 11); // BitSize + + int32_t value = extractLogicalValue(reportData, control); + EXPECT_EQ(value, -564); + + bool result = applyLogicalValue(reportData, control, +200); + EXPECT_TRUE(result); + EXPECT_EQ(reportData, QByteArray::fromHex("AA'BB'C8'D8'EE")); + + int32_t value2 = extractLogicalValue(reportData, control); + EXPECT_EQ(value2, +200); + + bool result2 = applyLogicalValue(reportData, control, -200); + EXPECT_TRUE(result2); + EXPECT_EQ(reportData, QByteArray::fromHex("AA'BB'38'DF'EE")); + + int32_t value3 = extractLogicalValue(reportData, control); + EXPECT_EQ(value3, -200); +} + +TEST(HidReportDescriptorTest, ControlValue_unsigned32Bits) { + auto reportData = QByteArray::fromHex("0A'21'43'65'B7"); + Control control({0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Flags + 0x0009'0001, // UsagePage/Usage + 0, // LogicalMinimum + 0x7FFFFFFF, // LogicalMaximum + 0, // PhysicalMinimum + 0x7FFFFFFF, // PhysicalMaximum + 0, // UnitExponent + 0, // Unit + 0, // BytePosition + 4, // BitPosition + 32); // BitSize + + int32_t value = extractLogicalValue(reportData, control); + EXPECT_EQ(value, 0x76'54'32'10); + + bool result = applyLogicalValue(reportData, control, 0x01'23'45'67); + EXPECT_TRUE(result); + EXPECT_EQ(reportData, QByteArray::fromHex("7A'56'34'12'B0")); + + int32_t value2 = extractLogicalValue(reportData, control); + EXPECT_EQ(value2, 0x01'23'45'67); +} + +TEST(HidReportDescriptorTest, ControlValue_signed32Bits) { + auto reportData = QByteArray::fromHex("0A'21'43'65'B7"); + Control control({0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Flags + 0x0009'0001, // UsagePage/Usage + std::numeric_limits::min(), // LogicalMinimum + std::numeric_limits::max(), // LogicalMaximum + 10, // PhysicalMinimum + 10, // PhysicalMaximum + 0, // UnitExponent + 0, // Unit + 0, // BytePosition + 4, // BitPosition + 32); // BitSize + + int32_t value = extractLogicalValue(reportData, control); + EXPECT_EQ(value, 0x76'54'32'10); + + bool result = applyLogicalValue(reportData, control, std::numeric_limits::min()); + EXPECT_TRUE(result); + EXPECT_EQ(reportData, QByteArray::fromHex("0A'00'00'00'B8")); + + int32_t value2 = extractLogicalValue(reportData, control); + EXPECT_EQ(value2, std::numeric_limits::min()); + + bool result2 = applyLogicalValue(reportData, control, std::numeric_limits::max()); + EXPECT_TRUE(result2); + EXPECT_EQ(reportData, QByteArray::fromHex("FA'FF'FF'FF'B7")); + + int32_t value3 = extractLogicalValue(reportData, control); + EXPECT_EQ(value3, std::numeric_limits::max()); +} + +TEST(HidReportDescriptorTest, SetControlValue_OutOfRange) { + auto reportData = QByteArray::fromHex("81'00'00'00'01"); + Control control({0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Flags + 0x0009'0001, // UsagePage/Usage + 0, // LogicalMinimum + 2047, // LogicalMaximum + 0, // PhysicalMinimum + 2047, // PhysicalMaximum + 0, // UnitExponent + 0, // Unit + 0, // BytePosition + 0, // BitPosition + 11); // BitSize + + bool result = applyLogicalValue(reportData, control, 3000); + EXPECT_FALSE(result); +} diff --git a/src/test/controller_mapping_validation_test.cpp b/src/test/controller_mapping_validation_test.cpp index 3ceefbe10dfd..b0afc4462f75 100644 --- a/src/test/controller_mapping_validation_test.cpp +++ b/src/test/controller_mapping_validation_test.cpp @@ -7,7 +7,7 @@ #include "controllers/defs_controllers.h" #include "controllers/scripting/legacy/controllerscriptenginelegacy.h" -#ifdef MIXXX_USE_QML +#include "track/track.h" #include "effects/effectsmanager.h" #include "engine/channelhandle.h" #include "engine/enginemixer.h" @@ -15,10 +15,11 @@ #include "library/library.h" #include "mixer/playerinfo.h" #include "mixer/playermanager.h" +#ifdef MIXXX_USE_QML #include "qml/qmlplayermanagerproxy.h" -#include "soundio/soundmanager.h" #endif #include "moc_controller_mapping_validation_test.cpp" +#include "soundio/soundmanager.h" FakeMidiControllerJSProxy::FakeMidiControllerJSProxy() : ControllerJSProxy(nullptr) { @@ -121,18 +122,10 @@ bool FakeController::isMappable() const { return false; } -#ifdef MIXXX_USE_QML -void deleteTrack(Track* pTrack) { - // Delete track objects directly in unit tests with - // no main event loop - delete pTrack; -}; -#endif - void LegacyControllerMappingValidationTest::SetUp() { m_mappingPath = getTestDir().filePath(QStringLiteral("../../res/controllers/")); m_pEnumerator.reset(new MappingInfoEnumerator(QList{m_mappingPath.absolutePath()})); -#ifdef MIXXX_USE_QML + // This setup mirrors coreservices -- it would be nice if we could use coreservices instead // but it does a lot of local disk / settings setup. auto pChannelHandleFactory = std::make_shared(); @@ -164,7 +157,7 @@ void LegacyControllerMappingValidationTest::SetUp() { nullptr, m_pConfig, dbConnectionPooler(), - deleteTrack); + [](Track* pTrack) { delete pTrack; }); m_pRecordingManager = std::make_shared(m_pConfig, m_pEngine.get()); CoverArtCache::createInstance(); @@ -177,16 +170,21 @@ void LegacyControllerMappingValidationTest::SetUp() { m_pRecordingManager.get()); m_pPlayerManager->bindToLibrary(m_pLibrary.get()); +#ifdef MIXXX_USE_QML mixxx::qml::QmlPlayerManagerProxy::registerPlayerManager(m_pPlayerManager); +#endif + ControllerScriptEngineBase::registerPlayerManager(m_pPlayerManager); ControllerScriptEngineBase::registerTrackCollectionManager(m_pTrackCollectionManager); } void LegacyControllerMappingValidationTest::TearDown() { PlayerInfo::destroy(); CoverArtCache::destroy(); +#ifdef MIXXX_USE_QML mixxx::qml::QmlPlayerManagerProxy::registerPlayerManager(nullptr); - ControllerScriptEngineBase::registerTrackCollectionManager(nullptr); #endif + ControllerScriptEngineBase::registerPlayerManager(nullptr); + ControllerScriptEngineBase::registerTrackCollectionManager(nullptr); } bool LegacyControllerMappingValidationTest::testLoadMapping(const MappingInfo& mapping) { diff --git a/src/test/controller_mapping_validation_test.h b/src/test/controller_mapping_validation_test.h index ee5671616799..ab1c0a1c9dd2 100644 --- a/src/test/controller_mapping_validation_test.h +++ b/src/test/controller_mapping_validation_test.h @@ -1,7 +1,6 @@ #pragma once #include - #include "control/controlindicatortimer.h" #include "controllers/controller.h" #include "controllers/controllermappinginfoenumerator.h" @@ -222,7 +221,6 @@ class LegacyControllerMappingValidationTest : public MixxxDbTest, SoundSourcePro protected: void SetUp() override; -#ifdef MIXXX_USE_QML void TearDown() override; TrackPointer getOrAddTrackByLocation( @@ -239,7 +237,6 @@ class LegacyControllerMappingValidationTest : public MixxxDbTest, SoundSourcePro std::shared_ptr m_pTrackCollectionManager; std::shared_ptr m_pRecordingManager; std::shared_ptr m_pLibrary; -#endif bool testLoadMapping(const MappingInfo& mapping); diff --git a/src/test/controllerscriptenginelegacy_test.cpp b/src/test/controllerscriptenginelegacy_test.cpp index ac8f2810a5c6..472c3d217870 100644 --- a/src/test/controllerscriptenginelegacy_test.cpp +++ b/src/test/controllerscriptenginelegacy_test.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -27,7 +28,26 @@ #ifdef MIXXX_USE_QML #include "qml/qmlmixxxcontrollerscreen.h" #endif +#include "control/controlindicatortimer.h" +#include "database/mixxxdb.h" +#include "effects/effectsmanager.h" +#include "engine/channelhandle.h" +#include "engine/channels/enginedeck.h" +#include "engine/enginebuffer.h" +#include "engine/enginemixer.h" +#include "library/coverartcache.h" +#include "library/library.h" +#include "library/trackcollectionmanager.h" +#include "mixer/deck.h" +#include "mixer/playerinfo.h" +#include "mixer/playermanager.h" +#include "recording/recordingmanager.h" +#include "soundio/soundmanager.h" +#include "sources/soundsourceproxy.h" +#include "test/mixxxdbtest.h" #include "test/mixxxtest.h" +#include "test/soundsourceproviderregistration.h" +#include "track/track.h" #include "util/color/colorpalette.h" #include "util/time.h" @@ -38,7 +58,9 @@ typedef std::unique_ptr ScopedTemporaryFile; const RuntimeLoggingCategory logger(QString("test").toLocal8Bit()); -class ControllerScriptEngineLegacyTest : public ControllerScriptEngineLegacy, public MixxxTest { +class ControllerScriptEngineLegacyTest : public ControllerScriptEngineLegacy, + public MixxxDbTest, + SoundSourceProviderRegistration { protected: ControllerScriptEngineLegacyTest() : ControllerScriptEngineLegacy(nullptr, logger) { @@ -57,6 +79,72 @@ class ControllerScriptEngineLegacyTest : public ControllerScriptEngineLegacy, pu mixxx::Time::addTestTime(10ms); QThread::currentThread()->setObjectName("Main"); initialize(); + + // This setup mirrors coreservices -- it would be nice if we could use coreservices instead + // but it does a lot of local disk / settings setup. + auto pChannelHandleFactory = std::make_shared(); + m_pEffectsManager = std::make_shared(config(), pChannelHandleFactory); + m_pEngine = std::make_shared( + config(), + "[Master]", + m_pEffectsManager.get(), + pChannelHandleFactory, + true); + m_pSoundManager = std::make_shared(config(), m_pEngine.get()); + m_pControlIndicatorTimer = std::make_shared(nullptr); + m_pEngine->registerNonEngineChannelSoundIO(gsl::make_not_null(m_pSoundManager.get())); + + CoverArtCache::createInstance(); + + m_pPlayerManager = std::make_shared(config(), + m_pSoundManager.get(), + m_pEffectsManager.get(), + m_pEngine.get()); + + m_pPlayerManager->addConfiguredDecks(); + m_pPlayerManager->addSampler(); + PlayerInfo::create(); + m_pEffectsManager->setup(); + + const auto dbConnection = mixxx::DbConnectionPooled(dbConnectionPooler()); + if (!MixxxDb::initDatabaseSchema(dbConnection)) { + exit(1); + } + + m_pTrackCollectionManager = std::make_shared( + nullptr, + config(), + dbConnectionPooler(), + [](Track* pTrack) { delete pTrack; }); + + m_pRecordingManager = std::make_shared(config(), m_pEngine.get()); + m_pLibrary = std::make_shared( + nullptr, + config(), + dbConnectionPooler(), + m_pTrackCollectionManager.get(), + m_pPlayerManager.get(), + m_pRecordingManager.get()); + + m_pPlayerManager->bindToLibrary(m_pLibrary.get()); + ControllerScriptEngineBase::registerPlayerManager(m_pPlayerManager); + ControllerScriptEngineBase::registerTrackCollectionManager(m_pTrackCollectionManager); + } + + void loadTrackSync(const QString& trackLocation) { + TrackPointer pTrack1 = m_pTrackCollectionManager->getOrAddTrack( + TrackRef::fromFilePath(getTestDir().filePath(trackLocation))); + auto* deck = m_pPlayerManager->getDeck(1); + deck->slotLoadTrack(pTrack1, +#ifdef __STEM__ + mixxx::StemChannelSelection(), +#endif + false); + m_pEngine->process(1024); + while (!deck->getEngineDeck()->getEngineBuffer()->isTrackLoaded()) { + QTest::qSleep(100); + } + processEvents(); } void TearDown() override { @@ -64,6 +152,22 @@ class ControllerScriptEngineLegacyTest : public ControllerScriptEngineLegacy, pu #ifdef MIXXX_USE_QML m_rootItems.clear(); #endif + CoverArtCache::destroy(); + ControllerScriptEngineBase::registerPlayerManager(nullptr); + ControllerScriptEngineBase::registerTrackCollectionManager(nullptr); + } + + ~ControllerScriptEngineLegacyTest() { + // Reset in the correct order to avoid singleton destruction issues + m_pSoundManager.reset(); + m_pPlayerManager.reset(); + PlayerInfo::destroy(); + m_pLibrary.reset(); + m_pRecordingManager.reset(); + m_pEngine.reset(); + m_pEffectsManager.reset(); + m_pTrackCollectionManager.reset(); + m_pControlIndicatorTimer.reset(); } bool evaluateScriptFile(const QFileInfo& scriptFile) { @@ -107,6 +211,15 @@ class ControllerScriptEngineLegacyTest : public ControllerScriptEngineLegacy, pu handleScreenFrame(screeninfo, frame, timestamp); } #endif + + std::shared_ptr m_pEffectsManager; + std::shared_ptr m_pEngine; + std::shared_ptr m_pSoundManager; + std::shared_ptr m_pControlIndicatorTimer; + std::shared_ptr m_pPlayerManager; + std::shared_ptr m_pRecordingManager; + std::shared_ptr m_pLibrary; + std::shared_ptr m_pTrackCollectionManager; }; class ControllerScriptEngineLegacyTimerTest : public ControllerScriptEngineLegacyTest { @@ -834,11 +947,60 @@ TEST_F(ControllerScriptEngineLegacyTest, convertCharsetAllCharset) { } } +TEST_F(ControllerScriptEngineLegacyTest, JavascriptPlayerProxy) { + QMap expectedValues = { + std::pair("artist", "Test Artist"), + std::pair("title", "Test title"), + std::pair("album", "Test Album"), + std::pair("albumArtist", "Test Album Artist"), + std::pair("genre", "Test genre"), + std::pair("composer", "Test Composer"), + std::pair("grouping", ""), + std::pair("year", "2011"), + std::pair("trackNumber", "07"), + std::pair("trackTotal", "60")}; + + m_pJSEngine->globalObject().setProperty( + "testedValues", m_pJSEngine->toScriptValue(expectedValues.keys())); + + const auto* code = + "var result = {};" + "var player = engine.getPlayer('[Channel1]');" + "for(const name of testedValues) {" + " player[`${name}Changed`].connect(newValue => {" + " result[name] = newValue;" + " });" + "}"; + + EXPECT_TRUE(evaluateAndAssert(code)) << "Evaluation error in test code"; + loadTrackSync("id3-test-data/all.mp3"); +#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0) + for (auto [property, expected] : expectedValues.asKeyValueRange()) { +#else + for (auto it = expectedValues.constBegin(); it != expectedValues.constEnd(); ++it) { + const QString& property = it.key(); + const QString& expected = it.value(); +#endif + auto const playerActual = evaluate("player." + property).toString(); + auto const slotActual = evaluate("result." + property).toString(); + EXPECT_QSTRING_EQ(expected, playerActual) + << QString("engine.getPlayer(...).%1 doesn't corresponds to " + "its expected value (expected: %2, actual: %3)") + .arg(property, expected, playerActual) + .toStdString(); + EXPECT_QSTRING_EQ(expected, slotActual) << QString( + "engine.getPlayer(...).%1Changed slot didn't produce the " + "expected value (expected: %2, actual: %3)") + .arg(property, expected, playerActual) + .toStdString(); + } +} + #ifdef MIXXX_USE_QML class MockScreenRender : public ControllerRenderingEngine { public: MockScreenRender(const LegacyControllerMapping::ScreenInfo& info) - : ControllerRenderingEngine(info, new ControllerEngineThreadControl){}; + : ControllerRenderingEngine(info, new ControllerEngineThreadControl) {}; MOCK_METHOD(void, requestSendingFrameData, (Controller * controller, const QByteArray& frame), diff --git a/src/test/id3-test-data/all.mp3 b/src/test/id3-test-data/all.mp3 new file mode 100644 index 000000000000..2a383fc1fe68 Binary files /dev/null and b/src/test/id3-test-data/all.mp3 differ diff --git a/src/test/readaheadmanager_test.cpp b/src/test/readaheadmanager_test.cpp index 3680a7d08d70..ece027526603 100644 --- a/src/test/readaheadmanager_test.cpp +++ b/src/test/readaheadmanager_test.cpp @@ -1,12 +1,14 @@ +#include "engine/readaheadmanager.h" + #include -#include #include +#include -#include "engine/cachingreader/cachingreader.h" #include "control/controlobject.h" +#include "engine/cachingreader/cachingreader.h" +#include "engine/controls/cuecontrol.h" #include "engine/controls/loopingcontrol.h" -#include "engine/readaheadmanager.h" #include "test/mixxxtest.h" #include "util/assert.h" #include "util/defs.h" @@ -41,14 +43,11 @@ class StubLoopControl : public LoopingControl { : LoopingControl(kGroup, UserSettingsPointer()) { } - void pushTriggerReturnValue(double value) { + void pushValues(double trigger, double target) { m_triggerReturnValues.push_back( - mixxx::audio::FramePos::fromEngineSamplePosMaybeInvalid(value)); - } - - void pushTargetReturnValue(double value) { + mixxx::audio::FramePos::fromEngineSamplePosMaybeInvalid(trigger)); m_targetReturnValues.push_back( - mixxx::audio::FramePos::fromEngineSamplePosMaybeInvalid(value)); + mixxx::audio::FramePos::fromEngineSamplePosMaybeInvalid(target)); } mixxx::audio::FramePos nextTrigger(bool reverse, @@ -68,6 +67,35 @@ class StubLoopControl : public LoopingControl { QList m_targetReturnValues; }; +class StubCueControl : public CueControl { + public: + StubCueControl() + : CueControl(kGroup, UserSettingsPointer()) { + } + + void pushValues(double trigger, double target) { + m_triggerReturnValues.push_back( + mixxx::audio::FramePos::fromEngineSamplePosMaybeInvalid(trigger)); + + m_targetReturnValues.push_back( + mixxx::audio::FramePos::fromEngineSamplePosMaybeInvalid(target)); + } + + mixxx::audio::FramePos nextTrigger(bool, + mixxx::audio::FramePos, + mixxx::audio::FramePos* pTargetPosition, + mixxx::audio::FrameDiff_t) override { + RELEASE_ASSERT(!m_targetReturnValues.isEmpty()); + *pTargetPosition = m_targetReturnValues.takeFirst(); + RELEASE_ASSERT(!m_triggerReturnValues.isEmpty()); + return m_triggerReturnValues.takeFirst(); + } + + protected: + QList m_triggerReturnValues; + QList m_targetReturnValues; +}; + class ReadAheadManagerTest : public MixxxTest { public: ReadAheadManagerTest() @@ -75,6 +103,12 @@ class ReadAheadManagerTest : public MixxxTest { m_beatNextCO(ConfigKey(kGroup, "beat_next")), m_beatPrevCO(ConfigKey(kGroup, "beat_prev")), m_playCO(ConfigKey(kGroup, "play")), + m_stopCO(ConfigKey(kGroup, "stop")), + m_vinylControlCO(ConfigKey(kGroup, "vinylcontrol_enabled")), + m_vinylControlModeCO(ConfigKey(kGroup, "vinylcontrol_mode")), + m_passthroughCO(ConfigKey(kGroup, "passthrough")), + m_indicator250msCO(ConfigKey("[App]", "indicator_250ms")), + m_indicator500msCO(ConfigKey("[App]", "indicator_500ms")), m_quantizeCO(ConfigKey(kGroup, "quantize")), m_repeatCO(ConfigKey(kGroup, "repeat")), m_slipEnabledCO(ConfigKey(kGroup, "slip_enabled")), @@ -87,14 +121,22 @@ class ReadAheadManagerTest : public MixxxTest { SampleUtil::clear(m_pBuffer, MAX_BUFFER_LEN); m_pReader.reset(new StubReader()); m_pLoopControl.reset(new StubLoopControl()); + m_pCueControl.reset(new StubCueControl()); m_pReadAheadManager.reset(new ReadAheadManager(m_pReader.data(), - m_pLoopControl.data())); + m_pLoopControl.data(), + m_pCueControl.data())); } ControlObject m_beatClosestCO; ControlObject m_beatNextCO; ControlObject m_beatPrevCO; ControlObject m_playCO; + ControlObject m_stopCO; + ControlObject m_vinylControlCO; + ControlObject m_vinylControlModeCO; + ControlObject m_passthroughCO; + ControlObject m_indicator250msCO; + ControlObject m_indicator500msCO; ControlObject m_quantizeCO; ControlObject m_repeatCO; ControlObject m_slipEnabledCO; @@ -102,27 +144,72 @@ class ReadAheadManagerTest : public MixxxTest { CSAMPLE* m_pBuffer; QScopedPointer m_pReader; QScopedPointer m_pLoopControl; + QScopedPointer m_pCueControl; QScopedPointer m_pReadAheadManager; }; +TEST_F(ReadAheadManagerTest, SavedJump) { + m_pReadAheadManager->notifySeek(0.5); + + for (int i = 0; i < 2; i++) { + m_pLoopControl->pushValues(kNoTrigger, kNoTrigger); + } + + m_pCueControl->pushValues(20, 6); + m_pCueControl->pushValues(kNoTrigger, kNoTrigger); + + EXPECT_EQ(20, + m_pReadAheadManager->getNextSamples( + 1.0, m_pBuffer, 30, mixxx::audio::ChannelCount::stereo())); + EXPECT_NEAR(6.5, m_pReadAheadManager->getPlaypos(), 1); + EXPECT_EQ(80, + m_pReadAheadManager->getNextSamples( + 1.0, m_pBuffer, 80, mixxx::audio::ChannelCount::stereo())); + + EXPECT_NEAR(86.5, m_pReadAheadManager->getPlaypos(), 1); +} + +TEST_F(ReadAheadManagerTest, TriggerOnJumpOrLoop) { + m_pReadAheadManager->notifySeek(0); + + // The jump trigger is located before the loop end + m_pLoopControl->pushValues(50, 10); + m_pCueControl->pushValues(40, 20); + + EXPECT_EQ(40, + m_pReadAheadManager->getNextSamples( + 1.0, m_pBuffer, 100, mixxx::audio::ChannelCount::stereo())); + EXPECT_NEAR(20, m_pReadAheadManager->getPlaypos(), 1); + + m_pReadAheadManager->notifySeek(0); + + // The jump trigger is located after the loop end + m_pLoopControl->pushValues(50, 40); + m_pCueControl->pushValues(60, 30); + + EXPECT_EQ(50, + m_pReadAheadManager->getNextSamples( + 1.0, m_pBuffer, 100, mixxx::audio::ChannelCount::stereo())); + EXPECT_NEAR(40, m_pReadAheadManager->getPlaypos(), 1); +} + TEST_F(ReadAheadManagerTest, FractionalFrameLoop) { // If we are in reverse, a loop is enabled, and the current playposition // is before of the loop, we should seek to the out point of the loop. m_pReadAheadManager->notifySeek(0.5); - // Trigger value means, the sample that triggers the loop (loop in) - m_pLoopControl->pushTriggerReturnValue(20.2); - m_pLoopControl->pushTriggerReturnValue(20.2); - m_pLoopControl->pushTriggerReturnValue(20.2); - m_pLoopControl->pushTriggerReturnValue(20.2); - m_pLoopControl->pushTriggerReturnValue(20.2); - m_pLoopControl->pushTriggerReturnValue(20.2); - // Process value is the sample we should seek to. - m_pLoopControl->pushTargetReturnValue(3.3); - m_pLoopControl->pushTargetReturnValue(3.3); - m_pLoopControl->pushTargetReturnValue(3.3); - m_pLoopControl->pushTargetReturnValue(3.3); - m_pLoopControl->pushTargetReturnValue(3.3); - m_pLoopControl->pushTargetReturnValue(kNoTrigger); + // Trigger value means, the sample that triggers the loop (loop in) and the + // sample we should seek to. + m_pLoopControl->pushValues(20.2, 3.3); + m_pLoopControl->pushValues(20.2, 3.3); + m_pLoopControl->pushValues(20.2, 3.3); + m_pLoopControl->pushValues(20.2, 3.3); + m_pLoopControl->pushValues(20.2, 3.3); + m_pLoopControl->pushValues(20.2, kNoTrigger); + + for (int i = 0; i < 6; i++) { + m_pCueControl->pushValues(kNoTrigger, kNoTrigger); + } + // read from start to loop trigger, overshoot 0.3 EXPECT_EQ(20, m_pReadAheadManager->getNextSamples( diff --git a/src/test/waveform_upgrade_test.cpp b/src/test/waveform_upgrade_test.cpp index 44387755bca8..21386e1ec3f1 100644 --- a/src/test/waveform_upgrade_test.cpp +++ b/src/test/waveform_upgrade_test.cpp @@ -23,7 +23,7 @@ TEST_F(UpgradeTest, useCorrectWaveformType) { int oldTypeId; WaveformWidgetType::Type expectedType; WaveformWidgetBackend expectedBackend; - allshader::WaveformRendererSignalBase::Options expectedOptions; + WaveformRendererSignalBase::Options expectedOptions; }; QList testCases = { @@ -31,132 +31,132 @@ TEST_F(UpgradeTest, useCorrectWaveformType) { 0, WaveformWidgetType::Empty, WaveformWidgetBackend::None, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"SoftwareWaveform", 2, // Filtered WaveformWidgetType::Filtered, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"QtSimpleWaveform", 3, // Simple Qt WaveformWidgetType::Simple, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"QtWaveform", 4, // Filtered Qt WaveformWidgetType::Filtered, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"GLSimpleWaveform", 5, // Simple GL WaveformWidgetType::Simple, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"GLFilteredWaveform", 6, // Filtered GL WaveformWidgetType::Filtered, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"GLSLFilteredWaveform", 7, // Filtered GLSL WaveformWidgetType::Filtered, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::HighDetail}, + WaveformRendererSignalBase::Option::HighDetail}, test_case{"HSVWaveform", 8, // HSV WaveformWidgetType::HSV, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"GLVSyncTest", 9, // VSync GL WaveformWidgetType::VSyncTest, WaveformWidgetBackend::None, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"RGBWaveform", 10, // RGB WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"GLRGBWaveform", 11, // RGB GL WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"GLSLRGBWaveform", 12, // RGB GLSL WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::HighDetail}, + WaveformRendererSignalBase::Option::HighDetail}, test_case{"QtVSyncTest", 13, // VSync Qt WaveformWidgetType::VSyncTest, WaveformWidgetBackend::None, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"QtHSVWaveform", 14, // HSV Qt WaveformWidgetType::HSV, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"QtRGBWaveform", 15, // RGB Qt WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"GLSLRGBStackedWaveform", 16, // RGB Stacked WaveformWidgetType::Stacked, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::HighDetail}, + WaveformRendererSignalBase::Option::HighDetail}, test_case{"AllShaderRGBWaveform", 17, // RGB (all-shaders) WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"AllShaderLRRGBWaveform", 18, // L/R RGB (all-shaders) WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::SplitStereoSignal}, + WaveformRendererSignalBase::Option::SplitStereoSignal}, test_case{"AllShaderFilteredWaveform", 19, // Filtered (all-shaders) WaveformWidgetType::Filtered, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"AllShaderSimpleWaveform", 20, // Simple (all-shaders) WaveformWidgetType::Simple, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"AllShaderHSVWaveform", 21, // HSV (all-shaders) WaveformWidgetType::HSV, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"AllShaderTexturedFiltered", 22, // Filtered (textured) (all-shaders) WaveformWidgetType::Filtered, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::HighDetail}, + WaveformRendererSignalBase::Option::HighDetail}, test_case{"AllShaderTexturedRGB", 23, // RGB (textured) (all-shaders) WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::HighDetail}, + WaveformRendererSignalBase::Option::HighDetail}, test_case{"AllShaderTexturedStacked", 24, // Stacked (textured) (all-shaders) WaveformWidgetType::Stacked, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::HighDetail}, + WaveformRendererSignalBase::Option::HighDetail}, test_case{"AllShaderRGBStackedWaveform", 26, // Stacked (all-shaders) WaveformWidgetType::Stacked, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}, + WaveformRendererSignalBase::Option::None}, test_case{"Count_WaveformwidgetType", 27, // Also used as invalid value WaveformWidgetType::RGB, WaveformWidgetBackend::AllShader, - allshader::WaveformRendererSignalBase::Option::None}}; + WaveformRendererSignalBase::Option::None}}; for (const auto& testCase : testCases) { int waveformType = testCase.oldTypeId; diff --git a/src/util/cmdlineargs.cpp b/src/util/cmdlineargs.cpp index 8432ea55731f..1dfdc4cb2549 100644 --- a/src/util/cmdlineargs.cpp +++ b/src/util/cmdlineargs.cpp @@ -285,6 +285,14 @@ bool CmdlineArgs::parse(const QStringList& arguments, CmdlineArgs::ParseMode mod "Loads experimental QML GUI instead of legacy QWidget skin") : QString()); parser.addOption(qml); + const QCommandLineOption awareOfRisk( + QStringLiteral("allow-dangerous-data-corruption-risk"), + forUserFeedback + ? QCoreApplication::translate("CmdlineArgs", + "Force Mixxx to load an unstable version with an " + "existing user profile from a stable version") + : QString()); + parser.addOption(awareOfRisk); #endif const QCommandLineOption safeMode(QStringLiteral("safe-mode"), forUserFeedback ? QCoreApplication::translate("CmdlineArgs", @@ -459,6 +467,7 @@ bool CmdlineArgs::parse(const QStringList& arguments, CmdlineArgs::ParseMode mod m_developer = parser.isSet(developer); #ifdef MIXXX_USE_QML m_qml = parser.isSet(qml); + m_awareOfRisk = parser.isSet(awareOfRisk); #endif m_safeMode = parser.isSet(safeMode) || parser.isSet(safeModeDeprecated); m_debugAssertBreak = parser.isSet(debugAssertBreak) || parser.isSet(debugAssertBreakDeprecated); diff --git a/src/util/cmdlineargs.h b/src/util/cmdlineargs.h index 9e42f27cb56b..85713cd29b2a 100644 --- a/src/util/cmdlineargs.h +++ b/src/util/cmdlineargs.h @@ -50,6 +50,9 @@ class CmdlineArgs final { bool isQml() const { return m_qml; } + bool isAwareOfRisk() const { + return m_awareOfRisk; + } #endif bool getSafeMode() const { return m_safeMode; } bool useColors() const { @@ -106,6 +109,7 @@ class CmdlineArgs final { bool m_developer; // Developer Mode #ifdef MIXXX_USE_QML bool m_qml; + bool m_awareOfRisk; #endif bool m_safeMode; bool m_useLegacyVuMeter; diff --git a/src/util/font.cpp b/src/util/font.cpp index cb15ad7ca082..a50ade7ff594 100644 --- a/src/util/font.cpp +++ b/src/util/font.cpp @@ -67,16 +67,16 @@ void FontUtils::initializeFonts(const QString& resourcePath) { return; } - const QList files = fontsDir.entryList( + const QFileInfoList files = fontsDir.entryInfoList( QDir::NoDotAndDotDot | QDir::Files | QDir::Readable); - for (const QString& path : files) { + for (const QFileInfo& file : files) { // Skip text files (e.g. license files). For all others we let Qt tell // us whether the font format is supported since there is no way to // check other than adding. - if (path.endsWith(QStringLiteral(".txt"), Qt::CaseInsensitive)) { + if (file.suffix().toLower() == QStringLiteral("txt")) { continue; } - addFont(path); + addFont(file.canonicalFilePath()); } } diff --git a/src/util/screensaver.cpp b/src/util/screensaver.cpp index 45bee125053c..c403c3c10400 100644 --- a/src/util/screensaver.cpp +++ b/src/util/screensaver.cpp @@ -36,7 +36,8 @@ With the help of the following source codes: # include #endif -#if defined(__LINUX__) || (defined(HAVE_XSCREENSAVER_SUSPEND) && HAVE_XSCREENSAVER_SUSPEND) +#if (defined(__LINUX__) && defined(__X11__)) || \ + (defined(HAVE_XSCREENSAVER_SUSPEND) && HAVE_XSCREENSAVER_SUSPEND) # define None XNone # define Window XWindow # include @@ -146,7 +147,7 @@ void ScreenSaverHelper::uninhibitInternal() s_enabled = false; } -#elif defined(Q_OS_LINUX) +#elif (defined(Q_OS_LINUX) && defined(__X11__)) const char *SCREENSAVERS[][4] = { // org.freedesktop.ScreenSaver is the standard. should work for gnome and kde too, // but I add their specific names too diff --git a/src/util/versionstore.h b/src/util/versionstore.h index 6b6834ab1c5e..e8aabd44aab6 100644 --- a/src/util/versionstore.h +++ b/src/util/versionstore.h @@ -5,6 +5,9 @@ #include namespace VersionStore { +/// Constant to store the future unreleased Mixxx 3.0 +static QString FUTURE_UNSTABLE = QStringLiteral("3.0-unstable"); + /// Returns the current Mixxx version string (e.g. 1.12.0-alpha) QString version(); diff --git a/src/vinylcontrol/defs_vinylcontrol.h b/src/vinylcontrol/defs_vinylcontrol.h index 2c03d2fc3022..500dd34a7ee2 100644 --- a/src/vinylcontrol/defs_vinylcontrol.h +++ b/src/vinylcontrol/defs_vinylcontrol.h @@ -13,6 +13,9 @@ constexpr int VINYL_STATUS_ERROR = 3; #define MIXXX_VINYL_SERATOCD "Serato CD" #define MIXXX_VINYL_TRAKTORSCRATCHSIDEA "Traktor Scratch MK1 Vinyl, Side A" #define MIXXX_VINYL_TRAKTORSCRATCHSIDEB "Traktor Scratch MK1 Vinyl, Side B" +#define MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA "Traktor Scratch MK2 Vinyl, Side A (beta)" +#define MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB "Traktor Scratch MK2 Vinyl, Side B (beta)" +#define MIXXX_VINYL_TRAKTORSCRATCHMK2CD "Traktor Scratch MK2 CD (beta)" #define MIXXX_VINYL_MIXVIBESDVS "MixVibes DVS V2 Vinyl" #define MIXXX_VINYL_MIXVIBES7INCH "MixVibes 7 inch" #define MIXXX_VINYL_PIONEERA "Pioneer RekordBox DVS Control Vinyl, Side A" @@ -23,6 +26,9 @@ constexpr int VINYL_STATUS_ERROR = 3; #define MIXXX_VINYL_SERATOCD_XWAX_NAME "serato_cd" #define MIXXX_VINYL_TRAKTORSCRATCHSIDEA_XWAX_NAME "traktor_a" #define MIXXX_VINYL_TRAKTORSCRATCHSIDEB_XWAX_NAME "traktor_b" +#define MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA_XWAX_NAME "traktor_mk2_a" +#define MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB_XWAX_NAME "traktor_mk2_b" +#define MIXXX_VINYL_TRAKTORSCRATCHMK2CD_XWAX_NAME "traktor_mk2_cd" #define MIXXX_VINYL_MIXVIBESDVS_XWAX_NAME "mixvibes_v2" #define MIXXX_VINYL_MIXVIBES7INCH_XWAX_NAME "mixvibes_7inch" #define MIXXX_VINYL_PIONEERA_XWAX_NAME "pioneer_a" @@ -36,6 +42,9 @@ constexpr int VINYL_STATUS_ERROR = 3; #define MIXXX_VINYL_SERATOCD_LEADIN 0 #define MIXXX_VINYL_TRAKTORSCRATCHSIDEA_LEADIN 10 #define MIXXX_VINYL_TRAKTORSCRATCHSIDEB_LEADIN 10 +#define MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA_LEADIN 10 +#define MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB_LEADIN 10 +#define MIXXX_VINYL_TRAKTORSCRATCHMK2CD_LEADIN 10 #define MIXXX_VINYL_MIXVIBESDVS_LEADIN 0 #define MIXXX_VINYL_MIXVIBES7INCH_LEADIN 0 #define MIXXX_VINYL_PIONEERA_LEADIN 10 diff --git a/src/vinylcontrol/vinylcontrolxwax.cpp b/src/vinylcontrol/vinylcontrolxwax.cpp index 35c507c2eb21..c5cb8e9139ac 100644 --- a/src/vinylcontrol/vinylcontrolxwax.cpp +++ b/src/vinylcontrol/vinylcontrolxwax.cpp @@ -92,6 +92,12 @@ VinylControlXwax::VinylControlXwax(UserSettingsPointer pConfig, const QString& g timecode = MIXXX_VINYL_TRAKTORSCRATCHSIDEA_XWAX_NAME; } else if (strVinylType == MIXXX_VINYL_TRAKTORSCRATCHSIDEB) { timecode = MIXXX_VINYL_TRAKTORSCRATCHSIDEB_XWAX_NAME; + } else if (strVinylType == MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA) { + timecode = MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEA_XWAX_NAME; + } else if (strVinylType == MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB) { + timecode = MIXXX_VINYL_TRAKTORSCRATCHMK2SIDEB_XWAX_NAME; + } else if (strVinylType == MIXXX_VINYL_TRAKTORSCRATCHMK2CD) { + timecode = MIXXX_VINYL_TRAKTORSCRATCHMK2CD_XWAX_NAME; } else if (strVinylType == MIXXX_VINYL_MIXVIBESDVS) { timecode = MIXXX_VINYL_MIXVIBESDVS_XWAX_NAME; } else if (strVinylType == MIXXX_VINYL_MIXVIBES7INCH) { @@ -113,12 +119,22 @@ VinylControlXwax::VinylControlXwax(UserSettingsPointer pConfig, const QString& g m_pSteadyGross = new SteadyPitch(0.5, false); } - timecode_def* tc_def = timecoder_find_definition(timecode); + // Determine the config folder path + std::string lut_dir_string; + const char* lut_dir_path = nullptr; + + if (!getLutDir().isEmpty()) { + lut_dir_string = getLutDir().toStdString(); + lut_dir_path = lut_dir_string.c_str(); + } + + // Pass the config folder path to the timecoder + timecode_def* tc_def = timecoder_find_definition(timecode, lut_dir_path); if (tc_def == nullptr) { qDebug() << "Error finding timecode definition for " << timecode << ", defaulting to" << MIXXX_VINYL_DEFAULT_XWAX_NAME; timecode = MIXXX_VINYL_DEFAULT_XWAX_NAME; - tc_def = timecoder_find_definition(timecode); + tc_def = timecoder_find_definition(timecode, lut_dir_path); } double speed = 1.0; @@ -194,6 +210,18 @@ void VinylControlXwax::freeLUTs() { s_xwaxLUTMutex.unlock(); } +QString VinylControlXwax::getLutDir() { + QDir lutPath(m_pConfig->getSettingsPath().append("/lut/")); + + if (!lutPath.exists()) { + if (!lutPath.mkpath(".")) { + qWarning() << "Failed to create LUT directory at" << lutPath; + return QString{}; + } + } + + return lutPath.absolutePath(); +} bool VinylControlXwax::writeQualityReport(VinylSignalQualityReport* pReport) { if (pReport) { diff --git a/src/vinylcontrol/vinylcontrolxwax.h b/src/vinylcontrol/vinylcontrolxwax.h index cc5460b84d67..24b96e9d06df 100644 --- a/src/vinylcontrol/vinylcontrolxwax.h +++ b/src/vinylcontrol/vinylcontrolxwax.h @@ -29,6 +29,7 @@ class VinylControlXwax : public VinylControl { virtual ~VinylControlXwax(); static void freeLUTs(); + QString getLutDir(); void analyzeSamples(CSAMPLE* pSamples, size_t nFrames); virtual bool writeQualityReport(VinylSignalQualityReport* qualityReportFifo); diff --git a/src/waveform/renderers/allshader/waveformrenderbeat.cpp b/src/waveform/renderers/allshader/waveformrenderbeat.cpp index 3056321e7a68..5d2340da4599 100644 --- a/src/waveform/renderers/allshader/waveformrenderbeat.cpp +++ b/src/waveform/renderers/allshader/waveformrenderbeat.cpp @@ -56,14 +56,20 @@ bool WaveformRenderBeat::preprocessInner() { return false; } +#ifndef __SCENEGRAPH__ int alpha = m_waveformRenderer->getBeatGridAlpha(); if (alpha == 0) { return false; } + m_color.setAlphaF(alpha / 100.0f); +#endif - const float devicePixelRatio = m_waveformRenderer->getDevicePixelRatio(); + if (!m_color.alpha()) { + // Don't render the beatgrid lines is there are fully transparent + return true; + } - m_color.setAlphaF(alpha / 100.0f); + const float devicePixelRatio = m_waveformRenderer->getDevicePixelRatio(); const double trackSamples = m_waveformRenderer->getTrackSamples(); if (trackSamples <= 0.0) { diff --git a/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp b/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp index 478c7629a41b..fa998de33bc5 100644 --- a/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp +++ b/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp @@ -44,6 +44,12 @@ void WaveformRendererEndOfTrack::draw(QPainter* painter, QPaintEvent* event) { bool WaveformRendererEndOfTrack::init() { m_timer.restart(); + if (m_waveformRenderer->getGroup().isEmpty()) { + m_pEndOfTrackControl.reset(); + m_pTimeRemainingControl.reset(); + return true; + } + m_pEndOfTrackControl.reset(new ControlProxy( m_waveformRenderer->getGroup(), "end_of_track")); m_pTimeRemainingControl.reset(new ControlProxy( @@ -70,7 +76,7 @@ void WaveformRendererEndOfTrack::preprocess() { } bool WaveformRendererEndOfTrack::preprocessInner() { - if (!m_pEndOfTrackControl->toBool()) { + if (!m_pEndOfTrackControl || !m_pEndOfTrackControl->toBool()) { return false; } diff --git a/src/waveform/renderers/allshader/waveformrendererfiltered.cpp b/src/waveform/renderers/allshader/waveformrendererfiltered.cpp index efab7bdd60ad..13c14ea5582c 100644 --- a/src/waveform/renderers/allshader/waveformrendererfiltered.cpp +++ b/src/waveform/renderers/allshader/waveformrendererfiltered.cpp @@ -13,8 +13,9 @@ namespace allshader { WaveformRendererFiltered::WaveformRendererFiltered( WaveformWidgetRenderer* waveformWidget, - bool bRgbStacked) - : WaveformRendererSignalBase(waveformWidget), + bool bRgbStacked, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidget, options), m_bRgbStacked(bRgbStacked) { initForRectangles(0); setUsePreprocess(true); @@ -56,7 +57,7 @@ bool WaveformRendererFiltered::preprocessInner() { #ifdef __STEM__ auto stemInfo = pTrack->getStemInfo(); // If this track is a stem track, skip the rendering - if (!stemInfo.isEmpty() && waveform->hasStem()) { + if (!stemInfo.isEmpty() && waveform->hasStem() && !m_ignoreStem) { return false; } #endif diff --git a/src/waveform/renderers/allshader/waveformrendererfiltered.h b/src/waveform/renderers/allshader/waveformrendererfiltered.h index e807d32a83ee..5317358b924b 100644 --- a/src/waveform/renderers/allshader/waveformrendererfiltered.h +++ b/src/waveform/renderers/allshader/waveformrendererfiltered.h @@ -13,7 +13,8 @@ class allshader::WaveformRendererFiltered final public rendergraph::GeometryNode { public: explicit WaveformRendererFiltered(WaveformWidgetRenderer* waveformWidget, - bool rgbStacked); + bool rgbStacked, + ::WaveformRendererSignalBase::Options options); // Pure virtual from WaveformRendererSignalBase, not used void onSetup(const QDomNode& node) override; diff --git a/src/waveform/renderers/allshader/waveformrendererhsv.cpp b/src/waveform/renderers/allshader/waveformrendererhsv.cpp index bbf367407477..db48a960790a 100644 --- a/src/waveform/renderers/allshader/waveformrendererhsv.cpp +++ b/src/waveform/renderers/allshader/waveformrendererhsv.cpp @@ -12,8 +12,9 @@ using namespace rendergraph; namespace allshader { -WaveformRendererHSV::WaveformRendererHSV(WaveformWidgetRenderer* waveformWidget) - : WaveformRendererSignalBase(waveformWidget) { +WaveformRendererHSV::WaveformRendererHSV(WaveformWidgetRenderer* waveformWidget, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidget, options) { initForRectangles(0); setUsePreprocess(true); } @@ -54,7 +55,7 @@ bool WaveformRendererHSV::preprocessInner() { #ifdef __STEM__ auto stemInfo = pTrack->getStemInfo(); // If this track is a stem track, skip the rendering - if (!stemInfo.isEmpty() && waveform->hasStem()) { + if (!stemInfo.isEmpty() && waveform->hasStem() && !m_ignoreStem) { return false; } #endif @@ -80,9 +81,7 @@ bool WaveformRendererHSV::preprocessInner() { getGains(&allGain, false, nullptr, nullptr, nullptr); // Get base color of waveform in the HSV format (s and v isn't use) - float h, s, v; - getHsvF(m_waveformRenderer->getWaveformSignalColors()->getLowColor(), &h, &s, &v); - + float h = m_signalColor_h; const float breadth = static_cast(m_waveformRenderer->getBreadth()); const float halfBreadth = breadth / 2.0f; diff --git a/src/waveform/renderers/allshader/waveformrendererhsv.h b/src/waveform/renderers/allshader/waveformrendererhsv.h index d308a269eaf6..678d0809b193 100644 --- a/src/waveform/renderers/allshader/waveformrendererhsv.h +++ b/src/waveform/renderers/allshader/waveformrendererhsv.h @@ -12,7 +12,8 @@ class allshader::WaveformRendererHSV final : public allshader::WaveformRendererSignalBase, public rendergraph::GeometryNode { public: - explicit WaveformRendererHSV(WaveformWidgetRenderer* waveformWidget); + explicit WaveformRendererHSV(WaveformWidgetRenderer* waveformWidget, + ::WaveformRendererSignalBase::Options options); // Pure virtual from WaveformRendererSignalBase, not used void onSetup(const QDomNode& node) override; diff --git a/src/waveform/renderers/allshader/waveformrendererrgb.cpp b/src/waveform/renderers/allshader/waveformrendererrgb.cpp index 88daccb60cfd..d1c97e575d43 100644 --- a/src/waveform/renderers/allshader/waveformrendererrgb.cpp +++ b/src/waveform/renderers/allshader/waveformrendererrgb.cpp @@ -20,30 +20,14 @@ inline float math_pow2(float x) { WaveformRendererRGB::WaveformRendererRGB(WaveformWidgetRenderer* waveformWidget, ::WaveformRendererAbstract::PositionSource type, - WaveformRendererSignalBase::Options options) - : WaveformRendererSignalBase(waveformWidget), + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidget, options), m_isSlipRenderer(type == ::WaveformRendererAbstract::Slip), m_options(options) { initForRectangles(0); setUsePreprocess(true); } -void WaveformRendererRGB::setAxesColor(const QColor& axesColor) { - getRgbF(axesColor, &m_axesColor_r, &m_axesColor_g, &m_axesColor_b, &m_axesColor_a); -} - -void WaveformRendererRGB::setLowColor(const QColor& lowColor) { - getRgbF(lowColor, &m_rgbLowColor_r, &m_rgbLowColor_g, &m_rgbLowColor_b); -} - -void WaveformRendererRGB::setMidColor(const QColor& midColor) { - getRgbF(midColor, &m_rgbMidColor_r, &m_rgbMidColor_g, &m_rgbMidColor_b); -} - -void WaveformRendererRGB::setHighColor(const QColor& highColor) { - getRgbF(highColor, &m_rgbHighColor_r, &m_rgbHighColor_g, &m_rgbHighColor_b); -} - void WaveformRendererRGB::onSetup(const QDomNode&) { } @@ -83,7 +67,7 @@ bool WaveformRendererRGB::preprocessInner() { #ifdef __STEM__ auto stemInfo = pTrack->getStemInfo(); // If this track is a stem track, skip the rendering - if (!stemInfo.isEmpty() && waveform->hasStem()) { + if (!stemInfo.isEmpty() && waveform->hasStem() && !m_ignoreStem) { return false; } #endif @@ -115,7 +99,7 @@ bool WaveformRendererRGB::preprocessInner() { const float heightFactorAbs = allGain * halfBreadth / m_maxValue; const float heightFactor[2] = {-heightFactorAbs, heightFactorAbs}; - const bool splitLeftRight = m_options & WaveformRendererSignalBase::Option::SplitStereoSignal; + const bool splitLeftRight = m_options & ::WaveformRendererSignalBase::Option::SplitStereoSignal; const float low_r = static_cast(m_rgbLowColor_r); const float mid_r = static_cast(m_rgbMidColor_r); diff --git a/src/waveform/renderers/allshader/waveformrendererrgb.h b/src/waveform/renderers/allshader/waveformrendererrgb.h index 7451f65c1254..132c86b71916 100644 --- a/src/waveform/renderers/allshader/waveformrendererrgb.h +++ b/src/waveform/renderers/allshader/waveformrendererrgb.h @@ -15,7 +15,8 @@ class allshader::WaveformRendererRGB final explicit WaveformRendererRGB(WaveformWidgetRenderer* waveformWidget, ::WaveformRendererAbstract::PositionSource type = ::WaveformRendererAbstract::Play, - WaveformRendererSignalBase::Options options = WaveformRendererSignalBase::Option::None); + ::WaveformRendererSignalBase::Options options = + ::WaveformRendererSignalBase::Option::None); // Pure virtual from WaveformRendererSignalBase, not used void onSetup(const QDomNode& node) override; @@ -27,15 +28,9 @@ class allshader::WaveformRendererRGB final // Virtuals for rendergraph::Node void preprocess() override; - public slots: - void setAxesColor(const QColor& axesColor); - void setLowColor(const QColor& lowColor); - void setMidColor(const QColor& midColor); - void setHighColor(const QColor& highColor); - private: bool m_isSlipRenderer; - WaveformRendererSignalBase::Options m_options; + ::WaveformRendererSignalBase::Options m_options; bool preprocessInner(); diff --git a/src/waveform/renderers/allshader/waveformrenderersignalbase.cpp b/src/waveform/renderers/allshader/waveformrenderersignalbase.cpp index ea906dba69ea..1e48cdbc0edf 100644 --- a/src/waveform/renderers/allshader/waveformrenderersignalbase.cpp +++ b/src/waveform/renderers/allshader/waveformrenderersignalbase.cpp @@ -1,14 +1,41 @@ #include "waveform/renderers/allshader/waveformrenderersignalbase.h" +#include "util/colorcomponents.h" + namespace allshader { WaveformRendererSignalBase::WaveformRendererSignalBase( - WaveformWidgetRenderer* waveformWidget) - : ::WaveformRendererSignalBase(waveformWidget) { + WaveformWidgetRenderer* waveformWidget, ::WaveformRendererSignalBase::Options options) + : ::WaveformRendererSignalBase(waveformWidget, options), + m_ignoreStem(false) { } void WaveformRendererSignalBase::draw(QPainter*, QPaintEvent*) { DEBUG_ASSERT(false); } +void WaveformRendererSignalBase::setAxesColor(const QColor& axesColor) { + getRgbF(axesColor, &m_axesColor_r, &m_axesColor_g, &m_axesColor_b, &m_axesColor_a); +} + +void WaveformRendererSignalBase::setColor(const QColor& color) { + getRgbF(color, &m_signalColor_r, &m_signalColor_g, &m_signalColor_b); + getHsvF(color, &m_signalColor_h, &m_signalColor_s, &m_signalColor_v); +} + +void WaveformRendererSignalBase::setLowColor(const QColor& lowColor) { + getRgbF(lowColor, &m_rgbLowColor_r, &m_rgbLowColor_g, &m_rgbLowColor_b); + getRgbF(lowColor, &m_lowColor_r, &m_lowColor_g, &m_lowColor_b); +} + +void WaveformRendererSignalBase::setMidColor(const QColor& midColor) { + getRgbF(midColor, &m_rgbMidColor_r, &m_rgbMidColor_g, &m_rgbMidColor_b); + getRgbF(midColor, &m_midColor_r, &m_midColor_g, &m_midColor_b); +} + +void WaveformRendererSignalBase::setHighColor(const QColor& highColor) { + getRgbF(highColor, &m_rgbHighColor_r, &m_rgbHighColor_g, &m_rgbHighColor_b); + getRgbF(highColor, &m_highColor_r, &m_highColor_g, &m_highColor_b); +} + } // namespace allshader diff --git a/src/waveform/renderers/allshader/waveformrenderersignalbase.h b/src/waveform/renderers/allshader/waveformrenderersignalbase.h index 1299fe04fa86..a7214f6969b9 100644 --- a/src/waveform/renderers/allshader/waveformrenderersignalbase.h +++ b/src/waveform/renderers/allshader/waveformrenderersignalbase.h @@ -15,23 +15,30 @@ class WaveformRendererSignalBase; class allshader::WaveformRendererSignalBase : public ::WaveformRendererSignalBase { public: - enum class Option { - None = 0b0, - SplitStereoSignal = 0b1, - HighDetail = 0b10, - AllOptionsCombined = SplitStereoSignal | HighDetail, - }; - Q_DECLARE_FLAGS(Options, Option) - void draw(QPainter* painter, QPaintEvent* event) override final; static constexpr float m_maxValue{static_cast(std::numeric_limits::max())}; - explicit WaveformRendererSignalBase(WaveformWidgetRenderer* waveformWidget); + explicit WaveformRendererSignalBase(WaveformWidgetRenderer* waveformWidget, + ::WaveformRendererSignalBase::Options options); virtual bool supportsSlip() const { return false; } + public slots: + void setAxesColor(const QColor& axesColor); + void setColor(const QColor& lowColor); + void setLowColor(const QColor& lowColor); + void setMidColor(const QColor& midColor); + void setHighColor(const QColor& highColor); + + void setIgnoreStem(bool value) { + m_ignoreStem = value; + } + + protected: + bool m_ignoreStem; + DISALLOW_COPY_AND_ASSIGN(WaveformRendererSignalBase); }; diff --git a/src/waveform/renderers/allshader/waveformrenderersimple.cpp b/src/waveform/renderers/allshader/waveformrenderersimple.cpp index 2626e80e4311..3d50774018a7 100644 --- a/src/waveform/renderers/allshader/waveformrenderersimple.cpp +++ b/src/waveform/renderers/allshader/waveformrenderersimple.cpp @@ -12,8 +12,8 @@ using namespace rendergraph; namespace allshader { WaveformRendererSimple::WaveformRendererSimple( - WaveformWidgetRenderer* waveformWidget) - : WaveformRendererSignalBase(waveformWidget) { + WaveformWidgetRenderer* waveformWidget, ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidget, options) { initForRectangles(0); setUsePreprocess(true); } @@ -54,7 +54,7 @@ bool WaveformRendererSimple::preprocessInner() { #ifdef __STEM__ auto stemInfo = pTrack->getStemInfo(); // If this track is a stem track, skip the rendering - if (!stemInfo.isEmpty() && waveform->hasStem()) { + if (!stemInfo.isEmpty() && waveform->hasStem() && !m_ignoreStem) { return false; } #endif @@ -82,8 +82,7 @@ bool WaveformRendererSimple::preprocessInner() { // Per-band gain from the EQ knobs. float allGain{1.0}; - float bandGain[3] = {1.0, 1.0, 1.0}; - getGains(&allGain, false, &bandGain[0], &bandGain[1], &bandGain[2]); + getGains(&allGain, false, nullptr, nullptr, nullptr); const float breadth = static_cast(m_waveformRenderer->getBreadth()); const float halfBreadth = breadth / 2.0f; diff --git a/src/waveform/renderers/allshader/waveformrenderersimple.h b/src/waveform/renderers/allshader/waveformrenderersimple.h index 10c9418186b0..91bcf4303b0c 100644 --- a/src/waveform/renderers/allshader/waveformrenderersimple.h +++ b/src/waveform/renderers/allshader/waveformrenderersimple.h @@ -12,7 +12,8 @@ class allshader::WaveformRendererSimple final : public allshader::WaveformRendererSignalBase, public rendergraph::GeometryNode { public: - explicit WaveformRendererSimple(WaveformWidgetRenderer* waveformWidget); + explicit WaveformRendererSimple(WaveformWidgetRenderer* waveformWidget, + ::WaveformRendererSignalBase::Options options); // Pure virtual from WaveformRendererSignalBase, not used void onSetup(const QDomNode& node) override; diff --git a/src/waveform/renderers/allshader/waveformrendererslipmode.cpp b/src/waveform/renderers/allshader/waveformrendererslipmode.cpp index af122d2d5bf9..08a37653e65c 100644 --- a/src/waveform/renderers/allshader/waveformrendererslipmode.cpp +++ b/src/waveform/renderers/allshader/waveformrendererslipmode.cpp @@ -44,6 +44,11 @@ void WaveformRendererSlipMode::draw(QPainter* painter, QPaintEvent* event) { bool WaveformRendererSlipMode::init() { m_timer.restart(); + if (m_waveformRenderer->getGroup().isEmpty()) { + m_pSlipModeControl.reset(); + return true; + } + m_pSlipModeControl.reset(new ControlProxy( m_waveformRenderer->getGroup(), QStringLiteral("slip_enabled"))); @@ -79,7 +84,8 @@ void WaveformRendererSlipMode::preprocess() { } bool WaveformRendererSlipMode::preprocessInner() { - if (!m_pSlipModeControl->toBool() || !m_waveformRenderer->isSlipActive()) { + if (!m_pSlipModeControl || !m_pSlipModeControl->toBool() || + !m_waveformRenderer->isSlipActive()) { return false; } diff --git a/src/waveform/renderers/allshader/waveformrendererstem.cpp b/src/waveform/renderers/allshader/waveformrendererstem.cpp index 014c72f6676b..47b90c103e33 100644 --- a/src/waveform/renderers/allshader/waveformrendererstem.cpp +++ b/src/waveform/renderers/allshader/waveformrendererstem.cpp @@ -33,8 +33,9 @@ namespace allshader { WaveformRendererStem::WaveformRendererStem( WaveformWidgetRenderer* waveformWidget, - ::WaveformRendererAbstract::PositionSource type) - : WaveformRendererSignalBase(waveformWidget), + ::WaveformRendererAbstract::PositionSource type, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidget, options), m_isSlipRenderer(type == ::WaveformRendererAbstract::Slip), m_splitStemTracks(false), m_outlineOpacity(0.15f), @@ -47,6 +48,11 @@ void WaveformRendererStem::onSetup(const QDomNode&) { } bool WaveformRendererStem::init() { + m_pStemGain.clear(); + m_pStemMute.clear(); + if (m_waveformRenderer->getGroup().isEmpty()) { + return true; + } for (int stemIdx = 0; stemIdx < mixxx::kMaxSupportedStems; stemIdx++) { QString stemGroup = EngineDeck::getGroupForStem(m_waveformRenderer->getGroup(), stemIdx); m_pStemGain.emplace_back( @@ -219,7 +225,7 @@ bool WaveformRendererStem::preprocessInner() { } // Cast to float - float max = static_cast(u8max); + float max = static_cast(u8max) * allGain; // Apply the gains if (layerIdx) { diff --git a/src/waveform/renderers/allshader/waveformrendererstem.h b/src/waveform/renderers/allshader/waveformrendererstem.h index d9ad7b873ca6..bac42434a718 100644 --- a/src/waveform/renderers/allshader/waveformrendererstem.h +++ b/src/waveform/renderers/allshader/waveformrendererstem.h @@ -19,7 +19,9 @@ class allshader::WaveformRendererStem final public: explicit WaveformRendererStem(WaveformWidgetRenderer* waveformWidget, ::WaveformRendererAbstract::PositionSource type = - ::WaveformRendererAbstract::Play); + ::WaveformRendererAbstract::Play, + ::WaveformRendererSignalBase::Options options = + ::WaveformRendererSignalBase::Option::None); // Pure virtual from WaveformRendererSignalBase, not used void onSetup(const QDomNode& node) override; diff --git a/src/waveform/renderers/allshader/waveformrenderertextured.cpp b/src/waveform/renderers/allshader/waveformrenderertextured.cpp index 6245204825f8..f5ee356b958d 100644 --- a/src/waveform/renderers/allshader/waveformrenderertextured.cpp +++ b/src/waveform/renderers/allshader/waveformrenderertextured.cpp @@ -31,8 +31,8 @@ WaveformRendererTextured::WaveformRendererTextured( WaveformWidgetRenderer* waveformWidget, ::WaveformWidgetType::Type t, ::WaveformRendererAbstract::PositionSource type, - WaveformRendererSignalBase::Options options) - : WaveformRendererSignalBase(waveformWidget), + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidget, options), m_unitQuadListId(-1), m_textureId(0), m_textureRenderedWaveformCompletion(0), @@ -380,7 +380,7 @@ void WaveformRendererTextured::paintGL() { if (m_type == ::WaveformWidgetType::RGB) { m_frameShaderProgram->setUniformValue("splitStereoSignal", - m_options & WaveformRendererSignalBase::Option::SplitStereoSignal); + m_options & ::WaveformRendererSignalBase::Option::SplitStereoSignal); } m_frameShaderProgram->setUniformValue("axesColor", diff --git a/src/waveform/renderers/allshader/waveformrenderertextured.h b/src/waveform/renderers/allshader/waveformrenderertextured.h index 3769ae6d09c8..600119587567 100644 --- a/src/waveform/renderers/allshader/waveformrenderertextured.h +++ b/src/waveform/renderers/allshader/waveformrenderertextured.h @@ -24,8 +24,8 @@ class allshader::WaveformRendererTextured final : public allshader::WaveformRend WaveformWidgetType::Type t, ::WaveformRendererAbstract::PositionSource type = ::WaveformRendererAbstract::Play, - WaveformRendererSignalBase::Options options = - WaveformRendererSignalBase::Option::None); + ::WaveformRendererSignalBase::Options options = + ::WaveformRendererSignalBase::Option::None); ~WaveformRendererTextured() override; // override ::WaveformRendererSignalBase @@ -72,7 +72,7 @@ class allshader::WaveformRendererTextured final : public allshader::WaveformRend // shaders bool m_isSlipRenderer; - WaveformRendererSignalBase::Options m_options; + ::WaveformRendererSignalBase::Options m_options; bool m_shadersValid; WaveformWidgetType::Type m_type; const QString m_pFragShader; diff --git a/src/waveform/renderers/allshader/waveformrendermark.cpp b/src/waveform/renderers/allshader/waveformrendermark.cpp index 7bd519498568..3ef2175efe42 100644 --- a/src/waveform/renderers/allshader/waveformrendermark.cpp +++ b/src/waveform/renderers/allshader/waveformrendermark.cpp @@ -12,6 +12,7 @@ #include "rendergraph/vertexupdaters/rgbavertexupdater.h" #include "rendergraph/vertexupdaters/texturedvertexupdater.h" #include "track/track.h" +#include "util/assert.h" #include "util/colorcomponents.h" #include "util/roundtopixel.h" #include "waveform/renderers/allshader/digitsrenderer.h" @@ -34,9 +35,14 @@ namespace { class WaveformMarkNode : public rendergraph::GeometryNode { public: WaveformMark* m_pOwner{}; + bool m_isEndMark{false}; - WaveformMarkNode(WaveformMark* pOwner, rendergraph::Context* pContext, const QImage& image) - : m_pOwner(pOwner) { + WaveformMarkNode(WaveformMark* pOwner, + bool isEndMark, + rendergraph::Context* pContext, + const QImage& image) + : m_pOwner(pOwner), + m_isEndMark(isEndMark) { initForRectangles(1); updateTexture(pContext, image); } @@ -68,6 +74,10 @@ class WaveformMarkNode : public rendergraph::GeometryNode { return m_textureHeight; } + void setAlpha(float alpha) { + material().setUniform(1, alpha); + } + public: float m_textureWidth{}; float m_textureHeight{}; @@ -76,10 +86,11 @@ class WaveformMarkNode : public rendergraph::GeometryNode { class WaveformMarkNodeGraphics : public WaveformMark::Graphics { public: WaveformMarkNodeGraphics(WaveformMark* pOwner, + bool isEndMark, rendergraph::Context* pContext, const QImage& image) : m_pNode(std::make_unique( - pOwner, pContext, image)) { + pOwner, isEndMark, pContext, image)) { } void updateTexture(rendergraph::Context* pContext, const QImage& image) { waveformMarkNode()->updateTexture(pContext, image); @@ -93,6 +104,9 @@ class WaveformMarkNodeGraphics : public WaveformMark::Graphics { float textureHeight() const { return waveformMarkNode()->textureHeight(); } + void setAlpha(float alpha) { + waveformMarkNode()->setAlpha(alpha); + } void attachNode(std::unique_ptr pNode) { DEBUG_ASSERT(!m_pNode); m_pNode = std::move(pNode); @@ -176,7 +190,7 @@ allshader::WaveformRenderMark::WaveformRenderMark( m_pPlayPosNode->initForRectangles(1); appendChildNode(std::move(pNode)); } - +#ifndef __SCENEGRAPH__ auto* pWaveformWidgetFactory = WaveformWidgetFactory::instance(); connect(pWaveformWidgetFactory, &WaveformWidgetFactory::untilMarkShowBeatsChanged, @@ -198,6 +212,7 @@ allshader::WaveformRenderMark::WaveformRenderMark( &WaveformWidgetFactory::untilMarkTextHeightLimitChanged, this, &WaveformRenderMark::setUntilMarkTextHeightLimit); +#endif } void allshader::WaveformRenderMark::draw(QPainter*, QPaintEvent*) { @@ -224,8 +239,12 @@ void allshader::WaveformRenderMark::setup(const QDomNode& node, const SkinContex } bool allshader::WaveformRenderMark::init() { - m_pTimeRemainingControl = std::make_unique( - m_waveformRenderer->getGroup(), "time_remaining"); + if (!m_waveformRenderer->getGroup().isEmpty()) { + m_pTimeRemainingControl = std::make_unique( + m_waveformRenderer->getGroup(), "time_remaining"); + } else { + m_pTimeRemainingControl.reset(); + } ::WaveformRenderMarkBase::init(); return true; } @@ -277,8 +296,10 @@ void allshader::WaveformRenderMark::update() { WaveformMarkNode* pWaveformMarkNode = static_cast(pNode.get()); // Determine its WaveformMark auto* pMark = pWaveformMarkNode->m_pOwner; - auto* pGraphics = static_cast(pMark->m_pGraphics.get()); - // Store the node with the WaveformMark + auto* pGraphics = static_cast( + pWaveformMarkNode->m_isEndMark ? pMark->m_pEndGraphics.get() + : pMark->m_pGraphics.get()); + // Store the nodes with the WaveformMark pGraphics->attachNode(std::move(pNode)); } @@ -321,13 +342,19 @@ void allshader::WaveformRenderMark::update() { auto* pMarkGraphics = pMark->m_pGraphics.get(); auto* pMarkNodeGraphics = static_cast(pMarkGraphics); - if (!pMarkGraphics) { // is this even possible? + if (!pMarkNodeGraphics) { // is this even possible? continue; } const float currentMarkPos = static_cast( m_waveformRenderer->transformSamplePositionInRendererWorld( samplePosition, positionType)); + auto* pMarkEndGraphics = pMark->m_pEndGraphics.get(); + auto* pMarkEndNodeGraphics = static_cast(pMarkEndGraphics); + VERIFY_OR_DEBUG_ASSERT(pMarkEndNodeGraphics) { + continue; + } + if (pMark->isShowUntilNext() && samplePosition >= playPosition + 1.0 && samplePosition < nextMarkPosition) { @@ -357,30 +384,47 @@ void allshader::WaveformRenderMark::update() { // Check if the range needs to be displayed. if (samplePosition != sampleEndPosition && sampleEndPosition != Cue::kNoPosition) { - DEBUG_ASSERT(samplePosition < sampleEndPosition); const float currentMarkEndPos = static_cast( m_waveformRenderer->transformSamplePositionInRendererWorld( sampleEndPosition, positionType)); + if (visible || currentMarkEndPos > 0.f) { - QColor color = pMark->fillColor(); - color.setAlphaF(0.4f); - - // Reuse, or create new when needed - if (!pRangeChild) { - auto pNode = std::make_unique(); - pNode->initForRectangles(2); - pRangeChild = pNode.get(); - m_pRangeNodesParent->appendChildNode(std::move(pNode)); + if (pMark->isLoop()) { + // Reuse, or create new when needed + if (!pRangeChild) { + auto pNode = std::make_unique(); + pNode->initForRectangles(2); + pRangeChild = pNode.get(); + m_pRangeNodesParent->appendChildNode(std::move(pNode)); + } + + QColor color = pMark->fillColor(); + color.setAlphaF(0.4f); + updateRangeNode(pRangeChild, + QRectF(QPointF(roundToPixel(currentMarkPos), + !m_isSlipRenderer && slipActive + ? roundToPixel( + m_waveformRenderer + ->getBreadth() / + 2) + : 0.f), + QPointF(roundToPixel(currentMarkEndPos), + roundToPixel(m_waveformRenderer + ->getBreadth()))), + color); + pRangeChild = static_cast(pRangeChild->nextSibling()); + } else { + pMarkEndNodeGraphics->update( + roundToPixel(currentMarkEndPos - markWidth / 2.f), + !m_isSlipRenderer && slipActive + ? roundToPixel(m_waveformRenderer->getBreadth() / 2) + : 0, + devicePixelRatio); + pMarkEndNodeGraphics->setAlpha(static_cast(pMark->opacity())); + // transfer back to m_pMarkNodesParent children, for rendering + m_pMarkNodesParent->appendChildNode(pMarkEndNodeGraphics->detachNode()); } - - updateRangeNode(pRangeChild, - QRectF(QPointF(roundToPixel(currentMarkPos), 0.f), - QPointF(roundToPixel(currentMarkEndPos), - roundToPixel(m_waveformRenderer->getBreadth()))), - color); - visible = true; - pRangeChild = static_cast(pRangeChild->nextSibling()); } } @@ -559,6 +603,7 @@ void allshader::WaveformRenderMark::updateMarkImage(WaveformMarkPointer pMark) { if (!pMark->m_pGraphics) { pMark->m_pGraphics = std::make_unique(pMark.get(), + false, m_waveformRenderer->getContext(), pMark->generateImage( m_waveformRenderer->getDevicePixelRatio())); @@ -569,6 +614,21 @@ void allshader::WaveformRenderMark::updateMarkImage(WaveformMarkPointer pMark) { m_waveformRenderer->getDevicePixelRatio())); } } +void allshader::WaveformRenderMark::updateEndMarkImage(WaveformMarkPointer pMark) { + if (!pMark->m_pEndGraphics) { + pMark->m_pEndGraphics = + std::make_unique(pMark.get(), + true, + m_waveformRenderer->getContext(), + pMark->generateEndImage( + m_waveformRenderer->getDevicePixelRatio())); + } else { + auto* pGraphics = static_cast(pMark->m_pEndGraphics.get()); + pGraphics->updateTexture(m_waveformRenderer->getContext(), + pMark->generateEndImage( + m_waveformRenderer->getDevicePixelRatio())); + } +} void allshader::WaveformRenderMark::updateUntilMark( double playPosition, double nextMarkPosition) { @@ -585,7 +645,7 @@ void allshader::WaveformRenderMark::updateUntilMark( } const double endPosition = m_waveformRenderer->getTrackSamples(); - const double remainingTime = m_pTimeRemainingControl->get(); + const double remainingTime = m_pTimeRemainingControl ? m_pTimeRemainingControl->get() : 0; mixxx::BeatsPointer trackBeats = trackInfo->getBeats(); if (!trackBeats) { diff --git a/src/waveform/renderers/allshader/waveformrendermark.h b/src/waveform/renderers/allshader/waveformrendermark.h index ab583f9d76be..cf9d41c22bc2 100644 --- a/src/waveform/renderers/allshader/waveformrendermark.h +++ b/src/waveform/renderers/allshader/waveformrendermark.h @@ -62,6 +62,7 @@ class allshader::WaveformRenderMark : public ::WaveformRenderMarkBase, private: void updateMarkImage(WaveformMarkPointer pMark) override; + void updateEndMarkImage(WaveformMarkPointer pMark) override; void updatePlayPosMarkTexture(rendergraph::Context* pContext); diff --git a/src/waveform/renderers/deprecated/glwaveformrenderersignal.h b/src/waveform/renderers/deprecated/glwaveformrenderersignal.h index 76532a120145..57539bc91d27 100644 --- a/src/waveform/renderers/deprecated/glwaveformrenderersignal.h +++ b/src/waveform/renderers/deprecated/glwaveformrenderersignal.h @@ -12,8 +12,9 @@ /// QPainter API which Qt translates to OpenGL under the hood. class GLWaveformRendererSignal : public WaveformRendererSignalBase, public GLWaveformRenderer { public: - GLWaveformRendererSignal(WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { + GLWaveformRendererSignal(WaveformWidgetRenderer* waveformWidgetRenderer, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidgetRenderer, options) { } }; diff --git a/src/waveform/renderers/glvsynctestrenderer.cpp b/src/waveform/renderers/glvsynctestrenderer.cpp index a1d1cb7da275..b93f623092b0 100644 --- a/src/waveform/renderers/glvsynctestrenderer.cpp +++ b/src/waveform/renderers/glvsynctestrenderer.cpp @@ -7,7 +7,8 @@ GLVSyncTestRenderer::GLVSyncTestRenderer( WaveformWidgetRenderer* waveformWidgetRenderer) - : GLWaveformRendererSignal(waveformWidgetRenderer), + : GLWaveformRendererSignal(waveformWidgetRenderer, + WaveformRendererSignalBase::Option::None), m_drawcount(0) { } diff --git a/src/waveform/renderers/qtvsynctestrenderer.cpp b/src/waveform/renderers/qtvsynctestrenderer.cpp index d6b84441f598..1ca4b6c63ff0 100644 --- a/src/waveform/renderers/qtvsynctestrenderer.cpp +++ b/src/waveform/renderers/qtvsynctestrenderer.cpp @@ -9,8 +9,9 @@ QtVSyncTestRenderer::QtVSyncTestRenderer( WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer), - m_drawcount(0) { + : WaveformRendererSignalBase(waveformWidgetRenderer, + ::WaveformRendererSignalBase::Option::None), + m_drawcount(0) { } QtVSyncTestRenderer::~QtVSyncTestRenderer() { diff --git a/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp b/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp index e58ebd5a54ad..1fc93604401f 100644 --- a/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp +++ b/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp @@ -12,8 +12,9 @@ #include QtWaveformRendererFilteredSignal::QtWaveformRendererFilteredSignal( - WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { + WaveformWidgetRenderer* waveformWidgetRenderer, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidgetRenderer, options) { } QtWaveformRendererFilteredSignal::~QtWaveformRendererFilteredSignal() { diff --git a/src/waveform/renderers/qtwaveformrendererfilteredsignal.h b/src/waveform/renderers/qtwaveformrendererfilteredsignal.h index c7fed5db4b4d..945bd2af04ed 100644 --- a/src/waveform/renderers/qtwaveformrendererfilteredsignal.h +++ b/src/waveform/renderers/qtwaveformrendererfilteredsignal.h @@ -9,7 +9,9 @@ class ControlObject; class QtWaveformRendererFilteredSignal : public WaveformRendererSignalBase { public: - explicit QtWaveformRendererFilteredSignal(WaveformWidgetRenderer* waveformWidgetRenderer); + explicit QtWaveformRendererFilteredSignal( + WaveformWidgetRenderer* waveformWidgetRenderer, + ::WaveformRendererSignalBase::Options options); virtual ~QtWaveformRendererFilteredSignal(); virtual void onSetup(const QDomNode &node); diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index ae4e09e41593..c114f4d74390 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -2,6 +2,8 @@ #include #include +#include +#include #include #include "skin/legacy/skincontext.h" @@ -93,7 +95,8 @@ bool isShowUntilNextPositionControl(const QString& positionControl) { } // anonymous namespace -WaveformMark::WaveformMark(const QString& group, +WaveformMark::WaveformMark( + const QString& group, QString positionControl, const QString& visibilityControl, const QString& textColor, @@ -104,37 +107,50 @@ WaveformMark::WaveformMark(const QString& group, QColor color, int priority, int hotCue, - const WaveformSignalColors& signalColors) + const WaveformSignalColors& signalColors, + const QString& endPixmapPath, + const QString& endIconPath, + float disabledOpacity, + float enabledOpacity) : m_textColor(textColor), m_pixmapPath(pixmapPath), + m_endPixmapPath(endPixmapPath), m_iconPath(iconPath), + m_endIconPath(endIconPath), + m_enabledOpacity(enabledOpacity), + m_disabledOpacity(disabledOpacity), m_linePosition{}, m_breadth{}, m_level{}, + m_typeCO{}, + m_statusCO{}, m_iPriority(priority), m_iHotCue(hotCue), m_showUntilNext{} { QString endPositionControl; QString typeControl; + QString statusControl; if (hotCue != Cue::kNoHotCue) { QString hotcueNumber = QString::number(hotCue + 1); positionControl = QStringLiteral("hotcue_%1_position").arg(hotcueNumber); endPositionControl = QStringLiteral("hotcue_%1_endposition").arg(hotcueNumber); + statusControl = QStringLiteral("hotcue_%1_status").arg(hotcueNumber); typeControl = QStringLiteral("hotcue_%1_type").arg(hotcueNumber); m_showUntilNext = true; } else { m_showUntilNext = isShowUntilNextPositionControl(positionControl); } - if (!positionControl.isEmpty()) { + if (!positionControl.isEmpty() && !group.isEmpty()) { m_pPositionCO = std::make_unique(group, positionControl); } - if (!endPositionControl.isEmpty()) { + if (!endPositionControl.isEmpty() && !group.isEmpty()) { m_pEndPositionCO = std::make_unique(group, endPositionControl); - m_pTypeCO = std::make_unique(group, typeControl); + m_statusCO = std::make_unique(group, statusControl); + m_typeCO = std::make_unique(group, typeControl); } - if (!visibilityControl.isEmpty()) { + if (!visibilityControl.isEmpty() && !group.isEmpty()) { ConfigKey key = ConfigKey::parseCommaSeparated(visibilityControl); m_pVisibleCO = std::make_unique(key); } @@ -179,10 +195,12 @@ WaveformMark::WaveformMark(const QString& group, QString positionControl; QString endPositionControl; QString typeControl; + QString statusControl; if (hotCue != Cue::kNoHotCue) { positionControl = "hotcue_" + QString::number(hotCue + 1) + "_position"; endPositionControl = "hotcue_" + QString::number(hotCue + 1) + "_endposition"; typeControl = "hotcue_" + QString::number(hotCue + 1) + "_type"; + statusControl = "hotcue_" + QString::number(hotCue + 1) + "_status"; m_showUntilNext = true; } else { positionControl = context.selectString(node, "Control"); @@ -194,7 +212,8 @@ WaveformMark::WaveformMark(const QString& group, } if (!endPositionControl.isEmpty()) { m_pEndPositionCO = std::make_unique(group, endPositionControl); - m_pTypeCO = std::make_unique(group, typeControl); + m_typeCO = std::make_unique(group, typeControl); + m_statusCO = std::make_unique(group, statusControl); } QString visibilityControl = context.selectString(node, "VisibilityControl"); @@ -234,10 +253,23 @@ WaveformMark::WaveformMark(const QString& group, m_pixmapPath = context.makeSkinPath(m_pixmapPath); } + m_endPixmapPath = context.selectString(node, "EndPixmap"); + if (!m_endPixmapPath.isEmpty()) { + m_endPixmapPath = context.makeSkinPath(m_endPixmapPath); + } + m_iconPath = context.selectString(node, "Icon"); if (!m_iconPath.isEmpty()) { m_iconPath = context.makeSkinPath(m_iconPath); } + + m_endIconPath = context.selectString(node, "EndIcon"); + if (!m_endIconPath.isEmpty()) { + m_endIconPath = context.makeSkinPath(m_endIconPath); + } + + m_enabledOpacity = context.selectDouble(node, "EnabledOpacity", 1); + m_disabledOpacity = context.selectDouble(node, "DisabledOpacity", 0.5); } WaveformMark::~WaveformMark() = default; @@ -406,9 +438,11 @@ class MarkerGeometry { QSizeF m_imageSize; }; -QImage WaveformMark::generateImage(float devicePixelRatio) { - DEBUG_ASSERT(needsImageUpdate()); - +QImage WaveformMark::performImageGeneration(float devicePixelRatio, + const QString& pixmapPath, + const QString& text, + WaveformMarkLabel* labelMark, + const QString& iconPath) { if (m_breadth == 0.0f) { return {}; } @@ -416,8 +450,8 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { // Load the pixmap from file. // If that succeeds loading the text and stroke is skipped. - if (!m_pixmapPath.isEmpty()) { - QString path = m_pixmapPath; + if (!pixmapPath.isEmpty()) { + QString path = pixmapPath; // Use devicePixelRatio to properly scale the image QImage image = *WImageStore::getImage(path, devicePixelRatio); // If loading the image didn't fail, then we're done. Otherwise fall @@ -448,24 +482,37 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { return image; } } + const bool useIcon = iconPath != ""; - QString label = m_text; - - // Determine mark text. - if (getHotCue() >= 0) { - if (!label.isEmpty()) { - label.prepend(": "); + // Determine drawing geometries + const MarkerGeometry markerGeometry{text, useIcon, m_align, m_breadth, m_level}; + + float linePos; + if (labelMark) { + labelMark->setAreaRect(markerGeometry.labelRect()); + + const Qt::Alignment alignH = m_align & Qt::AlignHorizontal_Mask; + const float imgw = static_cast(markerGeometry.imageSize().width()); + switch (alignH) { + case Qt::AlignHCenter: + m_linePosition = imgw / 2.f; + m_offset = -(imgw - 1.f) / 2.f; + break; + case Qt::AlignLeft: + m_linePosition = imgw - 1.5f; + m_offset = -imgw + 2.f; + break; + case Qt::AlignRight: + default: + m_linePosition = 1.5f; + m_offset = -1.f; + break; } - label.prepend(QString::number(getHotCue() + 1)); + linePos = m_linePosition; + } else { + linePos = static_cast(markerGeometry.imageSize().width()) / 2.f; } - const bool useIcon = m_iconPath != ""; - - // Determine drawing geometries - const MarkerGeometry markerGeometry{label, useIcon, m_align, m_breadth, m_level}; - - m_label.setAreaRect(markerGeometry.labelRect()); - const QSize size{markerGeometry.getImageSize(devicePixelRatio)}; if (size.width() <= 0 || size.height() <= 0) { @@ -489,26 +536,7 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { painter.setWorldMatrixEnabled(false); - const Qt::Alignment alignH = m_align & Qt::AlignHorizontal_Mask; - const float imgw = static_cast(markerGeometry.imageSize().width()); - switch (alignH) { - case Qt::AlignHCenter: - m_linePosition = imgw / 2.f; - m_offset = -(imgw - 1.f) / 2.f; - break; - case Qt::AlignLeft: - m_linePosition = imgw - 1.5f; - m_offset = -imgw + 2.f; - break; - case Qt::AlignRight: - default: - m_linePosition = 1.5f; - m_offset = -1.f; - break; - } - // Note: linePos has to be at integer + 0.5 to draw correctly - const float linePos = m_linePosition; [[maybe_unused]] const float epsilon = 1e-6f; DEBUG_ASSERT(std::abs(linePos - std::floor(linePos) - 0.5) < epsilon); @@ -526,7 +554,7 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { linePos + 1.f, markerGeometry.imageSize().height())); - if (useIcon || label.length() != 0) { + if (useIcon || text.length() != 0) { painter.setPen(borderColor()); // Draw the label rounded rect with border @@ -535,7 +563,7 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { painter.fillPath(path, fillColor()); painter.drawPath(path); - // Center m_contentRect.width() and m_contentRect.height() inside m_labelRect + // Center m_contentRect.width() and m_contentRect.height() inside labelRectMarl // and apply the offset x,y so the text ends up in the centered width,height. QPointF pos(markerGeometry.labelRect().x() + (markerGeometry.labelRect().width() - @@ -549,7 +577,7 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { markerGeometry.contentRect().y()); if (useIcon) { - QSvgRenderer svgRenderer(m_iconPath); + QSvgRenderer svgRenderer(iconPath); svgRenderer.render(&painter, QRectF(pos, markerGeometry.contentRect().size())); } else { // Draw the text @@ -557,7 +585,7 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { painter.setPen(labelColor()); painter.setFont(markerGeometry.font()); - painter.drawText(pos, label); + painter.drawText(pos, text); } } @@ -565,3 +593,34 @@ QImage WaveformMark::generateImage(float devicePixelRatio) { return image; } + +QImage WaveformMark::generateImage(float devicePixelRatio) { + DEBUG_ASSERT(needsImageUpdate()); + + QString label = m_text; + + // Determine mark text. + if (getHotCue() >= 0) { + if (!label.isEmpty()) { + label.prepend(": "); + } + label.prepend(QString::number(getHotCue() + 1)); + } + + return performImageGeneration(devicePixelRatio, m_pixmapPath, label, &m_label, m_iconPath); +} + +QImage WaveformMark::generateEndImage(float devicePixelRatio) { + assert(needsEndImageUpdate()); + + QString direction = QStringLiteral("forward"); + + if (isJump() && getSampleEndPosition() > getSamplePosition()) { + direction = QStringLiteral("backward"); + } + return performImageGeneration(devicePixelRatio, + m_endPixmapPath, + "", + nullptr, + m_endIconPath.contains("%1") ? m_endIconPath.arg(direction) : m_endIconPath); +} diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 9dcd71d698a2..ac2ddcfa1c4a 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -1,9 +1,12 @@ #pragma once #include +#include #include #include #include "control/controlproxy.h" +#include "control/pollingcontrolproxy.h" +#include "engine/controls/cuecontrol.h" #include "track/cue.h" #include "waveform/renderers/waveformsignalcolors.h" #include "waveform/waveformmarklabel.h" @@ -22,6 +25,14 @@ class WaveformMark { // To indicate that the image for the mark needs to be regenerated, // when the text, color, breadth or level are changed. bool m_obsolete{}; + Graphics() = default; + virtual ~Graphics() = default; + // non-copyable + Graphics(const Graphics&) = delete; + Graphics& operator=(const Graphics&) = delete; + // non-movable + Graphics(Graphics&&) = delete; + Graphics& operator=(Graphics&&) = delete; }; WaveformMark( @@ -44,7 +55,11 @@ class WaveformMark { QColor color, int priority, int hotCue = Cue::kNoHotCue, - const WaveformSignalColors& signalColors = {}); + const WaveformSignalColors& signalColors = {}, + const QString& endPixmapPath = {}, + const QString& endIconPath = {}, + float disabledOpacity = 1.0f, + float enabledOpacity = 1.0f); ~WaveformMark(); // Disable copying @@ -61,6 +76,12 @@ class WaveformMark { int getPriority() const { return m_iPriority; }; + mixxx::CueType getType() const { + if (!m_typeCO) { + return mixxx::CueType::Invalid; + } + return static_cast(m_typeCO->get()); + } // The m_pPositionCO related function bool isValid() const { @@ -77,18 +98,44 @@ class WaveformMark { m_pEndPositionCO->connectValueChanged(receiver, slot, Qt::AutoConnection); } }; + template + void connectTypeChanged(Receiver receiver, Slot slot) const { + if (m_typeCO) { + m_typeCO->connectValueChanged(receiver, slot, Qt::AutoConnection); + } + }; + template + void connectStatusChanged(Receiver receiver, Slot slot) const { + if (m_statusCO) { + m_statusCO->connectValueChanged(receiver, slot, Qt::AutoConnection); + } + }; + double getSamplePosition() const { return m_pPositionCO->get(); } + bool isJump() const { + return m_typeCO && + static_cast(m_typeCO->get()) == + mixxx::CueType::Jump; + } + bool isLoop() const { + return m_typeCO && + static_cast(m_typeCO->get()) == + mixxx::CueType::Loop; + } + bool isStandard() const { + // A Waveform mark should always have either `isJump`, `isLoop` or + // `isNormal` returning true! + return !isLoop() && !isJump(); + } double getSampleEndPosition() const { if (!m_pEndPositionCO || // A hotcue may have an end position although it isn't a saved - // loop anymore. This happens when the user changes the cue + // loop or jump anymore. This happens when the user changes the cue // type. However, we persist the end position if the user wants // to restore the cue to a saved loop - (m_pTypeCO && - static_cast(m_pTypeCO->get()) != - mixxx::CueType::Loop)) { + isStandard()) { return Cue::kNoPosition; } return m_pEndPositionCO->get(); @@ -107,6 +154,13 @@ class WaveformMark { } return m_pVisibleCO->toBool(); } + // A cue is always considered active if it isn't a saved loop or a saved + // jump (a.k.a a "standard" cue) + bool isActive() const { + return !m_statusCO || + static_cast(m_statusCO->get()) == + HotcueControl::Status::Active; + } bool isShowUntilNext() const { return m_showUntilNext; } @@ -138,16 +192,27 @@ class WaveformMark { return m_labelColor; } + double opacity() const { + return isActive() ? m_enabledOpacity : m_disabledOpacity; + } + void setNeedsImageUpdate() { if (m_pGraphics) { m_pGraphics->m_obsolete = true; } + if (m_pEndGraphics) { + m_pEndGraphics->m_obsolete = true; + } } bool needsImageUpdate() const { return !m_pGraphics || m_pGraphics->m_obsolete; } + bool needsEndImageUpdate() const { + return !m_pEndGraphics || m_pEndGraphics->m_obsolete; + } + void setBreadth(float breadth) { if (m_breadth != breadth) { m_breadth = breadth; @@ -168,12 +233,18 @@ class WaveformMark { bool contains(QPoint point, Qt::Orientation orientation) const; QImage generateImage(float devicePixelRatio); + QImage generateEndImage(float devicePixelRatio); QColor m_textColor; QString m_text; Qt::Alignment m_align; QString m_pixmapPath; + QString m_endPixmapPath; QString m_iconPath; + QString m_endIconPath; + + double m_enabledOpacity; + double m_disabledOpacity; float m_linePosition; float m_offset; @@ -187,12 +258,20 @@ class WaveformMark { WaveformMarkLabel m_label; private: + QImage performImageGeneration(float devicePixelRatio, + const QString& pixmapPath, + const QString& text, + WaveformMarkLabel* labelMark, + const QString& iconPath); + std::unique_ptr m_pPositionCO; std::unique_ptr m_pEndPositionCO; - std::unique_ptr m_pTypeCO; std::unique_ptr m_pVisibleCO; + std::unique_ptr m_typeCO; + std::unique_ptr m_statusCO; std::unique_ptr m_pGraphics; + std::unique_ptr m_pEndGraphics; int m_iPriority; int m_iHotCue; diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index 8624680535f6..bfe7eb9f87f4 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -69,7 +69,6 @@ void WaveformMarkSet::setDefault(const QString& group, const DefaultMarkerStyle& model, const WaveformSignalColors& signalColors) { m_pDefaultMark = WaveformMarkPointer::create( - group, model.positionControl, model.visibilityControl, @@ -85,7 +84,6 @@ void WaveformMarkSet::setDefault(const QString& group, for (int i = 0; i < kMaxNumberOfHotcues; ++i) { if (m_hotCueMarks.value(i).isNull()) { auto pMark = WaveformMarkPointer::create( - group, model.positionControl, model.visibilityControl, @@ -97,7 +95,11 @@ void WaveformMarkSet::setDefault(const QString& group, model.color, i, i, - signalColors); + signalColors, + model.endPixmapPath, + model.endIconPath, + model.enabledOpacity, + model.disabledOpacity); m_marks.push_front(pMark); m_hotCueMarks.insert(pMark->getHotCue(), pMark); } diff --git a/src/waveform/renderers/waveformmarkset.h b/src/waveform/renderers/waveformmarkset.h index d0d4607219c6..8d07fd266f70 100644 --- a/src/waveform/renderers/waveformmarkset.h +++ b/src/waveform/renderers/waveformmarkset.h @@ -18,8 +18,12 @@ class WaveformMarkSet { QString markAlign; QString text; QString pixmapPath; + QString endPixmapPath; QString iconPath; + QString endIconPath; QColor color; + float enabledOpacity; + float disabledOpacity; }; WaveformMarkSet(); @@ -56,6 +60,24 @@ class WaveformMarkSet { } } + template + void connectTypeChanged(Receiver receiver, Slot slot) const { + for (const auto& pMark : std::as_const(m_marks)) { + if (pMark->isValid()) { + pMark->connectTypeChanged(receiver, slot); + } + } + } + + template + void connectStatusChanged(Receiver receiver, Slot slot) const { + for (const auto& pMark : std::as_const(m_marks)) { + if (pMark->isValid()) { + pMark->connectStatusChanged(receiver, slot); + } + } + } + inline QList::const_iterator begin() const { return m_marksToRender.begin(); } diff --git a/src/waveform/renderers/waveformrendererfilteredsignal.cpp b/src/waveform/renderers/waveformrendererfilteredsignal.cpp index 15b6c2d7e38f..97b11b1583c0 100644 --- a/src/waveform/renderers/waveformrendererfilteredsignal.cpp +++ b/src/waveform/renderers/waveformrendererfilteredsignal.cpp @@ -7,8 +7,9 @@ #include "util/painterscope.h" WaveformRendererFilteredSignal::WaveformRendererFilteredSignal( - WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { + WaveformWidgetRenderer* waveformWidgetRenderer, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidgetRenderer, options) { } WaveformRendererFilteredSignal::~WaveformRendererFilteredSignal() { diff --git a/src/waveform/renderers/waveformrendererfilteredsignal.h b/src/waveform/renderers/waveformrendererfilteredsignal.h index ba8e41a2eba9..00c3510e4496 100644 --- a/src/waveform/renderers/waveformrendererfilteredsignal.h +++ b/src/waveform/renderers/waveformrendererfilteredsignal.h @@ -9,7 +9,7 @@ class WaveformRendererFilteredSignal : public WaveformRendererSignalBase { public: explicit WaveformRendererFilteredSignal( - WaveformWidgetRenderer* waveformWidget); + WaveformWidgetRenderer* waveformWidget, ::WaveformRendererSignalBase::Options options); virtual ~WaveformRendererFilteredSignal(); virtual void onSetup(const QDomNode& node); diff --git a/src/waveform/renderers/waveformrendererhsv.cpp b/src/waveform/renderers/waveformrendererhsv.cpp index 0efba33e8451..2951421108cf 100644 --- a/src/waveform/renderers/waveformrendererhsv.cpp +++ b/src/waveform/renderers/waveformrendererhsv.cpp @@ -8,8 +8,9 @@ #include "waveformwidgetrenderer.h" WaveformRendererHSV::WaveformRendererHSV( - WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { + WaveformWidgetRenderer* waveformWidgetRenderer, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidgetRenderer, options) { } WaveformRendererHSV::~WaveformRendererHSV() { diff --git a/src/waveform/renderers/waveformrendererhsv.h b/src/waveform/renderers/waveformrendererhsv.h index 4c13b61c9a33..55693ba56638 100644 --- a/src/waveform/renderers/waveformrendererhsv.h +++ b/src/waveform/renderers/waveformrendererhsv.h @@ -6,7 +6,7 @@ class WaveformRendererHSV : public WaveformRendererSignalBase { public: explicit WaveformRendererHSV( - WaveformWidgetRenderer* waveformWidget); + WaveformWidgetRenderer* waveformWidget, ::WaveformRendererSignalBase::Options options); virtual ~WaveformRendererHSV(); virtual void onSetup(const QDomNode& node); diff --git a/src/waveform/renderers/waveformrendererrgb.cpp b/src/waveform/renderers/waveformrendererrgb.cpp index c6b948335f2e..ba521a74ce86 100644 --- a/src/waveform/renderers/waveformrendererrgb.cpp +++ b/src/waveform/renderers/waveformrendererrgb.cpp @@ -6,8 +6,9 @@ #include "util/painterscope.h" WaveformRendererRGB::WaveformRendererRGB( - WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { + WaveformWidgetRenderer* waveformWidgetRenderer, + ::WaveformRendererSignalBase::Options options) + : WaveformRendererSignalBase(waveformWidgetRenderer, options) { } WaveformRendererRGB::~WaveformRendererRGB() { diff --git a/src/waveform/renderers/waveformrendererrgb.h b/src/waveform/renderers/waveformrendererrgb.h index fa8e8bbc12f9..9d452f9aa6a0 100644 --- a/src/waveform/renderers/waveformrendererrgb.h +++ b/src/waveform/renderers/waveformrendererrgb.h @@ -6,7 +6,7 @@ class WaveformRendererRGB : public WaveformRendererSignalBase { public: explicit WaveformRendererRGB( - WaveformWidgetRenderer* waveformWidget); + WaveformWidgetRenderer* waveformWidget, ::WaveformRendererSignalBase::Options options); virtual ~WaveformRendererRGB(); virtual void onSetup(const QDomNode& node); diff --git a/src/waveform/renderers/waveformrenderersignalbase.cpp b/src/waveform/renderers/waveformrenderersignalbase.cpp index ed2a75abe084..a38043aa1acc 100644 --- a/src/waveform/renderers/waveformrenderersignalbase.cpp +++ b/src/waveform/renderers/waveformrenderersignalbase.cpp @@ -12,7 +12,7 @@ const QString kEffectGroupFormat = QStringLiteral("[EqualizerRack1_%1_Effect1]") } // namespace WaveformRendererSignalBase::WaveformRendererSignalBase( - WaveformWidgetRenderer* waveformWidgetRenderer) + WaveformWidgetRenderer* waveformWidgetRenderer, Options) : WaveformRendererAbstract(waveformWidgetRenderer), m_pEQEnabled(nullptr), m_pLowFilterControlObject(nullptr), @@ -54,47 +54,35 @@ WaveformRendererSignalBase::WaveformRendererSignalBase( m_rgbHighColor_b(0) { } -WaveformRendererSignalBase::~WaveformRendererSignalBase() { - deleteControls(); -} - -void WaveformRendererSignalBase::deleteControls() { - if (m_pEQEnabled) { - delete m_pEQEnabled; - } - if (m_pLowFilterControlObject) { - delete m_pLowFilterControlObject; - } - if (m_pMidFilterControlObject) { - delete m_pMidFilterControlObject; - } - if (m_pHighFilterControlObject) { - delete m_pHighFilterControlObject; - } - if (m_pLowKillControlObject) { - delete m_pLowKillControlObject; - } - if (m_pMidKillControlObject) { - delete m_pMidKillControlObject; - } - if (m_pHighKillControlObject) { - delete m_pHighKillControlObject; - } -} +WaveformRendererSignalBase::~WaveformRendererSignalBase() = default; bool WaveformRendererSignalBase::init() { - deleteControls(); - - //create controls - m_pEQEnabled = new ControlProxy( - m_waveformRenderer->getGroup(), "filterWaveformEnable"); - const QString effectGroup = kEffectGroupFormat.arg(m_waveformRenderer->getGroup()); - m_pLowFilterControlObject = new ControlProxy(effectGroup, QStringLiteral("parameter1")); - m_pMidFilterControlObject = new ControlProxy(effectGroup, QStringLiteral("parameter2")); - m_pHighFilterControlObject = new ControlProxy(effectGroup, QStringLiteral("parameter3")); - m_pLowKillControlObject = new ControlProxy(effectGroup, QStringLiteral("button_parameter1")); - m_pMidKillControlObject = new ControlProxy(effectGroup, QStringLiteral("button_parameter2")); - m_pHighKillControlObject = new ControlProxy(effectGroup, QStringLiteral("button_parameter3")); + if (!m_waveformRenderer->getGroup().isEmpty()) { + // create controls + m_pEQEnabled = std::make_unique( + m_waveformRenderer->getGroup(), "filterWaveformEnable"); + const QString effectGroup = kEffectGroupFormat.arg(m_waveformRenderer->getGroup()); + m_pLowFilterControlObject = std::make_unique( + effectGroup, QStringLiteral("parameter1")); + m_pMidFilterControlObject = std::make_unique( + effectGroup, QStringLiteral("parameter2")); + m_pHighFilterControlObject = std::make_unique( + effectGroup, QStringLiteral("parameter3")); + m_pLowKillControlObject = std::make_unique( + effectGroup, QStringLiteral("button_parameter1")); + m_pMidKillControlObject = std::make_unique( + effectGroup, QStringLiteral("button_parameter2")); + m_pHighKillControlObject = std::make_unique( + effectGroup, QStringLiteral("button_parameter3")); + } else { + m_pEQEnabled.reset(); + m_pLowFilterControlObject.reset(); + m_pMidFilterControlObject.reset(); + m_pHighFilterControlObject.reset(); + m_pLowKillControlObject.reset(); + m_pMidKillControlObject.reset(); + m_pHighKillControlObject.reset(); + } return onInit(); } @@ -195,7 +183,7 @@ void WaveformRendererSignalBase::getGains(float* pAllGain, CSAMPLE_GAIN lowVisualGain = 1.0, midVisualGain = 1.0, highVisualGain = 1.0; // Only adjust low/mid/high gains if EQs are enabled. - if (m_pEQEnabled->get() > 0.0) { + if (m_pEQEnabled && m_pEQEnabled->get() > 0.0) { if (m_pLowFilterControlObject && m_pMidFilterControlObject && m_pHighFilterControlObject) { diff --git a/src/waveform/renderers/waveformrenderersignalbase.h b/src/waveform/renderers/waveformrenderersignalbase.h index 3611136bc7e2..fbbafd0ee3c9 100644 --- a/src/waveform/renderers/waveformrenderersignalbase.h +++ b/src/waveform/renderers/waveformrenderersignalbase.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "skin/legacy/skincontext.h" #include "util/span.h" #include "util/types.h" @@ -12,8 +14,16 @@ class WaveformSignalColors; class WaveformRendererSignalBase : public QObject, public WaveformRendererAbstract { Q_OBJECT public: + enum class Option { + None = 0b0, + SplitStereoSignal = 0b1, + HighDetail = 0b10, + AllOptionsCombined = SplitStereoSignal | HighDetail, + }; + Q_DECLARE_FLAGS(Options, Option) + explicit WaveformRendererSignalBase( - WaveformWidgetRenderer* waveformWidgetRenderer); + WaveformWidgetRenderer* waveformWidgetRenderer, Options options); virtual ~WaveformRendererSignalBase(); virtual bool init(); @@ -39,8 +49,6 @@ class WaveformRendererSignalBase : public QObject, public WaveformRendererAbstra } protected: - void deleteControls(); - void getGains(float* pAllGain, bool applyCompensation, float* pLowGain, @@ -48,13 +56,13 @@ class WaveformRendererSignalBase : public QObject, public WaveformRendererAbstra float* highGain); protected: - ControlProxy* m_pEQEnabled; - ControlProxy* m_pLowFilterControlObject; - ControlProxy* m_pMidFilterControlObject; - ControlProxy* m_pHighFilterControlObject; - ControlProxy* m_pLowKillControlObject; - ControlProxy* m_pMidKillControlObject; - ControlProxy* m_pHighKillControlObject; + std::unique_ptr m_pEQEnabled; + std::unique_ptr m_pLowFilterControlObject; + std::unique_ptr m_pMidFilterControlObject; + std::unique_ptr m_pHighFilterControlObject; + std::unique_ptr m_pLowKillControlObject; + std::unique_ptr m_pMidKillControlObject; + std::unique_ptr m_pHighKillControlObject; Qt::Alignment m_alignment; Qt::Orientation m_orientation; @@ -66,6 +74,7 @@ class WaveformRendererSignalBase : public QObject, public WaveformRendererAbstra float m_axesColor_r, m_axesColor_g, m_axesColor_b, m_axesColor_a; float m_signalColor_r, m_signalColor_g, m_signalColor_b; + float m_signalColor_h, m_signalColor_s, m_signalColor_v; float m_lowColor_r, m_lowColor_g, m_lowColor_b; float m_midColor_r, m_midColor_g, m_midColor_b; float m_highColor_r, m_highColor_g, m_highColor_b; diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp index fb8688b9138b..3637af96f38c 100644 --- a/src/waveform/renderers/waveformrendermark.cpp +++ b/src/waveform/renderers/waveformrendermark.cpp @@ -140,3 +140,13 @@ void WaveformRenderMark::updateMarkImage(WaveformMarkPointer pMark) { .transformed(QTransform().rotate(90))); } } +void WaveformRenderMark::updateEndMarkImage(WaveformMarkPointer pMark) { + if (m_waveformRenderer->getOrientation() == Qt::Horizontal) { + pMark->m_pEndGraphics = std::make_unique( + pMark->generateEndImage(m_waveformRenderer->getDevicePixelRatio())); + } else { + pMark->m_pEndGraphics = std::make_unique( + pMark->generateEndImage(m_waveformRenderer->getDevicePixelRatio()) + .transformed(QTransform().rotate(90))); + } +} diff --git a/src/waveform/renderers/waveformrendermark.h b/src/waveform/renderers/waveformrendermark.h index 2bf284223f18..e5ef50bb87fc 100644 --- a/src/waveform/renderers/waveformrendermark.h +++ b/src/waveform/renderers/waveformrendermark.h @@ -10,6 +10,7 @@ class WaveformRenderMark : public WaveformRenderMarkBase { private: void updateMarkImage(WaveformMarkPointer pMark) override; + void updateEndMarkImage(WaveformMarkPointer pMark) override; DISALLOW_COPY_AND_ASSIGN(WaveformRenderMark); }; diff --git a/src/waveform/renderers/waveformrendermarkbase.cpp b/src/waveform/renderers/waveformrendermarkbase.cpp index b2293d1448d4..3f04cf81cdd3 100644 --- a/src/waveform/renderers/waveformrendermarkbase.cpp +++ b/src/waveform/renderers/waveformrendermarkbase.cpp @@ -20,6 +20,8 @@ bool WaveformRenderMarkBase::init() { m_marks.connectSamplePositionChanged(this, &WaveformRenderMarkBase::onMarkChanged); m_marks.connectSampleEndPositionChanged(this, &WaveformRenderMarkBase::onMarkChanged); m_marks.connectVisibleChanged(this, &WaveformRenderMarkBase::onMarkChanged); + m_marks.connectTypeChanged(this, &WaveformRenderMarkBase::onMarkChanged); + m_marks.connectStatusChanged(this, &WaveformRenderMarkBase::onMarkChanged); return true; } @@ -79,6 +81,9 @@ void WaveformRenderMarkBase::updateMarksFromCues() { QColor newColor = mixxx::RgbColor::toQColor(pCue->getColor()); pMark->setText(newLabel); pMark->setBaseColor(newColor, dimBrightThreshold); + if (pMark->isJump()) { + pMark->setNeedsImageUpdate(); + } } updateMarks(); @@ -96,5 +101,8 @@ void WaveformRenderMarkBase::updateMarkImages() { if (pMark->needsImageUpdate()) { updateMarkImage(pMark); } + if (pMark->needsEndImageUpdate()) { + updateEndMarkImage(pMark); + } } } diff --git a/src/waveform/renderers/waveformrendermarkbase.h b/src/waveform/renderers/waveformrendermarkbase.h index 398a92f7aadc..ec3bae93e8ec 100644 --- a/src/waveform/renderers/waveformrendermarkbase.h +++ b/src/waveform/renderers/waveformrendermarkbase.h @@ -60,6 +60,7 @@ class WaveformRenderMarkBase : public QObject, public WaveformRendererAbstract { private: virtual void updateMarkImage(WaveformMarkPointer pMark) = 0; + virtual void updateEndMarkImage(WaveformMarkPointer pMark) = 0; DISALLOW_COPY_AND_ASSIGN(WaveformRenderMarkBase); }; diff --git a/src/waveform/renderers/waveformwidgetrenderer.cpp b/src/waveform/renderers/waveformwidgetrenderer.cpp index 60e86243cfdf..1a11c1b30e84 100644 --- a/src/waveform/renderers/waveformwidgetrenderer.cpp +++ b/src/waveform/renderers/waveformwidgetrenderer.cpp @@ -103,18 +103,23 @@ bool WaveformWidgetRenderer::init() { m_truePosSample[type] = -1.0; } - VERIFY_OR_DEBUG_ASSERT(!m_group.isEmpty()) { - return false; + // It is possible for a renderer to be defined with no group. This usually + // indicate that the position and track will be controlled by the owner. + // This is used in QML currently. + if (!m_group.isEmpty()) { + m_pRateRatioCO = std::make_unique( + m_group, QStringLiteral("rate_ratio")); + m_pGainControlObject = std::make_unique( + m_group, QStringLiteral("total_gain")); + m_pTrackSamplesControlObject = std::make_unique( + m_group, QStringLiteral("track_samples")); + + m_visualPlayPosition = VisualPlayPosition::getVisualPlayPosition(m_group); } - m_visualPlayPosition = VisualPlayPosition::getVisualPlayPosition(m_group); - - m_pRateRatioCO = std::make_unique( - m_group, QStringLiteral("rate_ratio")); - m_pGainControlObject = std::make_unique( - m_group, QStringLiteral("total_gain")); - m_pTrackSamplesControlObject = std::make_unique( - m_group, QStringLiteral("track_samples")); + VERIFY_OR_DEBUG_ASSERT(m_visualPlayPosition) { + return false; + } for (int i = 0; i < m_rendererStack.size(); ++i) { if (!m_rendererStack[i]->init()) { @@ -137,15 +142,17 @@ void WaveformWidgetRenderer::onPreRender(VSyncTimeProvider* vsyncThread) { } // For a valid track to render we need - m_trackSamples = m_pTrackSamplesControlObject->get(); + m_trackSamples = m_pTrackSamplesControlObject + ? m_pTrackSamplesControlObject->get() + : m_pTrack->getSampleRate() * m_pTrack->getDuration(); if (m_trackSamples <= 0) { return; } //Fetch parameters before rendering in order the display all sub-renderers with the same values - double rateRatio = m_pRateRatioCO->get(); + double rateRatio = m_pRateRatioCO ? m_pRateRatioCO->get() : 1.0; - m_gain = m_pGainControlObject->get(); + m_gain = m_pGainControlObject ? m_pGainControlObject->get() : 1.0; // Compute visual sample to pixel ratio // Allow waveform to spread one visual sample across a hundred pixels diff --git a/src/waveform/renderers/waveformwidgetrenderer.h b/src/waveform/renderers/waveformwidgetrenderer.h index 9e1996051a4a..3541dcc9010e 100644 --- a/src/waveform/renderers/waveformwidgetrenderer.h +++ b/src/waveform/renderers/waveformwidgetrenderer.h @@ -42,6 +42,10 @@ class WaveformWidgetRenderer { void onPreRender(VSyncTimeProvider* vsyncThread); void draw(QPainter* painter, QPaintEvent* event); + void setVisualPlayPosition(const QSharedPointer& value) { + m_visualPlayPosition = value; + } + const QString& getGroup() const { return m_group; } diff --git a/src/waveform/visualplayposition.cpp b/src/waveform/visualplayposition.cpp index 6fce7f1bf3f4..758f1a37d095 100644 --- a/src/waveform/visualplayposition.cpp +++ b/src/waveform/visualplayposition.cpp @@ -17,7 +17,9 @@ VisualPlayPosition::VisualPlayPosition(const QString& key) } VisualPlayPosition::~VisualPlayPosition() { - m_listVisualPlayPosition.remove(m_key); + if (!m_key.isEmpty()) { + m_listVisualPlayPosition.remove(m_key); + } } void VisualPlayPosition::set( diff --git a/src/waveform/visualplayposition.h b/src/waveform/visualplayposition.h index 9b94c91571a4..bded14a5f38e 100644 --- a/src/waveform/visualplayposition.h +++ b/src/waveform/visualplayposition.h @@ -49,7 +49,7 @@ class VisualPlayPositionData { class VisualPlayPosition : public QObject { Q_OBJECT public: - VisualPlayPosition(const QString& m_key); + VisualPlayPosition(const QString& m_key = {}); virtual ~VisualPlayPosition(); // WARNING: Not thread safe. This function must be called only from the diff --git a/src/waveform/waveformwidgetfactory.cpp b/src/waveform/waveformwidgetfactory.cpp index 933c33a86e7a..0de8551a12cd 100644 --- a/src/waveform/waveformwidgetfactory.cpp +++ b/src/waveform/waveformwidgetfactory.cpp @@ -1,5 +1,6 @@ #include "waveform/waveformwidgetfactory.h" +#include "waveform/renderers/waveformrendererabstract.h" #include "waveform/waveform.h" #ifdef MIXXX_USE_QOPENGL @@ -995,7 +996,7 @@ void WaveformWidgetFactory::evaluateWidgets() { m_waveformWidgetHandles.clear(); QHash> collectedHandles; QHash + WaveformRendererSignalBase::Options> supportedOptions; for (WaveformWidgetType::Type type : WaveformWidgetType::kValues) { switch (type) { @@ -1059,81 +1060,83 @@ void WaveformWidgetFactory::evaluateWidgets() { m_waveformWidgetHandles.push_back(WaveformWidgetAbstractHandle(type, backends #ifdef MIXXX_USE_QOPENGL , - supportedOptions.value(type, allshader::WaveformRendererSignalBase::Option::None) + supportedOptions.value(type, WaveformRendererSignalBase::Option::None) #endif )); } } WaveformWidgetAbstract* WaveformWidgetFactory::createAllshaderWaveformWidget( - WaveformWidgetType::Type type, WWaveformViewer* viewer) { - allshader::WaveformRendererSignalBase::Options options = - m_config->getValue(ConfigKey("[Waveform]", "waveform_options"), - allshader::WaveformRendererSignalBase::Option::None); + WaveformWidgetType::Type type, + WWaveformViewer* viewer, + WaveformRendererSignalBase::Options options) { return new allshader::WaveformWidget(viewer, type, viewer->getGroup(), options); } WaveformWidgetAbstract* WaveformWidgetFactory::createFilteredWaveformWidget( - WWaveformViewer* viewer) { + WWaveformViewer* viewer, WaveformRendererSignalBase::Options options) { WaveformWidgetBackend backend = getBackendFromConfig(); switch (backend) { #ifdef MIXXX_USE_QOPENGL case WaveformWidgetBackend::AllShader: { - return createAllshaderWaveformWidget(WaveformWidgetType::Type::Filtered, viewer); + return createAllshaderWaveformWidget(WaveformWidgetType::Type::Filtered, viewer, options); } #endif default: - return new SoftwareWaveformWidget(viewer->getGroup(), viewer); + return new SoftwareWaveformWidget(viewer->getGroup(), viewer, options); } } -WaveformWidgetAbstract* WaveformWidgetFactory::createHSVWaveformWidget(WWaveformViewer* viewer) { +WaveformWidgetAbstract* WaveformWidgetFactory::createHSVWaveformWidget( + WWaveformViewer* viewer, WaveformRendererSignalBase::Options options) { WaveformWidgetBackend backend = getBackendFromConfig(); switch (backend) { #ifdef MIXXX_USE_QOPENGL case WaveformWidgetBackend::AllShader: - return createAllshaderWaveformWidget(WaveformWidgetType::HSV, viewer); + return createAllshaderWaveformWidget(WaveformWidgetType::HSV, viewer, options); #endif default: - return new HSVWaveformWidget(viewer->getGroup(), viewer); + return new HSVWaveformWidget(viewer->getGroup(), viewer, options); } } -WaveformWidgetAbstract* WaveformWidgetFactory::createRGBWaveformWidget(WWaveformViewer* viewer) { +WaveformWidgetAbstract* WaveformWidgetFactory::createRGBWaveformWidget( + WWaveformViewer* viewer, WaveformRendererSignalBase::Options options) { WaveformWidgetBackend backend = getBackendFromConfig(); switch (backend) { #ifdef MIXXX_USE_QOPENGL case WaveformWidgetBackend::AllShader: - return createAllshaderWaveformWidget(WaveformWidgetType::Type::RGB, viewer); + return createAllshaderWaveformWidget(WaveformWidgetType::Type::RGB, viewer, options); #endif default: - return new RGBWaveformWidget(viewer->getGroup(), viewer); + return new RGBWaveformWidget(viewer->getGroup(), viewer, options); } } WaveformWidgetAbstract* WaveformWidgetFactory::createStackedWaveformWidget( - WWaveformViewer* viewer) { + WWaveformViewer* viewer, WaveformRendererSignalBase::Options options) { #ifdef MIXXX_USE_QOPENGL WaveformWidgetBackend backend = getBackendFromConfig(); switch (backend) { case WaveformWidgetBackend::AllShader: - return createAllshaderWaveformWidget(WaveformWidgetType::Type::Stacked, viewer); + return createAllshaderWaveformWidget(WaveformWidgetType::Type::Stacked, viewer, options); #endif default: return new EmptyWaveformWidget(viewer->getGroup(), viewer); } } -WaveformWidgetAbstract* WaveformWidgetFactory::createSimpleWaveformWidget(WWaveformViewer* viewer) { +WaveformWidgetAbstract* WaveformWidgetFactory::createSimpleWaveformWidget( + WWaveformViewer* viewer, WaveformRendererSignalBase::Options options) { WaveformWidgetBackend backend = getBackendFromConfig(); switch (backend) { #ifdef MIXXX_USE_QOPENGL case WaveformWidgetBackend::AllShader: - return createAllshaderWaveformWidget(WaveformWidgetType::Type::Simple, viewer); + return createAllshaderWaveformWidget(WaveformWidgetType::Type::Simple, viewer, options); #endif default: return new EmptyWaveformWidget(viewer->getGroup(), viewer); @@ -1157,24 +1160,28 @@ WaveformWidgetAbstract* WaveformWidgetFactory::createWaveformWidget( type = WaveformWidgetType::Empty; } + WaveformRendererSignalBase::Options options = + m_config->getValue(ConfigKey("[Waveform]", "waveform_options"), + WaveformRendererSignalBase::Option::None); + switch (type) { case WaveformWidgetType::Simple: - widget = createSimpleWaveformWidget(viewer); + widget = createSimpleWaveformWidget(viewer, options); break; case WaveformWidgetType::Filtered: - widget = createFilteredWaveformWidget(viewer); + widget = createFilteredWaveformWidget(viewer, options); break; case WaveformWidgetType::HSV: - widget = createHSVWaveformWidget(viewer); + widget = createHSVWaveformWidget(viewer, options); break; case WaveformWidgetType::VSyncTest: widget = createVSyncTestWaveformWidget(viewer); break; case WaveformWidgetType::RGB: - widget = createRGBWaveformWidget(viewer); + widget = createRGBWaveformWidget(viewer, options); break; case WaveformWidgetType::Stacked: - widget = createStackedWaveformWidget(viewer); + widget = createStackedWaveformWidget(viewer, options); break; default: widget = new EmptyWaveformWidget(viewer->getGroup(), viewer); diff --git a/src/waveform/waveformwidgetfactory.h b/src/waveform/waveformwidgetfactory.h index a18dd2dcc76d..c9fc36445eb3 100644 --- a/src/waveform/waveformwidgetfactory.h +++ b/src/waveform/waveformwidgetfactory.h @@ -10,6 +10,7 @@ #include "util/performancetimer.h" #include "util/singleton.h" #include "waveform/renderers/allshader/waveformrenderersignalbase.h" +#include "waveform/renderers/waveformrenderersignalbase.h" #include "waveform/widgets/waveformwidgettype.h" #include "waveform/widgets/waveformwidgetvars.h" @@ -61,11 +62,11 @@ class WaveformWidgetAbstractHandle { } #ifdef MIXXX_USE_QOPENGL - allshader::WaveformRendererSignalBase::Options supportedOptions( + WaveformRendererSignalBase::Options supportedOptions( WaveformWidgetBackend backend) const { return backend == WaveformWidgetBackend::AllShader ? m_supportedOption - : allshader::WaveformRendererSignalBase::Option::None; + : WaveformRendererSignalBase::Option::None; } #endif @@ -77,7 +78,7 @@ class WaveformWidgetAbstractHandle { QList m_backends; #ifdef MIXXX_USE_QOPENGL // Only relevant for Allshader (accelerated) backend. Other backends don't implement options - allshader::WaveformRendererSignalBase::Options m_supportedOption; + WaveformRendererSignalBase::Options m_supportedOption; #endif friend class WaveformWidgetFactory; @@ -288,7 +289,9 @@ class WaveformWidgetFactory : public QObject, template QString buildWidgetDisplayName() const; WaveformWidgetAbstract* createAllshaderWaveformWidget( - WaveformWidgetType::Type type, WWaveformViewer* viewer); + WaveformWidgetType::Type type, + WWaveformViewer* viewer, + WaveformRendererSignalBase::Options option); WaveformWidgetAbstract* createWaveformWidget(WaveformWidgetType::Type type, WWaveformViewer* viewer); int findIndexOf(WWaveformViewer* viewer) const; @@ -335,11 +338,17 @@ class WaveformWidgetFactory : public QObject, VisualsManager* m_pVisualsManager; // not owned // TODO(#13245): Migrate the following methods to smart pointer. - WaveformWidgetAbstract* createFilteredWaveformWidget(WWaveformViewer* viewer); - WaveformWidgetAbstract* createHSVWaveformWidget(WWaveformViewer* viewer); - WaveformWidgetAbstract* createRGBWaveformWidget(WWaveformViewer* viewer); - WaveformWidgetAbstract* createStackedWaveformWidget(WWaveformViewer* viewer); - WaveformWidgetAbstract* createSimpleWaveformWidget(WWaveformViewer* viewer); + WaveformWidgetAbstract* createFilteredWaveformWidget( + WWaveformViewer* viewer, + WaveformRendererSignalBase::Options option); + WaveformWidgetAbstract* createHSVWaveformWidget(WWaveformViewer* viewer, + WaveformRendererSignalBase::Options option); + WaveformWidgetAbstract* createRGBWaveformWidget(WWaveformViewer* viewer, + WaveformRendererSignalBase::Options option); + WaveformWidgetAbstract* createStackedWaveformWidget(WWaveformViewer* viewer, + WaveformRendererSignalBase::Options option); + WaveformWidgetAbstract* createSimpleWaveformWidget(WWaveformViewer* viewer, + WaveformRendererSignalBase::Options option); WaveformWidgetAbstract* createVSyncTestWaveformWidget(WWaveformViewer* viewer); //Debug diff --git a/src/waveform/widgets/allshader/waveformwidget.cpp b/src/waveform/widgets/allshader/waveformwidget.cpp index 9ee446e87d29..fb84dfdf8a4e 100644 --- a/src/waveform/widgets/allshader/waveformwidget.cpp +++ b/src/waveform/widgets/allshader/waveformwidget.cpp @@ -25,7 +25,7 @@ namespace allshader { WaveformWidget::WaveformWidget(QWidget* parent, WaveformWidgetType::Type type, const QString& group, - WaveformRendererSignalBase::Options options) + ::WaveformRendererSignalBase::Options options) : WGLWidget(parent), WaveformWidgetAbstract(group), m_type(type), @@ -102,10 +102,10 @@ WaveformWidget::~WaveformWidget() { std::unique_ptr WaveformWidget::addWaveformSignalRenderer(WaveformWidgetType::Type type, - WaveformRendererSignalBase::Options options, + ::WaveformRendererSignalBase::Options options, ::WaveformRendererAbstract::PositionSource positionSource) { #ifndef QT_OPENGL_ES_2 - if (options & WaveformRendererSignalBase::Option::HighDetail) { + if (options & ::WaveformRendererSignalBase::Option::HighDetail) { switch (type) { case ::WaveformWidgetType::RGB: case ::WaveformWidgetType::Filtered: @@ -120,16 +120,16 @@ WaveformWidget::addWaveformSignalRenderer(WaveformWidgetType::Type type, switch (type) { case ::WaveformWidgetType::Simple: - return addWaveformSignalRenderer(); + return addWaveformSignalRenderer(options); case ::WaveformWidgetType::RGB: return addWaveformSignalRenderer(positionSource, options); case ::WaveformWidgetType::HSV: - return addWaveformSignalRenderer(); + return addWaveformSignalRenderer(options); case ::WaveformWidgetType::Filtered: - return addWaveformSignalRenderer(false); + return addWaveformSignalRenderer(false, options); case ::WaveformWidgetType::Stacked: return addWaveformSignalRenderer( - true); // true for RGB Stacked + true, options); // true for RGB Stacked default: break; } @@ -199,16 +199,16 @@ void WaveformWidget::leaveEvent(QEvent* pEvent) { /* static */ WaveformRendererSignalBase::Options WaveformWidget::supportedOptions( WaveformWidgetType::Type type) { - WaveformRendererSignalBase::Options options = WaveformRendererSignalBase::Option::None; + ::WaveformRendererSignalBase::Options options = ::WaveformRendererSignalBase::Option::None; switch (type) { case WaveformWidgetType::Type::RGB: - options = WaveformRendererSignalBase::Option::AllOptionsCombined; + options = ::WaveformRendererSignalBase::Option::AllOptionsCombined; break; case WaveformWidgetType::Type::Filtered: - options = WaveformRendererSignalBase::Option::HighDetail; + options = ::WaveformRendererSignalBase::Option::HighDetail; break; case WaveformWidgetType::Type::Stacked: - options = WaveformRendererSignalBase::Option::HighDetail; + options = ::WaveformRendererSignalBase::Option::HighDetail; break; default: break; diff --git a/src/waveform/widgets/allshader/waveformwidget.h b/src/waveform/widgets/allshader/waveformwidget.h index 88a871f1fe78..fd5246e31adb 100644 --- a/src/waveform/widgets/allshader/waveformwidget.h +++ b/src/waveform/widgets/allshader/waveformwidget.h @@ -20,7 +20,7 @@ class allshader::WaveformWidget final : public ::WGLWidget, explicit WaveformWidget(QWidget* parent, WaveformWidgetType::Type type, const QString& group, - WaveformRendererSignalBase::Options options); + ::WaveformRendererSignalBase::Options options); ~WaveformWidget() override; WaveformWidgetType::Type getType() const override { @@ -40,7 +40,7 @@ class allshader::WaveformWidget final : public ::WGLWidget, return this; } static WaveformWidgetVars vars(); - static WaveformRendererSignalBase::Options supportedOptions(WaveformWidgetType::Type type); + static ::WaveformRendererSignalBase::Options supportedOptions(WaveformWidgetType::Type type); private: void castToQWidget() override; @@ -61,7 +61,7 @@ class allshader::WaveformWidget final : public ::WGLWidget, std::unique_ptr addWaveformSignalRenderer( WaveformWidgetType::Type type, - WaveformRendererSignalBase::Options options, + ::WaveformRendererSignalBase::Options options, ::WaveformRendererAbstract::PositionSource positionSource); WaveformWidgetType::Type m_type; diff --git a/src/waveform/widgets/hsvwaveformwidget.cpp b/src/waveform/widgets/hsvwaveformwidget.cpp index c3316889ff88..e66530c4671a 100644 --- a/src/waveform/widgets/hsvwaveformwidget.cpp +++ b/src/waveform/widgets/hsvwaveformwidget.cpp @@ -11,13 +11,15 @@ #include "waveform/renderers/waveformrendermark.h" #include "waveform/renderers/waveformrendermarkrange.h" -HSVWaveformWidget::HSVWaveformWidget(const QString& group, QWidget* parent) +HSVWaveformWidget::HSVWaveformWidget(const QString& group, + QWidget* parent, + ::WaveformRendererSignalBase::Options options) : NonGLWaveformWidgetAbstract(group, parent) { addRenderer(); addRenderer(); addRenderer(); addRenderer(); - addRenderer(); + addRenderer(options); addRenderer(); addRenderer(); diff --git a/src/waveform/widgets/hsvwaveformwidget.h b/src/waveform/widgets/hsvwaveformwidget.h index 64770edaf10f..5f4a1a6f197d 100644 --- a/src/waveform/widgets/hsvwaveformwidget.h +++ b/src/waveform/widgets/hsvwaveformwidget.h @@ -1,6 +1,7 @@ #pragma once #include "nonglwaveformwidgetabstract.h" +#include "waveform/renderers/waveformrenderersignalbase.h" class QWidget; @@ -28,6 +29,8 @@ class HSVWaveformWidget : public NonGLWaveformWidgetAbstract { virtual void paintEvent(QPaintEvent* event); private: - HSVWaveformWidget(const QString& group, QWidget* parent); + HSVWaveformWidget(const QString& group, + QWidget* parent, + WaveformRendererSignalBase::Options options); friend class WaveformWidgetFactory; }; diff --git a/src/waveform/widgets/rgbwaveformwidget.cpp b/src/waveform/widgets/rgbwaveformwidget.cpp index 3c7a61805d2e..72b907ede6af 100644 --- a/src/waveform/widgets/rgbwaveformwidget.cpp +++ b/src/waveform/widgets/rgbwaveformwidget.cpp @@ -11,13 +11,15 @@ #include "waveform/renderers/waveformrendermark.h" #include "waveform/renderers/waveformrendermarkrange.h" -RGBWaveformWidget::RGBWaveformWidget(const QString& group, QWidget* parent) +RGBWaveformWidget::RGBWaveformWidget(const QString& group, + QWidget* parent, + WaveformRendererSignalBase::Options options) : NonGLWaveformWidgetAbstract(group, parent) { addRenderer(); addRenderer(); addRenderer(); addRenderer(); - addRenderer(); + addRenderer(options); addRenderer(); addRenderer(); diff --git a/src/waveform/widgets/rgbwaveformwidget.h b/src/waveform/widgets/rgbwaveformwidget.h index 3c925c5359db..255415b697e2 100644 --- a/src/waveform/widgets/rgbwaveformwidget.h +++ b/src/waveform/widgets/rgbwaveformwidget.h @@ -1,6 +1,7 @@ #pragma once #include "nonglwaveformwidgetabstract.h" +#include "waveform/renderers/waveformrenderersignalbase.h" class QWidget; @@ -28,6 +29,8 @@ class RGBWaveformWidget : public NonGLWaveformWidgetAbstract { virtual void paintEvent(QPaintEvent* event); private: - RGBWaveformWidget(const QString& group, QWidget* parent); + RGBWaveformWidget(const QString& group, + QWidget* parent, + WaveformRendererSignalBase::Options options); friend class WaveformWidgetFactory; }; diff --git a/src/waveform/widgets/softwarewaveformwidget.cpp b/src/waveform/widgets/softwarewaveformwidget.cpp index 69099904e608..7f321b67a4d5 100644 --- a/src/waveform/widgets/softwarewaveformwidget.cpp +++ b/src/waveform/widgets/softwarewaveformwidget.cpp @@ -11,13 +11,15 @@ #include "waveform/renderers/waveformrendermark.h" #include "waveform/renderers/waveformrendermarkrange.h" -SoftwareWaveformWidget::SoftwareWaveformWidget(const QString& group, QWidget* parent) +SoftwareWaveformWidget::SoftwareWaveformWidget(const QString& group, + QWidget* parent, + WaveformRendererSignalBase::Options options) : NonGLWaveformWidgetAbstract(group, parent) { addRenderer(); addRenderer(); addRenderer(); addRenderer(); - addRenderer(); + addRenderer(options); addRenderer(); addRenderer(); diff --git a/src/waveform/widgets/softwarewaveformwidget.h b/src/waveform/widgets/softwarewaveformwidget.h index c79d0a545eaf..5227435f213f 100644 --- a/src/waveform/widgets/softwarewaveformwidget.h +++ b/src/waveform/widgets/softwarewaveformwidget.h @@ -1,6 +1,7 @@ #pragma once #include "nonglwaveformwidgetabstract.h" +#include "waveform/renderers/waveformrenderersignalbase.h" class QWidget; @@ -29,6 +30,8 @@ class SoftwareWaveformWidget : public NonGLWaveformWidgetAbstract { virtual void paintEvent(QPaintEvent* event); private: - SoftwareWaveformWidget(const QString& groupp, QWidget* parent); + SoftwareWaveformWidget(const QString& groupp, + QWidget* parent, + WaveformRendererSignalBase::Options options); friend class WaveformWidgetFactory; }; diff --git a/src/widget/wbpmeditor.cpp b/src/widget/wbpmeditor.cpp new file mode 100644 index 000000000000..225ccead981f --- /dev/null +++ b/src/widget/wbpmeditor.cpp @@ -0,0 +1,326 @@ +#include + +#include +#include +#include + +#include "control/controlobject.h" +#include "moc_wbpmeditor.cpp" +#include "skin/legacy/skincontext.h" + +namespace { +// Intervals for the hide timer +// Use same timeout as the WTrackProperty select timer for consistency +const int kHoverLeaveTimeout = 2000; +const int kInactiveTimeout = 5000; + +// Property name for the BPM/rate spinbox +const char* kOrigVal("originalValue"); +const double kBpmStepSize = 1.0; +const double kRateStepSize = 0.01; // +- 1 % + +} // anonymous namespace + +void TapPushButton::mousePressEvent(QMouseEvent* e) { + if (e->type() == QEvent::MouseButtonPress && e->button() == Qt::RightButton) { + emit rightClicked(); + return; + } + QPushButton::mousePressEvent(e); +} + +void BpmSpinBox::stepBy(int steps) { + QDoubleSpinBox::stepBy(steps); + emit stepped(steps); +} + +WBpmEditor::WBpmEditor(const QString& group, QWidget* pParent) + : WWidget(pParent), + m_tempoTapCO(group, QStringLiteral("tempo_tap")), + m_bpmTapCO(group, QStringLiteral("bpm_tap")), + // FIXME make it a ControlProxy to quit editor when track is unloaded so we + // don't accidentally set the file BPM while 'somehow' the track is swapped? + m_trackLoadedCO(group, QStringLiteral("track_loaded")), + m_bpmCO(group, QStringLiteral("bpm")), + m_fileBpmCO(group, QStringLiteral("file_bpm")), + m_rateRatioCO(group, QStringLiteral("rate_ratio")), + m_pClickOverlay(nullptr), + m_pSelectWidget(nullptr), + m_pTapSelectButton(nullptr), + m_pEditSelectButton(nullptr), + m_pTapButton(nullptr), + m_pEditBox(nullptr), + m_spinboxDecimals(2) { + setContentsMargins(0, 0, 0, 0); + setFocusPolicy(Qt::NoFocus); + // Setup the layout with the mode selectors (Tap|Edit), tap button and + // tempo editor. Only one of these widgets can be visible. + m_pClickOverlay = make_parented(this); + m_pClickOverlay->setObjectName(QStringLiteral("BpmClickOverlay")); + m_pClickOverlay->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_pClickOverlay->setFocusPolicy(Qt::NoFocus); + m_pClickOverlay->installEventFilter(this); + connect(m_pClickOverlay.get(), + &QPushButton::clicked, + this, + [this]() { switchMode(Mode::Select); }); + + m_pTapSelectButton = make_parented(this); + m_pTapSelectButton->setObjectName(QStringLiteral("BpmTapSelectButton")); + m_pTapSelectButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_pTapSelectButton->setFocusPolicy(Qt::NoFocus); + m_pTapSelectButton->installEventFilter(this); + connect(m_pTapSelectButton.get(), + &QPushButton::clicked, + this, + [this]() { switchMode(Mode::Tap); }); + + m_pEditSelectButton = make_parented(this); + m_pEditSelectButton->setObjectName(QStringLiteral("BpmEditSelectButton")); + m_pEditSelectButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_pEditSelectButton->setFocusPolicy(Qt::NoFocus); + m_pEditSelectButton->installEventFilter(this); + connect(m_pEditSelectButton.get(), + &QPushButton::clicked, + this, + [this]() { switchMode(Mode::Edit); }); + + m_pSelectWidget = make_parented(this); + m_pSelectWidget->installEventFilter(this); + m_pSelectWidget->setFocusPolicy(Qt::NoFocus); + auto pSelectLayout = std::make_unique(); + pSelectLayout->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + pSelectLayout->setContentsMargins(0, 0, 0, 0); + pSelectLayout->setSpacing(0); + pSelectLayout->setSizeConstraint(QLayout::SetNoConstraint); + pSelectLayout->addWidget(m_pTapSelectButton.get()); + pSelectLayout->addWidget(m_pEditSelectButton.get()); + pSelectLayout->update(); + pSelectLayout->activate(); + m_pSelectWidget->setLayout(pSelectLayout.release()); + + m_pTapButton = make_parented(this); + m_pTapButton->setObjectName(QStringLiteral("BpmTapButton")); + m_pTapButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + connect(m_pTapButton.get(), + &QPushButton::clicked, + this, + [this]() { + // Tap engine BPM + m_hideTimer.start(kInactiveTimeout); + m_tempoTapCO.set(1.0); + m_tempoTapCO.set(0.0); + }); + connect(m_pTapButton.get(), + &TapPushButton::rightClicked, + this, + [this]() { + // Tap file BPM + m_hideTimer.start(kInactiveTimeout); + m_bpmTapCO.set(1.0); + m_bpmTapCO.set(0.0); + }); + + m_pEditBox = make_parented(this); + m_pEditBox->setObjectName(QStringLiteral("EditBox")); + m_pEditBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_pEditBox->setLineeditAlignment(Qt::AlignHCenter | Qt::AlignTop); + // Step size, min and max are set when the spinbox is set up in switchMode(). + // Stepping via Up/Down or scroll wheel is applied immediately. + connect(m_pEditBox.get(), + &BpmSpinBox::stepped, + this, + &WBpmEditor::applySpinboxSteps); + // Use the event filter to catch Enter/Return presses to apply manually + // entered values and close the editor, as well as Esc to quit. + m_pEditBox->installEventFilter(this); + // Note: don't connect to &QDoubleSpinBox::editingFinished as that would call + // the apply slot twice: first when Enter is pressed and again when the spinbox + // is hidden (FocusOut/hide event when the current widget is switched). + + m_pModeLayout = make_parented(this); + m_pModeLayout->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + m_pModeLayout->setContentsMargins(0, 0, 0, 0); + m_pModeLayout->setSpacing(0); + m_pModeLayout->setSizeConstraint(QLayout::SetNoConstraint); + m_pModeLayout->addWidget(m_pClickOverlay.get()); + m_pModeLayout->addWidget(m_pSelectWidget.get()); + m_pModeLayout->addWidget(m_pTapButton.get()); + m_pModeLayout->addWidget(m_pEditBox.get()); + m_pModeLayout->setCurrentWidget(m_pClickOverlay.get()); + setLayout(m_pModeLayout.get()); + layout()->update(); + layout()->activate(); + + // The hide timer is started when switching to Select mode, in Tap mode when + // the cursor leaves the Tap button or after N seconds of inactivity. + m_hideTimer.setSingleShot(true); + m_hideTimer.callOnTimeout(this, [this]() { switchMode(Mode::Listen); }); + installEventFilter(this); +} + +void WBpmEditor::setup(const QDomNode& node, const SkinContext& context) { + Q_UNUSED(context); + + // Number of digits after the decimal. + context.hasNodeSelectInt(node, "NumberOfDigits", &m_spinboxDecimals); + m_pEditBox->setDecimals(m_spinboxDecimals); + + // TODO Check if we need to set the scale factor for the spinbox + // double scaleFactor = context.getScaleFactor(); + // setScaleFactor(scaleFactor); + // m_pEditBox->setsc >setScaleFactor(scaleFactor); +} + +void WBpmEditor::setTapButtonTooltip(const QString& tooltip) { + m_pTapSelectButton.get()->setToolTip(tooltip); + m_pTapButton.get()->setToolTip(tooltip); +} + +void WBpmEditor::setEditButtonTooltip(const QString& tooltip) { + m_pEditSelectButton.get()->setToolTip(tooltip); + m_pEditBox.get()->setToolTip(tooltip); +} + +bool WBpmEditor::eventFilter(QObject* pObj, QEvent* pEvent) { + if (pObj == m_pEditBox.get() && pEvent->type() == QEvent::KeyPress) { + // Esc will close & reset. + // Any other keypress is forwarded. + QKeyEvent* keyEvent = static_cast(pEvent); + if (keyEvent->key() == Qt::Key_Escape) { + switchMode(Mode::Listen); + return true; + } else if (keyEvent->key() == Qt::Key_Enter || + keyEvent->key() == Qt::Key_Return) { + applySpinboxValueAndQuit(); + } + } else if (pEvent->type() == QEvent::HoverEnter) { + m_hideTimer.stop(); + } else if (pEvent->type() == QEvent::HoverLeave && + pObj != m_pEditBox.get()) { + // Don't auto-quit the spinbox when while it focus + m_hideTimer.start(kHoverLeaveTimeout); + } else if (pEvent->type() == QEvent::FocusOut) { + // Only the spinbox can have focus - quit and discard pending changes + switchMode(Mode::Listen); + } + return QWidget::eventFilter(pObj, pEvent); +} + +void WBpmEditor::startEditMode() { + double fileBpm = m_fileBpmCO.get(); + // The `rateRange` ControlPotmeter allows 1-400 %. + // For rate % these are the limits, for BPM the lower limit is 1 (to keep + // the track playing) + if (fileBpm == 0.0) { // Rate mode + // Track has currently no BPM so we'll control the rate. + // Note that this might change while we edit the rate, so we set + // the '%' suffix (and we'll use it to detect BPM/rate mode when + // committing the new value). + // Also, clamp like rateRange. + double currRate = m_rateRatioCO.get(); + m_pEditBox->setSuffix(" %"); + m_pEditBox->setMinimum(1); + m_pEditBox->setMaximum(400); + m_pEditBox->setSingleStep(kRateStepSize); + m_pEditBox->setValue(currRate * 100); + // The value may be cropped/rounded if the decimals don't fit in the box. + // Store the rounded value for comparison when committing + m_pEditBox->setProperty(kOrigVal, m_pEditBox->value()); + } else { // BPM mode + double currBpm = m_bpmCO.get(); + m_pEditBox->setSuffix(""); + m_pEditBox->setMinimum(1); + m_pEditBox->setMaximum(fileBpm * 4); + m_pEditBox->setSingleStep(kBpmStepSize); + m_pEditBox->setValue(currBpm); + // The value may be cropped/rounded if the decimals don't fit in the box. + // Store the rounded value for comparison when attempting to apply typed values. + m_pEditBox->setProperty(kOrigVal, m_pEditBox->value()); + } + + m_pModeLayout->setCurrentWidget(m_pEditBox.get()); + m_pEditBox->setFocus(); + m_pEditBox->selectAll(); +} + +void WBpmEditor::applySpinboxSteps(int steps) { + // This ignores the spinbox value after Up/Down steps and applies +- steps + // sto the COs directly. + // The purpose is to allow us to return to the initial BPM/rate, eg. center, + // with Up/Down steps (without intermediate manual changes). + // With default QDoubleSpinBox behavior this does not work due to rounding. + + if (m_pEditBox->suffix().isEmpty()) { + // No suffix means we're in BPM mode + double newValue = m_bpmCO.get() + (steps * kBpmStepSize); + m_bpmCO.set(newValue); + m_pEditBox->setValue(newValue); + } else { + // Rate mode + double newValue = m_rateRatioCO.get() + (steps * kRateStepSize); + m_rateRatioCO.set(newValue); + m_pEditBox->setValue(newValue * 100); + } + m_pEditBox->setProperty(kOrigVal, m_pEditBox->value()); +} + +void WBpmEditor::applySpinboxValueAndQuit() { + // Filter no-op: avoid shifting rate/BPM due to rounding when the + // original value has more decimals than the spinbox can display + const QVariant origValueVar = m_pEditBox->property(kOrigVal); + VERIFY_OR_DEBUG_ASSERT(origValueVar.isValid() && origValueVar.canConvert()) { + // Something went wrong during spinbox setup, quit. + // This property is cleared when switching to Listen mode. + switchMode(Mode::Listen); + return; + } + + double origValue = origValueVar.toDouble(); + double newValue = m_pEditBox->value(); + + // Note: this comparison should suffice, no need for epsilon check to + // account for floating point imprecision, eg. like this + // fabs(newValue - origValue) < (1 / pow(10, m_spinboxDecimals)) + if (newValue == origValue) { + switchMode(Mode::Listen); + return; + } + + if (m_pEditBox->suffix().isEmpty()) { + // No suffix means we're in BPM mode + m_bpmCO.set(newValue); + } else { + // Rate mode + m_rateRatioCO.set(newValue / 100); + } + + switchMode(Mode::Listen); +} + +void WBpmEditor::switchMode(Mode mode) { + m_hideTimer.stop(); + if (!m_trackLoadedCO.toBool()) { + mode = Mode::Listen; + } + switch (mode) { + case Mode::Select: + m_pModeLayout->setCurrentWidget(m_pSelectWidget.get()); + return; + case Mode::Tap: + m_pModeLayout->setCurrentWidget(m_pTapButton.get()); + return; + case Mode::Edit: { + startEditMode(); + return; + } + case Mode::Listen: + default: + m_pEditBox->setProperty(kOrigVal, QVariant()); + m_pModeLayout->setCurrentWidget(m_pClickOverlay.get()); + ControlObject::set(ConfigKey(QStringLiteral("[Library]"), + QStringLiteral("refocus_prev_widget")), + 1); + return; + } +} diff --git a/src/widget/wbpmeditor.h b/src/widget/wbpmeditor.h new file mode 100644 index 000000000000..c90522ab99cf --- /dev/null +++ b/src/widget/wbpmeditor.h @@ -0,0 +1,93 @@ +#pragma once + +#include +#include +#include +#include + +#include "control/pollingcontrolproxy.h" +#include "util/parented_ptr.h" +#include "widget/wwidget.h" + +class QPushButton; +class QDoubleSpinBox; +class QStackedLayout; +class SkinContext; + +// Custom PushButton which emits a custom signal when right-clicked +class TapPushButton : public QPushButton { + Q_OBJECT + public: + explicit TapPushButton(QWidget* parent = 0) + : QPushButton(parent) { + } + + protected: + void mousePressEvent(QMouseEvent* e) override; + + signals: + void rightClicked(); +}; + +class BpmSpinBox : public QDoubleSpinBox { + Q_OBJECT + public: + explicit BpmSpinBox(QWidget* pParent = 0) + : QDoubleSpinBox(pParent) { + } + + void setLineeditAlignment(QFlags flags) { + lineEdit()->setAlignment(flags); + } + signals: + void stepped(int steps); + + private: + void stepBy(int steps) override; +}; + +class WBpmEditor : public WWidget { + Q_OBJECT + public: + explicit WBpmEditor(const QString& group, QWidget* pParent = nullptr); + + void setup(const QDomNode& node, const SkinContext& context); + + enum class Mode { + Listen, + Select, + Tap, + Edit, + }; + + void setTapButtonTooltip(const QString& tooltip); + void setEditButtonTooltip(const QString& tooltip); + + private slots: + void switchMode(Mode mode); + + private: + bool eventFilter(QObject* pObj, QEvent* pEvent) override; + void startEditMode(); + void applySpinboxSteps(int steps); + void applySpinboxValueAndQuit(); + + PollingControlProxy m_tempoTapCO; + PollingControlProxy m_bpmTapCO; + PollingControlProxy m_trackLoadedCO; + PollingControlProxy m_bpmCO; + PollingControlProxy m_fileBpmCO; + PollingControlProxy m_rateRatioCO; + + parented_ptr m_pModeLayout; + parented_ptr m_pClickOverlay; + parented_ptr m_pSelectWidget; + parented_ptr m_pTapSelectButton; + parented_ptr m_pEditSelectButton; + parented_ptr m_pTapButton; + parented_ptr m_pEditBox; + + QTimer m_hideTimer; + + int m_spinboxDecimals; +}; diff --git a/src/widget/wcuemenupopup.cpp b/src/widget/wcuemenupopup.cpp index 6f8f1cab5ee3..1e69059f89b7 100644 --- a/src/widget/wcuemenupopup.cpp +++ b/src/widget/wcuemenupopup.cpp @@ -2,12 +2,21 @@ #include #include +#include #include "control/controlobject.h" #include "moc_wcuemenupopup.cpp" #include "track/track.h" -void CueTypePushButton::mousePressEvent(QMouseEvent* e) { +namespace { +const ConfigKey kHotcueDefaultColorIndexConfigKey("[Controls]", "HotcueDefaultColorIndex"); +const ConfigKey kLoopDefaultColorIndexConfigKey("[Controls]", "LoopDefaultColorIndex"); +const ConfigKey kJumpDefaultColorIndexConfigKey("[Controls]", "jump_default_color_index"); + +constexpr mixxx::audio::FrameDiff_t kMinimumAudibleLoopSizeFrames = 150; +} // namespace + +void CueMenuPushButton::mousePressEvent(QMouseEvent* e) { if (e->type() == QEvent::MouseButtonPress && e->button() == Qt::RightButton) { emit rightClicked(); return; @@ -15,8 +24,50 @@ void CueTypePushButton::mousePressEvent(QMouseEvent* e) { QPushButton::mousePressEvent(e); } +void WCueMenuPopup::updateTypeAndColorIfDefault(mixxx::CueType newType) { + auto hotcueColorPalette = + m_colorPaletteSettings.getHotcueColorPalette(); + int colorIndex; + switch (m_pCue->getType()) { + default: + colorIndex = m_pConfig->getValue(kHotcueDefaultColorIndexConfigKey, -1); + break; + case mixxx::CueType::Loop: + colorIndex = m_pConfig->getValue(kLoopDefaultColorIndexConfigKey, -1); + break; + case mixxx::CueType::Jump: + colorIndex = m_pConfig->getValue(kJumpDefaultColorIndexConfigKey, -1); + break; + } + auto defaultColor = + (colorIndex < 0 || colorIndex >= hotcueColorPalette.size()) + ? hotcueColorPalette.defaultColor() + : hotcueColorPalette.at(colorIndex); + m_pCue->setType(newType); + if (m_pCue->getColor() != defaultColor) { + return; + } + switch (newType) { + default: + colorIndex = m_pConfig->getValue(kHotcueDefaultColorIndexConfigKey, -1); + break; + case mixxx::CueType::Loop: + colorIndex = m_pConfig->getValue(kLoopDefaultColorIndexConfigKey, -1); + break; + case mixxx::CueType::Jump: + colorIndex = m_pConfig->getValue(kJumpDefaultColorIndexConfigKey, -1); + break; + } + if (colorIndex < 0 || colorIndex >= hotcueColorPalette.size()) { + m_pCue->setColor(hotcueColorPalette.defaultColor()); + } else { + m_pCue->setColor(hotcueColorPalette.at(colorIndex)); + } +} + WCueMenuPopup::WCueMenuPopup(UserSettingsPointer pConfig, QWidget* parent) : QWidget(parent), + m_pConfig(pConfig), m_colorPaletteSettings(ColorPaletteSettings(pConfig)), m_pBeatLoopSize(ControlFlag::AllowMissingOrInvalid), m_pPlayPos(ControlFlag::AllowMissingOrInvalid), @@ -54,29 +105,51 @@ WCueMenuPopup::WCueMenuPopup(UserSettingsPointer pConfig, QWidget* parent) this, &WCueMenuPopup::slotChangeCueColor); - m_pDeleteCue = std::make_unique("", this); + m_pDeleteCue = std::make_unique(this); m_pDeleteCue->setToolTip(tr("Delete this cue")); m_pDeleteCue->setObjectName("CueDeleteButton"); connect(m_pDeleteCue.get(), &QPushButton::clicked, this, &WCueMenuPopup::slotDeleteCue); - m_pSavedLoopCue = std::make_unique(this); - m_pSavedLoopCue->setToolTip( - tr("Toggle this cue type between normal cue and saved loop") + - "\n\n" + - tr("Left-click: Use the old size or the current beatloop size as the loop size") + + m_pStandardCue = std::make_unique(this); + m_pStandardCue->setToolTip( + tr("Turn this cue into a regular hotcue")); + m_pStandardCue->setObjectName("CueStandardButton"); + m_pStandardCue->setCheckable(true); + connect(m_pStandardCue.get(), + &CueMenuPushButton::clicked, + this, + &WCueMenuPopup::slotStandardCue); + + m_pSavedLoopCue = std::make_unique(this); + m_pSavedLoopCue->setToolTip(tr("Turn this cue into a saved loop") + "\n\n" + + tr("Left-click: Use the old size if known or the current beatloop " + "size as the loop size") + "\n" + - tr("Right-click: Use the current play position as loop end if it is after the cue")); + tr("Right-click: Use the current play position as new loop end if " + "it is after the cue")); m_pSavedLoopCue->setObjectName("CueSavedLoopButton"); m_pSavedLoopCue->setCheckable(true); connect(m_pSavedLoopCue.get(), - &CueTypePushButton::clicked, + &CueMenuPushButton::clicked, this, &WCueMenuPopup::slotSavedLoopCueAuto); connect(m_pSavedLoopCue.get(), - &CueTypePushButton::rightClicked, + &CueMenuPushButton::rightClicked, this, &WCueMenuPopup::slotSavedLoopCueManual); + m_pSavedJumpCue = std::make_unique(this); + m_pSavedJumpCue->setObjectName("CueSavedJumpButton"); + m_pSavedJumpCue->setCheckable(true); + connect(m_pSavedJumpCue.get(), + &CueMenuPushButton::clicked, + this, + &WCueMenuPopup::slotSavedJumpCueAuto); + connect(m_pSavedJumpCue.get(), + &CueMenuPushButton::rightClicked, + this, + &WCueMenuPopup::slotSavedJumpCueManual); + QHBoxLayout* pLabelLayout = new QHBoxLayout(); pLabelLayout->addWidget(m_pCueNumber.get()); pLabelLayout->addStretch(1); @@ -89,8 +162,11 @@ WCueMenuPopup::WCueMenuPopup(UserSettingsPointer pConfig, QWidget* parent) QVBoxLayout* pRightLayout = new QVBoxLayout(); pRightLayout->addWidget(m_pDeleteCue.get()); + pRightLayout->addWidget(m_pStandardCue.get()); pRightLayout->addStretch(1); pRightLayout->addWidget(m_pSavedLoopCue.get()); + pRightLayout->addStretch(1); + pRightLayout->addWidget(m_pSavedJumpCue.get()); QHBoxLayout* pMainLayout = new QHBoxLayout(); pMainLayout->addLayout(pLeftLayout); @@ -142,22 +218,83 @@ void WCueMenuPopup::slotUpdate() { QString positionText = ""; Cue::StartAndEndPositions pos = m_pCue->getStartAndEndPosition(); - if (pos.startPosition.isValid()) { + if (pos.startPosition.isValid() && pos.endPosition.isValid() && + m_pCue->getType() != mixxx::CueType::HotCue) { double startPositionSeconds = pos.startPosition.value() / m_pTrack->getSampleRate(); - positionText = mixxx::Duration::formatTime(startPositionSeconds, mixxx::Duration::Precision::CENTISECONDS); - if (pos.endPosition.isValid() && m_pCue->getType() != mixxx::CueType::HotCue) { - double endPositionSeconds = pos.endPosition.value() / m_pTrack->getSampleRate(); - positionText = QString("%1 - %2").arg( - positionText, - mixxx::Duration::formatTime(endPositionSeconds, mixxx::Duration::Precision::CENTISECONDS) - ); - } + double endPositionSeconds = pos.endPosition.value() / m_pTrack->getSampleRate(); + QString startPositionText = + mixxx::Duration::formatTime(std::min(startPositionSeconds, endPositionSeconds), + mixxx::Duration::Precision::CENTISECONDS); + QString endPositionText = mixxx::Duration::formatTime( + std::max(startPositionSeconds, endPositionSeconds), + mixxx::Duration::Precision:: + CENTISECONDS); + positionText = + QString("%1 %2 %3") + .arg(startPositionText, + m_pCue->getType() == mixxx::CueType::Loop + ? "-" + : (startPositionSeconds < endPositionSeconds + ? "⟵" + : "⟶"), + endPositionText); + } else { + double startPositionSeconds = pos.startPosition.value() / m_pTrack->getSampleRate(); + positionText = mixxx::Duration::formatTime(startPositionSeconds, + mixxx::Duration::Precision::CENTISECONDS); } m_pCuePosition->setText(positionText); m_pEditLabel->setText(m_pCue->getLabel()); m_pColorPicker->setSelectedColor(m_pCue->getColor()); + m_pStandardCue->setChecked(m_pCue->getType() == mixxx::CueType::HotCue); m_pSavedLoopCue->setChecked(m_pCue->getType() == mixxx::CueType::Loop); + m_pSavedJumpCue->setChecked(m_pCue->getType() == mixxx::CueType::Jump); + QString direction; + if (m_pCue->getType() == mixxx::CueType::HotCue) { + // Use forward/backward icon if the playposition is before/after + // the hotcue position + auto cueStartEnd = m_pCue->getStartAndEndPosition(); + auto newPosition = cueStartEnd.endPosition; + if (!newPosition.isValid()) { + newPosition = getCurrentPlayPositionWithQuantize(); + } + if (!newPosition.isValid() || + std::abs(newPosition - cueStartEnd.startPosition) <= + kMinimumAudibleLoopSizeFrames) { + direction = "impossible"; + } else if (newPosition < cueStartEnd.startPosition) { + direction = "forward"; + } else { + direction = "backward"; + } + } else { + const bool isforward = m_pCue->getType() != mixxx::CueType::Jump || + m_pCue->getPosition() > m_pCue->getEndPosition(); + // Use forward icon if this is a saved loop, or forward/back if this + // already is a jump cue + direction = isforward + ? "forward" + : "backward"; + m_pSavedJumpCue->setToolTip( + //: \n is a linebreak. Try to not to extend the translation + //: beyond the length of the longest source line so the + //: tooltip remains compact. + (isforward ? tr("Turn this cue into a saved forward jump.") + : tr("Turn this cue into a saved backward jump " + "(one shot loop).")) + + "\n\n" + + tr("Left-click: Use the old size if known or the current " + "play position as jump start position\n" + "If this is already a jump cue, swap the jump position " + "and the cue/target position.") + + "\n\n" + + tr("Right-click: use current play position as new jump " + "start position")); + } + m_pSavedJumpCue->setProperty("direction", direction); + m_pSavedJumpCue->style()->polish(m_pSavedJumpCue.get()); + m_pSavedJumpCue->repaint(); } else { m_pTrack.reset(); m_pCue.reset(); @@ -198,40 +335,20 @@ void WCueMenuPopup::slotDeleteCue() { hide(); } -void WCueMenuPopup::slotSavedLoopCueAuto() { +void WCueMenuPopup::slotStandardCue() { VERIFY_OR_DEBUG_ASSERT(m_pCue != nullptr) { return; } VERIFY_OR_DEBUG_ASSERT(m_pTrack != nullptr) { return; } - VERIFY_OR_DEBUG_ASSERT(m_pBeatLoopSize.valid()) { - return; - } - if (m_pCue->getType() == mixxx::CueType::Loop) { - m_pCue->setType(mixxx::CueType::HotCue); - } else { - auto cueStartEnd = m_pCue->getStartAndEndPosition(); - if (!cueStartEnd.endPosition.isValid() || - cueStartEnd.endPosition <= cueStartEnd.startPosition) { - double beatloopSize = m_pBeatLoopSize.get(); - const mixxx::BeatsPointer pBeats = m_pTrack->getBeats(); - if (beatloopSize <= 0 || !pBeats) { - return; - } - auto position = pBeats->findNBeatsFromPosition( - cueStartEnd.startPosition, beatloopSize); - if (position <= m_pCue->getPosition()) { - return; - } - m_pCue->setEndPosition(position); - } - m_pCue->setType(mixxx::CueType::Loop); + if (m_pCue->getType() != mixxx::CueType::HotCue) { + updateTypeAndColorIfDefault(mixxx::CueType::HotCue); } slotUpdate(); } -void WCueMenuPopup::slotSavedLoopCueManual() { +void WCueMenuPopup::slotSavedLoopCueAuto() { VERIFY_OR_DEBUG_ASSERT(m_pCue != nullptr) { return; } @@ -241,21 +358,121 @@ void WCueMenuPopup::slotSavedLoopCueManual() { VERIFY_OR_DEBUG_ASSERT(m_pBeatLoopSize.valid()) { return; } + auto cueStartEnd = m_pCue->getStartAndEndPosition(); + // If we are changing the cue type from a jump, we need to permute the positions + if (m_pCue->getType() == mixxx::CueType::Jump) { + auto endPosition = cueStartEnd.endPosition; + if (cueStartEnd.endPosition < cueStartEnd.startPosition) { + // Only swap value if this is a forward jump + cueStartEnd.endPosition = cueStartEnd.startPosition; + cueStartEnd.startPosition = endPosition; + } + m_pCue->setStartAndEndPosition(cueStartEnd.startPosition, cueStartEnd.endPosition); + } + if (!cueStartEnd.endPosition.isValid() || + cueStartEnd.endPosition <= cueStartEnd.startPosition) { + double beatloopSize = m_pBeatLoopSize.get(); + const mixxx::BeatsPointer pBeats = m_pTrack->getBeats(); + if (beatloopSize <= 0 || !pBeats) { + return; + } + auto position = pBeats->findNBeatsFromPosition( + cueStartEnd.startPosition, beatloopSize); + if (position <= m_pCue->getPosition()) { + return; + } + m_pCue->setEndPosition(position); + } + updateTypeAndColorIfDefault(mixxx::CueType::Loop); + slotUpdate(); +} + +mixxx::audio::FramePos WCueMenuPopup::getCurrentPlayPositionWithQuantize() const { const mixxx::BeatsPointer pBeats = m_pTrack->getBeats(); auto position = mixxx::audio::FramePos::fromEngineSamplePos( m_pPlayPos.get() * m_pTrackSample.get()); if (m_pQuantizeEnabled.toBool() && pBeats) { mixxx::audio::FramePos nextBeatPosition, prevBeatPosition; pBeats->findPrevNextBeats(position, &prevBeatPosition, &nextBeatPosition, false); - position = (nextBeatPosition - position > position - prevBeatPosition) + return (nextBeatPosition - position > position - prevBeatPosition) ? prevBeatPosition : nextBeatPosition; } - if (position <= m_pCue->getPosition()) { + return position; +} + +void WCueMenuPopup::slotSavedLoopCueManual() { + VERIFY_OR_DEBUG_ASSERT(m_pCue != nullptr) { + return; + } + VERIFY_OR_DEBUG_ASSERT(m_pTrack != nullptr) { + return; + } + // If we are changing the cue type from a jump, we need to permute the + // positions if it wasn't going backward + if (m_pCue->getType() == mixxx::CueType::Jump && + m_pCue->getPosition() > m_pCue->getEndPosition()) { + auto cueStartEnd = m_pCue->getStartAndEndPosition(); + auto endPosition = cueStartEnd.endPosition; + cueStartEnd.endPosition = cueStartEnd.startPosition; + cueStartEnd.startPosition = endPosition; + m_pCue->setStartAndEndPosition(cueStartEnd.startPosition, cueStartEnd.endPosition); + } + auto newPosition = getCurrentPlayPositionWithQuantize(); + if (newPosition <= m_pCue->getPosition()) { + return; + } + m_pCue->setEndPosition(newPosition); + updateTypeAndColorIfDefault(mixxx::CueType::Loop); + slotUpdate(); +} + +void WCueMenuPopup::slotSavedJumpCueAuto() { + VERIFY_OR_DEBUG_ASSERT(m_pCue != nullptr) { + slotUpdate(); + return; + } + VERIFY_OR_DEBUG_ASSERT(m_pTrack != nullptr) { + slotUpdate(); + return; + } + auto cueStartEnd = m_pCue->getStartAndEndPosition(); + // If we are changing the cue type from a loop, we need to permute the position + // Also, if the type is already a jump, we swap to the to/from point + if (m_pCue->getType() == mixxx::CueType::Loop || m_pCue->getType() == mixxx::CueType::Jump) { + auto endPosition = cueStartEnd.endPosition; + cueStartEnd.endPosition = cueStartEnd.startPosition; + cueStartEnd.startPosition = endPosition; + } + if (!cueStartEnd.endPosition.isValid()) { + auto newPosition = getCurrentPlayPositionWithQuantize(); + if (std::abs(newPosition - cueStartEnd.startPosition) <= + kMinimumAudibleLoopSizeFrames) { + slotUpdate(); + return; + } + cueStartEnd.endPosition = newPosition; + } + m_pCue->setStartAndEndPosition(cueStartEnd.startPosition, cueStartEnd.endPosition); + updateTypeAndColorIfDefault(mixxx::CueType::Jump); + slotUpdate(); +} + +void WCueMenuPopup::slotSavedJumpCueManual() { + VERIFY_OR_DEBUG_ASSERT(m_pCue != nullptr) { + return; + } + VERIFY_OR_DEBUG_ASSERT(m_pTrack != nullptr) { + return; + } + auto cueStartEnd = m_pCue->getStartAndEndPosition(); + auto newPosition = getCurrentPlayPositionWithQuantize(); + if (newPosition == cueStartEnd.startPosition) { return; } - m_pCue->setEndPosition(position); - m_pCue->setType(mixxx::CueType::Loop); + cueStartEnd.endPosition = newPosition; + m_pCue->setStartAndEndPosition(cueStartEnd.startPosition, cueStartEnd.endPosition); + updateTypeAndColorIfDefault(mixxx::CueType::Jump); slotUpdate(); } diff --git a/src/widget/wcuemenupopup.h b/src/widget/wcuemenupopup.h index 4f20d171ea5f..87617137263a 100644 --- a/src/widget/wcuemenupopup.h +++ b/src/widget/wcuemenupopup.h @@ -15,10 +15,10 @@ class ControlProxy; // Custom PushButton which emit a custom signal when right-clicked -class CueTypePushButton : public QPushButton { +class CueMenuPushButton : public QPushButton { Q_OBJECT public: - explicit CueTypePushButton(QWidget* parent = 0) + explicit CueMenuPushButton(QWidget* parent = 0) : QPushButton(parent) { } @@ -64,6 +64,9 @@ class WCueMenuPopup : public QWidget { void slotEditLabel(); void slotDeleteCue(); void slotUpdate(); + void slotStandardCue(); + void slotSavedJumpCueManual(); + void slotSavedJumpCueAuto(); /// This slot is called when the saved loop button is being left pressed, /// which effectively toggle the cue loop between standard cue and saved /// loop. If the cue was never a saved loop, it will use the current @@ -77,6 +80,10 @@ class WCueMenuPopup : public QWidget { void slotChangeCueColor(mixxx::RgbColor::optional_t color); private: + void updateTypeAndColorIfDefault(mixxx::CueType newType); + mixxx::audio::FramePos getCurrentPlayPositionWithQuantize() const; + + UserSettingsPointer m_pConfig; ColorPaletteSettings m_colorPaletteSettings; PollingControlProxy m_pBeatLoopSize; PollingControlProxy m_pPlayPos; @@ -89,8 +96,10 @@ class WCueMenuPopup : public QWidget { std::unique_ptr m_pCuePosition; std::unique_ptr m_pEditLabel; std::unique_ptr m_pColorPicker; - std::unique_ptr m_pDeleteCue; - std::unique_ptr m_pSavedLoopCue; + std::unique_ptr m_pDeleteCue; + std::unique_ptr m_pStandardCue; + std::unique_ptr m_pSavedLoopCue; + std::unique_ptr m_pSavedJumpCue; protected: void closeEvent(QCloseEvent* event) override; diff --git a/src/widget/whotcuebutton.cpp b/src/widget/whotcuebutton.cpp index 50308a2d0952..6de7c8469f60 100644 --- a/src/widget/whotcuebutton.cpp +++ b/src/widget/whotcuebutton.cpp @@ -9,6 +9,7 @@ #include #include +#include "engine/controls/cuecontrol.h" #include "mixer/playerinfo.h" #include "moc_whotcuebutton.cpp" #include "skin/legacy/skincontext.h" @@ -94,6 +95,23 @@ void WHotcueButton::setup(const QDomNode& node, const SkinContext& context) { m_pCoType->connectValueChanged(this, &WHotcueButton::slotTypeChanged); slotTypeChanged(m_pCoType->get()); + m_pCoPosition = make_parented( + createConfigKey(QStringLiteral("position")), + this, + ControlFlag::NoAssertIfMissing); + m_pCoPosition->connectValueChanged(this, &WHotcueButton::slotUpdateDirection); + m_pCoEndPosition = make_parented( + createConfigKey(QStringLiteral("endposition")), + this, + ControlFlag::NoAssertIfMissing); + m_pCoEndPosition->connectValueChanged(this, &WHotcueButton::slotUpdateDirection); + slotUpdateDirection(); + + m_pCoActive = make_parented( + createConfigKey(QStringLiteral("status")), + this, + ControlFlag::NoAssertIfMissing); + addConnection(std::make_unique( this, getLeftClickConfigKey(), // "activate" @@ -116,6 +134,12 @@ void WHotcueButton::setup(const QDomNode& node, const SkinContext& context) { } } +bool WHotcueButton::isActive() const { + return m_pCoActive && + m_pCoActive->get() == + static_cast(HotcueControl::Status::Active); +} + void WHotcueButton::mousePressEvent(QMouseEvent* pEvent) { const bool rightClick = pEvent->button() == Qt::RightButton; if (rightClick) { @@ -274,6 +298,13 @@ void WHotcueButton::slotColorChanged(double color) { restyleAndRepaint(); } +void WHotcueButton::slotUpdateDirection(double) { + m_direction = m_pCoPosition->get() >= m_pCoEndPosition->get() + ? QStringLiteral("forward") + : QStringLiteral("backward"); + restyleAndRepaint(); +} + void WHotcueButton::slotTypeChanged(double type) { switch (static_cast(static_cast(type))) { case mixxx::CueType::Invalid: diff --git a/src/widget/whotcuebutton.h b/src/widget/whotcuebutton.h index 0a95d264197b..f2f660b4aa7e 100644 --- a/src/widget/whotcuebutton.h +++ b/src/widget/whotcuebutton.h @@ -27,6 +27,10 @@ class WHotcueButton : public WPushButton { Q_PROPERTY(bool light MEMBER m_bCueColorIsLight); Q_PROPERTY(bool dark MEMBER m_bCueColorIsDark); Q_PROPERTY(QString type MEMBER m_type); + Q_PROPERTY(QString direction MEMBER m_direction); + Q_PROPERTY(bool active READ isActive); + + bool isActive() const; protected: void mousePressEvent(QMouseEvent* pEvent) override; @@ -39,6 +43,7 @@ class WHotcueButton : public WPushButton { private slots: void slotColorChanged(double color); void slotTypeChanged(double type); + void slotUpdateDirection(double = 0); private: ConfigKey createConfigKey(const QString& name); @@ -49,11 +54,15 @@ class WHotcueButton : public WPushButton { bool m_hoverCueColor; parented_ptr m_pCoColor; parented_ptr m_pCoType; + parented_ptr m_pCoPosition; + parented_ptr m_pCoEndPosition; + parented_ptr m_pCoActive; parented_ptr m_pCueMenuPopup; int m_cueColorDimThreshold; bool m_bCueColorDimmed; bool m_bCueColorIsLight; bool m_bCueColorIsDark; QString m_type; + QString m_direction; QMargins m_dndRectMargins; }; diff --git a/src/widget/wkey.cpp b/src/widget/wkey.cpp index 3186e2275340..b335f6b19e5d 100644 --- a/src/widget/wkey.cpp +++ b/src/widget/wkey.cpp @@ -1,28 +1,37 @@ #include "widget/wkey.h" +#include +#include + #include "library/library_prefs.h" #include "moc_wkey.cpp" +#include "preferences/usersettings.h" #include "skin/legacy/skincontext.h" #include "track/keyutils.h" -WKey::WKey(const QString& group, QWidget* pParent) +WKey::WKey(const QString& group, UserSettingsPointer pConfig, QWidget* pParent) : WLabel(pParent), - m_dOldValue(0), m_keyNotation(mixxx::library::prefs::kKeyNotationConfigKey, this), m_engineKeyDistance(group, "visual_key_distance", this, - ControlFlag::AllowMissingOrInvalid) { - setValue(m_dOldValue); + ControlFlag::AllowMissingOrInvalid), + m_engineKey(group, + "key", + this, + ControlFlag::AllowMissingOrInvalid), + m_colorPaletteSettings(pConfig) { + setValue(); m_keyNotation.connectValueChanged(this, &WKey::keyNotationChanged); m_engineKeyDistance.connectValueChanged(this, &WKey::setCents); } void WKey::onConnectedControlChanged(double dParameter, double dValue) { Q_UNUSED(dParameter); + Q_UNUSED(dValue); // Enums are not currently represented using parameter space so it doesn't // make sense to use the parameter here yet. - setValue(dValue); + setValue(); } void WKey::setup(const QDomNode& node, const SkinContext& context) { @@ -31,23 +40,21 @@ void WKey::setup(const QDomNode& node, const SkinContext& context) { m_displayKey = context.selectBool(node, "DisplayKey", true); } -void WKey::setValue(double dValue) { - m_dOldValue = dValue; - mixxx::track::io::key::ChromaticKey key = - KeyUtils::keyFromNumericValue(dValue); - if (key != mixxx::track::io::key::INVALID) { +void WKey::setValue() { + m_key = KeyUtils::keyFromNumericValue(m_engineKey.get()); + m_diff_cents = m_engineKeyDistance.get(); + if (m_key != mixxx::track::io::key::INVALID) { // Render this key with the user-provided notation. QString keyStr = ""; if (m_displayKey) { - keyStr = KeyUtils::keyToString(key); + keyStr = KeyUtils::keyToString(m_key); } if (m_displayCents) { - double diff_cents = m_engineKeyDistance.get(); - int cents_to_display = static_cast(diff_cents * 100); + int cents_to_display = static_cast(m_diff_cents * 100); char sign = ' '; - if (diff_cents < 0) { + if (m_diff_cents < 0) { sign = '-'; - } else if (diff_cents > 0) { + } else if (m_diff_cents > 0) { sign = '+'; } keyStr.append(QString(" %1%2c").arg(sign).arg(qAbs(cents_to_display))); @@ -56,15 +63,73 @@ void WKey::setValue(double dValue) { } else { setText(""); } + update(); } void WKey::setCents() { - setValue(m_dOldValue); + setValue(); } void WKey::keyNotationChanged(double dKeyNotationValue) { Q_UNUSED(dKeyNotationValue); // NOTE: dKeyNotationValue is the index of the key notation type, NOT the // key itself, so we intentionally set the old value again to update the UI. - setValue(m_dOldValue); + setValue(); +} + +void WKey::paintEvent(QPaintEvent* event) { + if (m_key == mixxx::track::io::key::INVALID || !m_colorPaletteSettings.getKeyColorsEnabled()) { + WLabel::paintEvent(event); + return; + } + + ColorPalette keyColorPalette = m_colorPaletteSettings.getConfigKeyColorPalette(); + + QColor colorTop, colorBottom; + double splitPoint = 0; // 'height' of top color + if (m_diff_cents < 0) { + colorTop = KeyUtils::keyToColor(m_key, keyColorPalette); + colorBottom = KeyUtils::keyToColor(KeyUtils::scaleKeySteps(m_key, -1), keyColorPalette); + splitPoint = m_diff_cents + 1; + } else { + colorTop = KeyUtils::keyToColor(KeyUtils::scaleKeySteps(m_key, 1), keyColorPalette); + colorBottom = KeyUtils::keyToColor(m_key, keyColorPalette); + splitPoint = m_diff_cents; + } + + QStyleOption option; + option.initFrom(this); + QStylePainter painter(this); + + const QStyle* pStyle = style(); + const QRect contRect = pStyle->subElementRect(QStyle::SE_FrameContents, &option, this); + + const int rectWidth = 4; + const int splitHeight = static_cast(contRect.height() * splitPoint); + + painter.fillRect(contRect.left(), + contRect.top(), + rectWidth, + splitHeight, + colorTop); + + painter.fillRect(contRect.left(), + splitHeight + 1, + rectWidth, + contRect.height() - splitHeight, + colorBottom); + + painter.setPen(option.palette.text().color()); + + QString elidedText = option.fontMetrics.elidedText( + text(), + Qt::ElideRight, + width() - rectWidth); + + painter.drawText(rectWidth, + contRect.top(), + contRect.width() - rectWidth, + contRect.height(), + Qt::AlignCenter, + elidedText); } diff --git a/src/widget/wkey.h b/src/widget/wkey.h index 99215b1fa9e1..23723316eb7c 100644 --- a/src/widget/wkey.h +++ b/src/widget/wkey.h @@ -1,25 +1,31 @@ #pragma once -#include "widget/wlabel.h" #include "control/controlproxy.h" +#include "preferences/colorpalettesettings.h" +#include "proto/keys.pb.h" +#include "widget/wlabel.h" class WKey : public WLabel { Q_OBJECT public: - explicit WKey(const QString& group, QWidget* pParent = nullptr); + explicit WKey(const QString& group, UserSettingsPointer pConfig, QWidget* pParent = nullptr); void onConnectedControlChanged(double dParameter, double dValue) override; void setup(const QDomNode& node, const SkinContext& context) override; private slots: - void setValue(double dValue); + void setValue(); void keyNotationChanged(double dValue); void setCents(); private: - double m_dOldValue; + double m_diff_cents; bool m_displayCents; bool m_displayKey; ControlProxy m_keyNotation; ControlProxy m_engineKeyDistance; + ControlProxy m_engineKey; + ColorPaletteSettings m_colorPaletteSettings; + mixxx::track::io::key::ChromaticKey m_key; + void paintEvent(QPaintEvent* event) override; }; diff --git a/src/widget/wlibrary.cpp b/src/widget/wlibrary.cpp index 0566e91a916f..17773df5138b 100644 --- a/src/widget/wlibrary.cpp +++ b/src/widget/wlibrary.cpp @@ -55,9 +55,6 @@ void WLibrary::switchToView(const QString& name) { const auto lock = lockMutex(&m_mutex); //qDebug() << "WLibrary::switchToView" << name; - LibraryView* pOldLibrartView = dynamic_cast( - currentWidget()); - QWidget* pWidget = m_viewMap.value(name, nullptr); if (pWidget != nullptr) { LibraryView* pLibraryView = dynamic_cast(pWidget); @@ -68,8 +65,10 @@ void WLibrary::switchToView(const QString& name) { return; } if (currentWidget() != pWidget) { - if (pOldLibrartView) { - pOldLibrartView->saveCurrentViewState(); + LibraryView* pOldLibraryView = dynamic_cast( + currentWidget()); + if (pOldLibraryView) { + pOldLibraryView->saveCurrentViewState(); } //qDebug() << "WLibrary::setCurrentWidget" << name; setCurrentWidget(pWidget); diff --git a/src/widget/wlibrary.h b/src/widget/wlibrary.h index ebce2f45fa63..64c68cfe6f38 100644 --- a/src/widget/wlibrary.h +++ b/src/widget/wlibrary.h @@ -61,7 +61,8 @@ class WLibrary : public QStackedWidget, public WBaseWidget { } signals: - FocusWidget setLibraryFocus(FocusWidget newFocus); + FocusWidget setLibraryFocus(FocusWidget newFocus, + Qt::FocusReason focusReason = Qt::OtherFocusReason); public slots: // Show the view registered with the given name. Does nothing if the current diff --git a/src/widget/wlibrarysidebar.cpp b/src/widget/wlibrarysidebar.cpp index 95c9e82ec3cb..2d418e29c310 100644 --- a/src/widget/wlibrarysidebar.cpp +++ b/src/widget/wlibrarysidebar.cpp @@ -351,8 +351,8 @@ void WLibrarySidebar::focusInEvent(QFocusEvent* event) { QTreeView::focusInEvent(event); } -void WLibrarySidebar::selectIndex(const QModelIndex& index) { - //qDebug() << "WLibrarySidebar::selectIndex" << index; +void WLibrarySidebar::selectIndex(const QModelIndex& index, bool scrollToIndex) { + // qDebug() << "WLibrarySidebar::selectIndex" << index << scrollToIndex; if (!index.isValid()) { return; } @@ -365,8 +365,18 @@ void WLibrarySidebar::selectIndex(const QModelIndex& index) { expand(index.parent()); } setSelectionModel(pModel); + if (!scrollToIndex) { + // With auto-scroll enabled, setCurrentIndex() would scroll there. + // Disable (and re-enable if we don't want to scroll, e.g. when selecting + // AutoDJ from the menubar or during startup + setAutoScroll(false); + } setCurrentIndex(index); - scrollTo(index); + if (scrollToIndex) { + scrollTo(index); + } else { + setAutoScroll(true); + } } /// Selects a child index from a feature and ensures visibility diff --git a/src/widget/wlibrarysidebar.h b/src/widget/wlibrarysidebar.h index f74345c5f22a..a521df6e4d96 100644 --- a/src/widget/wlibrarysidebar.h +++ b/src/widget/wlibrarysidebar.h @@ -30,7 +30,7 @@ class WLibrarySidebar : public QTreeView, public WBaseWidget { bool isFeatureRootIndexSelected(LibraryFeature* pFeature); public slots: - void selectIndex(const QModelIndex&); + void selectIndex(const QModelIndex& index, bool scrollToIndex = true); void selectChildIndex(const QModelIndex&, bool selectItem = true); void slotSetFont(const QFont& font); @@ -38,7 +38,8 @@ class WLibrarySidebar : public QTreeView, public WBaseWidget { void rightClicked(const QPoint&, const QModelIndex&); void renameItem(const QModelIndex&); void deleteItem(const QModelIndex&); - FocusWidget setLibraryFocus(FocusWidget newFocus); + FocusWidget setLibraryFocus(FocusWidget newFocus, + Qt::FocusReason focusReason = Qt::OtherFocusReason); protected: bool event(QEvent* pEvent) override; diff --git a/src/widget/wmainmenubar.cpp b/src/widget/wmainmenubar.cpp index 0dbe8dad1b55..71a00aa61609 100644 --- a/src/widget/wmainmenubar.cpp +++ b/src/widget/wmainmenubar.cpp @@ -169,6 +169,34 @@ void WMainMenuBar::initialize() { pLibraryMenu->addSeparator(); + QString searchHereTitle = tr("Search in Current View..."); + QString searchHereText = tr("Search for tracks in the current library view"); + auto* pSearchHere = new QAction(searchHereTitle, this); + pSearchHere->setShortcut(QKeySequence(m_pKbdConfig->getValue( + ConfigKey("[KeyboardShortcuts]", "LibraryMenu_SearchInCurrentView"), + tr("Ctrl+f")))); + pSearchHere->setShortcutContext(Qt::ApplicationShortcut); + pSearchHere->setStatusTip(searchHereText); + pSearchHere->setWhatsThis(buildWhatsThis(searchHereTitle, searchHereText)); + connect(pSearchHere, &QAction::triggered, this, &WMainMenuBar::searchInCurrentView); + pLibraryMenu->addAction(pSearchHere); + + QString searchAllTitle = tr("Search in Tracks Library..."); + QString searchAllText = + tr("Search in the internal track collection under \"Tracks\" in " + "the library"); + auto* pSearchAll = new QAction(searchAllTitle, this); + pSearchAll->setShortcut(QKeySequence(m_pKbdConfig->getValue( + ConfigKey("[KeyboardShortcuts]", "LibraryMenu_SearchInAllTracks"), + tr("Ctrl+Shift+F")))); + pSearchAll->setShortcutContext(Qt::ApplicationShortcut); + pSearchAll->setStatusTip(searchAllText); + pSearchAll->setWhatsThis(buildWhatsThis(searchAllText, searchAllText)); + connect(pSearchAll, &QAction::triggered, this, &WMainMenuBar::searchInAllTracks); + pLibraryMenu->addAction(pSearchAll); + + pLibraryMenu->addSeparator(); + QString createPlaylistTitle = tr("Create &New Playlist"); QString createPlaylistText = tr("Create a new playlist"); auto* pLibraryCreatePlaylist = new QAction(createPlaylistTitle, this); @@ -349,6 +377,20 @@ void WMainMenuBar::initialize() { pViewMenu->addSeparator(); + QString autoDJTitle = tr("Show Auto DJ"); + QString autoDJText = tr("Switch to the Auto DJ view."); + auto* pViewAutoDJ = new QAction(autoDJTitle, this); + // pViewAutoDJ->setShortcut(QKeySequence(m_pKbdConfig->getValue( + // ConfigKey("[KeyboardShortcuts]", "ViewMenu_ShowAutoDJ"), + // tr("Ctrl+9", "Menubar|View|Show Auto DJ")))); + pViewAutoDJ->setStatusTip(autoDJText); + pViewAutoDJ->setWhatsThis(buildWhatsThis(autoDJTitle, autoDJText)); + pViewAutoDJ->setCheckable(false); + connect(pViewAutoDJ, &QAction::triggered, this, &WMainMenuBar::showAutoDJ); + pViewMenu->addAction(pViewAutoDJ); + + pViewMenu->addSeparator(); + QString fullScreenTitle = tr("&Full Screen"); QString fullScreenText = tr("Display Mixxx using the full screen"); auto* pViewFullScreen = new QAction(fullScreenTitle, this); diff --git a/src/widget/wmainmenubar.h b/src/widget/wmainmenubar.h index 10c6e790fb99..913cd1918cb8 100644 --- a/src/widget/wmainmenubar.h +++ b/src/widget/wmainmenubar.h @@ -67,6 +67,9 @@ class WMainMenuBar : public QMenuBar { #ifdef __ENGINEPRIME__ void exportLibrary(); #endif + void searchInCurrentView(); + void searchInAllTracks(); + void showAutoDJ(); void menubarAutoHideChanged(bool autohide); void showAbout(); void showKeywheel(bool visible); diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index 3fa8e52171d8..283348b45efe 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -195,6 +195,8 @@ void WOverview::setup(const QDomNode& node, const SkinContext& context) { m_marks.connectSamplePositionChanged(this, &WOverview::onMarkChanged); m_marks.connectSampleEndPositionChanged(this, &WOverview::onMarkChanged); m_marks.connectVisibleChanged(this, &WOverview::onMarkChanged); + m_marks.connectTypeChanged(this, &WOverview::onMarkChanged); + m_marks.connectStatusChanged(this, &WOverview::onMarkChanged); QDomNode child = node.firstChild(); while (!child.isNull()) { @@ -485,7 +487,8 @@ void WOverview::updateCues(const QList &loadedCues) { int hotcueNumber = currentCue->getHotCue(); if ((currentCue->getType() == mixxx::CueType::HotCue || - currentCue->getType() == mixxx::CueType::Loop) && + currentCue->getType() == mixxx::CueType::Loop || + currentCue->getType() == mixxx::CueType::Jump) && hotcueNumber != Cue::kNoHotCue) { // Prepend the hotcue number to hotcues' labels QString newLabel = currentCue->getLabel(); @@ -995,6 +998,7 @@ void WOverview::drawMarks(QPainter* pPainter, const float offset, const float ga offset + static_cast(samplePosition) * gain, 0.0f, static_cast(width())); + float markStartPosition = markPosition; pMark->m_linePosition = markPosition; QLineF line; @@ -1010,15 +1014,22 @@ void WOverview::drawMarks(QPainter* pPainter, const float offset, const float ga QRectF rect; double sampleEndPosition = pMark->getSampleEndPosition(); if (sampleEndPosition > 0) { - const float markEndPosition = math_clamp( + float markEndPosition = math_clamp( offset + static_cast(sampleEndPosition) * gain, 0.0f, static_cast(width())); + // If it's a Jump cue, end is later than start for a forward jump, + // so swap positions in this case to get a valid rect for + // painting the range. + if (pMark->isJump() && + markEndPosition < markStartPosition) { + std::swap(markStartPosition, markEndPosition); + } if (m_orientation == Qt::Horizontal) { - rect.setCoords(markPosition, 0, markEndPosition, height()); + rect.setCoords(markStartPosition, 0, markEndPosition, height()); } else { - rect.setCoords(0, markPosition, width(), markEndPosition); + rect.setCoords(0, markStartPosition, width(), markEndPosition); } } @@ -1029,9 +1040,18 @@ void WOverview::drawMarks(QPainter* pPainter, const float offset, const float ga pPainter->drawLine(line); if (rect.isValid()) { - QColor loopColor = pMark->fillColor(); - loopColor.setAlphaF(0.5f); - pPainter->fillRect(rect, loopColor); + QColor rangeColor = pMark->fillColor(); + // Less opacity for inactive jump cues to not unnecessarily obstruct + // the waveform image. + // TODO Use played color for forward jumps to clarify we'll skip that region? + if (pMark->getType() == mixxx::CueType::Jump && pMark->isActive()) { + rangeColor.setAlphaF(0.5f); + } else { + rangeColor.setAlphaF(0.2f); + } + // TODO Instead of uniform painting, use different types of gradients + // loops, jump, intro/outro + pPainter->fillRect(rect, rangeColor); } if (!pMark->m_text.isEmpty()) { diff --git a/src/widget/wsearchlineedit.cpp b/src/widget/wsearchlineedit.cpp index 1d72026aa0b8..f97df536d811 100644 --- a/src/widget/wsearchlineedit.cpp +++ b/src/widget/wsearchlineedit.cpp @@ -122,12 +122,6 @@ WSearchLineEdit::WSearchLineEdit(QWidget* pParent, UserSettingsPointer pConfig) this, &WSearchLineEdit::slotClearSearch); - QShortcut* setFocusShortcut = new QShortcut(QKeySequence(tr("Ctrl+F", "Search|Focus")), this); - connect(setFocusShortcut, - &QShortcut::activated, - this, - &WSearchLineEdit::slotSetShortcutFocus); - // Set up a timer to search after a few hundred milliseconds timeout. This // stops us from thrashing the database if you type really fast. m_debouncingTimer.setSingleShot(true); @@ -217,31 +211,35 @@ void WSearchLineEdit::setup(const QDomNode& node, const SkinContext& context) { setPalette(pal); m_clearButton->setToolTip(tr("Clear input") + "\n" + - tr("Clear the search bar input field") + "\n\n" + - - tr("Shortcut") + ": \n" + - tr("Ctrl+Backspace")); + tr("Clear the search bar input field")); +} +void WSearchLineEdit::setupToolTip(const QString& searchInCurrentViewShortcut, + const QString& searchInAllTracksShortcut) { setBaseTooltip(tr("Search", "noun") + "\n" + - tr("Enter a string to search for") + "\n" + - tr("Use operators like bpm:115-128, artist:BooFar, -year:1990") + - "\n" + tr("For more information see User Manual > Mixxx Library") + - "\n\n" + - tr("Shortcuts") + ": \n" + - tr("Ctrl+F") + " " + - tr("Focus", "Give search bar input focus") + "\n" + - tr("Return") + " " + - tr("Trigger search before search-as-you-type timeout or" - "jump to tracks view afterwards") + + tr("Enter a string to search for.") + " " + + tr("Use operators like bpm:115-128, artist:BooFar, -year:1990.") + + "\n" + tr("See User Manual > Mixxx Library for more information.") + + "\n\n" + searchInCurrentViewShortcut + ": " + + tr("Focus/Select All (Search in current view)", + "Give search bar input focus") + + "\n" + searchInAllTracksShortcut + ": " + + tr("Focus/Select All (Search in \'Tracks\' library view)") + + "\n\n" + tr("Additional Shortcuts When Focused:") + "\n" + + tr("Return") + ": " + + tr("Trigger search before search-as-you-type timeout or " + "focus tracks view afterwards") + "\n" + - tr("Ctrl+Backspace") + " " + - tr("Clear input", "Clear the search bar input field") + "\n" + - tr("Ctrl+Space") + " " + + tr("Esc or Ctrl+Return") + ": " + + tr("Immediately trigger search and focus tracks view", + "Exit search bar and leave focus") + + "\n" + tr("Ctrl+Space") + ": " + tr("Toggle search history", "Shows/hides the search history entries") + "\n" + - tr("Delete or Backspace") + " " + tr("Delete query from history") + "\n" + - tr("Esc") + " " + tr("Exit search", "Exit search bar and leave focus")); + tr("Delete or Backspace") + + " (" + tr("in search history") + "): " + + tr("Delete query from history")); } void WSearchLineEdit::loadQueriesFromConfig() { @@ -311,15 +309,12 @@ QString WSearchLineEdit::getSearchText() const { if (isEnabled()) { DEBUG_ASSERT(!currentText().isNull()); QString text = currentText(); - QCompleter* pCompleter = completer(); - if (pCompleter && hasSelectedText()) { - if (text.startsWith(pCompleter->completionPrefix()) && - pCompleter->completionPrefix().size() == lineEdit()->cursorPosition()) { - // Search for the entered text until the user has accepted the - // completion by pressing Enter or changed/deselected the selected - // completion text with Right or Left key - return pCompleter->completionPrefix(); - } + QString completionPrefix; + if (hasCompletionAvailable(&completionPrefix)) { + // Search for the entered text until the user has accepted the + // completion by pressing Enter or changed/deselected the selected + // completion text with Right or Left key + return completionPrefix; } return text; } else { @@ -402,7 +397,12 @@ void WSearchLineEdit::keyPressEvent(QKeyEvent* keyEvent) { if (slotClearSearchIfClearButtonHasFocus()) { return; } - if (hasSelectedText()) { + if (keyEvent->modifiers() & Qt::ControlModifier) { + // Esc and Ctrl+Enter should have the same effect + emit setLibraryFocus(FocusWidget::TracksTable); + return; + } + if (hasCompletionAvailable()) { QComboBox::keyPressEvent(keyEvent); slotTriggerSearch(); return; @@ -799,11 +799,18 @@ void WSearchLineEdit::slotTextChanged(const QString& text) { m_saveTimer.start(kSaveTimeoutMillis); } -void WSearchLineEdit::slotSetShortcutFocus() { - if (hasFocus()) { +void WSearchLineEdit::setFocus(Qt::FocusReason focusReason) { + if (!hasFocus()) { + // selectAll will be called by setFocus - but only if hasFocus + // was false previously and focusReason is Tab, Backtab or Shortcut + QWidget::setFocus(focusReason); + } else if (focusReason == Qt::TabFocusReason || + focusReason == Qt::BacktabFocusReason || + focusReason == Qt::ShortcutFocusReason) { + // If this widget already had focus (which can happen when the user + // presses the shortcut key while already in the searchbox), + // we need to manually simulate this behavior instead. lineEdit()->selectAll(); - } else { - setFocus(Qt::ShortcutFocusReason); } } @@ -819,3 +826,17 @@ void WSearchLineEdit::slotSetFont(const QFont& font) { bool WSearchLineEdit::hasSelectedText() const { return lineEdit()->hasSelectedText(); } + +bool WSearchLineEdit::hasCompletionAvailable(QString* completionPrefix) const { + QCompleter* pCompleter = completer(); + QString prefix = pCompleter ? pCompleter->completionPrefix() : QString(); + if (!prefix.isEmpty() && hasSelectedText() && + lineEdit()->text().startsWith(prefix) && + prefix.size() == lineEdit()->cursorPosition()) { + if (completionPrefix) { + *completionPrefix = prefix; + } + return true; + } + return false; +} diff --git a/src/widget/wsearchlineedit.h b/src/widget/wsearchlineedit.h index 110230d00808..f83f76647f04 100644 --- a/src/widget/wsearchlineedit.h +++ b/src/widget/wsearchlineedit.h @@ -36,6 +36,10 @@ class WSearchLineEdit : public QComboBox, public WBaseWidget { ~WSearchLineEdit(); void setup(const QDomNode& node, const SkinContext& context); + void setupToolTip(const QString& searchInCurrentViewShortcut, + const QString& searchInAllTracksShortcut); + + void setFocus(Qt::FocusReason focusReason); protected: void resizeEvent(QResizeEvent*) override; @@ -47,7 +51,8 @@ class WSearchLineEdit : public QComboBox, public WBaseWidget { signals: void search(const QString& text); - FocusWidget setLibraryFocus(FocusWidget newFocusWidget); + FocusWidget setLibraryFocus(FocusWidget newFocusWidget, + Qt::FocusReason focusReason = Qt::OtherFocusReason); public slots: void slotSetFont(const QFont& font); @@ -65,7 +70,6 @@ class WSearchLineEdit : public QComboBox, public WBaseWidget { void slotDeleteCurrentItem(); private slots: - void slotSetShortcutFocus(); void slotTextChanged(const QString& text); void slotIndexChanged(int index); @@ -92,6 +96,7 @@ class WSearchLineEdit : public QComboBox, public WBaseWidget { void deleteSelectedListItem(); void triggerSearchDebounced(); bool hasSelectedText() const; + bool hasCompletionAvailable(QString* completionPrefix = nullptr) const; inline int findCurrentTextIndex() { return findData(currentText().trimmed(), Qt::DisplayRole); diff --git a/tools/README b/tools/README index def2a3d4040b..3055fbed113c 100644 --- a/tools/README +++ b/tools/README @@ -20,3 +20,11 @@ cd build && gcc ../tools/dummy_hid_device.c -lhidapi-hidraw -o dummy_hid_device # Allow the created hidraw device to be accessed by the user. You may also set the write udev rules. Finally, you can also run Mixxx as root, but that's not recommended. sudo chown "$USER" "$(ls -1t /dev/hidraw* | head -n 1)" ``` + +## Traktor S4 Mk3 Screen drawing + +This small program can be used directly to draw arbitrary rectangles on the Traktor S4 Mk3 screens. It may also be useful for one to perform tests on top of the existing reversed engineered protocol. + +```sh +cd build && gcc ../tools/traktor_s4_mk3_screen_test.c `pkg-config --cflags --libs libusb-1.0` -o traktor_s4_mk3_screen_test && ./traktor_s4_mk3_screen_test +``` diff --git a/tools/clang_format.py b/tools/clang_format.py index 16076470c916..baeface76d29 100755 --- a/tools/clang_format.py +++ b/tools/clang_format.py @@ -49,7 +49,7 @@ def run_clang_format_on_lines(rootdir, file_to_format, stylepath=None): ", ".join("{}-{}".format(*x) for x in file_to_format.lines), ) - filename = os.path.join(rootdir, file_to_format.filename) + filename = os.path.join(rootdir, file_to_format.filename).strip() cmd = [ "clang-format", "--style=file", diff --git a/tools/flake.lock b/tools/flake.lock new file mode 100644 index 000000000000..552b01ade3a7 --- /dev/null +++ b/tools/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1743080597, + "narHash": "sha256-UQwJgAe80hyILxk8sNSH2DCGDpHTYjtzld8uZv0nUes=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2332f3658f3f9c0b7c5c8357329c0737d5757331", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/tools/flake.nix b/tools/flake.nix new file mode 100644 index 000000000000..e6f33efa10c3 --- /dev/null +++ b/tools/flake.nix @@ -0,0 +1,86 @@ +{ + inputs = { + utils.url = "github:numtide/flake-utils"; + nixpkgs.url = "github:NixOS/nixpkgs/release-24.11"; + }; + outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + qt6Env = with pkgs.qt6; env "qt-custom-${qtbase.version}" + [ + qt5compat + qtshadertools + qtsvg + qtdeclarative + ]; + in + { + devShell = pkgs.mkShell { + buildInputs = with pkgs; [ + # Building Mixxx + qt6Env + cmake + chromaprint + glib + libebur128 + fftw + flac + lame + libogg + libvorbis + portaudio + portmidi + protobuf + rubberband + libsndfile + soundtouch + taglib + upower + openssl + microsoft-gsl + kdePackages.qtkeychain + hidapi + wavpack + libid3tag + libusb1 + libmad + libopus + opusfile + libshout + lilv + libxkbcommon + sqlite + gtest + clang-tools + mp4v2 + vulkan-loader + xorg.libX11 + ffmpeg + libmodplug + vamp-plugin-sdk + ccache + libGLU + pcre + libselinux + utillinux + libdjinterop + libkeyfinder + cups + lv2 + + # Git pre-commits + pre-commit + nodejs + rustup + stdenv.cc.cc + ]; + shellHook = '' + pre-commit install + pre-commit install -t pre-push + # Needed for clang-format pre-commit because it downloads and executes its own clang-format elf-binary + export LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib/:$LD_LIBRARY_PATH" + ''; + }; + } + ); +} diff --git a/tools/traktor_s4_mk3_screen_test.c b/tools/traktor_s4_mk3_screen_test.c new file mode 100644 index 000000000000..cf14fd3833a2 --- /dev/null +++ b/tools/traktor_s4_mk3_screen_test.c @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define VENDOR_ID 0x17cc +#define PRODUCT_ID 0x1720 +#define IN_EPADDR 0x00 +#define OUT_EPADDR 0x03 + +static const uint8_t header_data[] = { + 0x84, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // Draw offset (y=0, x=0) + 0x1, + 0x40, + 0x0, + 0xf0, // Draw dimenssion (width=320, height=240) +}; +static const uint8_t footer_data[] = { + 0x40, 0x00, 0x00, 0x00}; + +int main(int argc, char** argv) { + libusb_context* context; + int transferred; + + if (argc != 7) { + fprintf(stderr, "Usage: %s \n", *argv); + return -1; + } + + libusb_init(&context); + + libusb_device_handle* handle = libusb_open_device_with_vid_pid( + context, VENDOR_ID, PRODUCT_ID); + + if (!handle) { + fprintf(stderr, "Unable to open USB Bulk device\n"); + return -1; + } + + uint8_t screen_idx = atoi(argv[1]); + + if (screen_idx != 0 && screen_idx != 1) { + fprintf(stderr, "Invalid screen ID %d\n", screen_idx); + return -1; + } + + uint16_t x = atoi(argv[2]); + uint16_t y = atoi(argv[3]); + uint16_t width = atoi(argv[4]); + uint16_t height = atoi(argv[5]); + uint16_t color = strtol(argv[6], NULL, 2); + + uint8_t* data = malloc(width * height * sizeof(uint16_t) + + sizeof(header_data) + sizeof(footer_data)); + uint8_t* header = data; + + memcpy(header, header_data, sizeof(header_data)); + + header[2] = screen_idx; + + header[8] = x >> 8; + header[9] = x & 0xff; + header[10] = y >> 8; + header[11] = y & 0xff; + + header[12] = width >> 8; + header[13] = width & 0xff; + header[14] = height >> 8; + header[15] = height & 0xff; + + printf("draw x=%d,y=%d,width=%d,height=%d with color %x\n", x, y, width, height, color); + + size_t payload_size = width * height * sizeof(uint16_t) + + sizeof(header_data) + sizeof(footer_data); + uint8_t* payload = data + sizeof(header_data); + uint8_t* footer = payload + width * height * sizeof(uint16_t); + + for (int px = 0; px < width * height; px++) { + payload[px * sizeof(uint16_t)] = color >> 8; + payload[px * sizeof(uint16_t) + 1] = color & 0xff; + } + + memcpy(footer, footer_data, sizeof(footer_data)); + + footer[2] = screen_idx; + + clock_t start, end; + double cpu_time_used; + + start = clock(); + int ret = libusb_bulk_transfer(handle, OUT_EPADDR, data, payload_size, &transferred, 0); + end = clock(); + cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC; + + if (ret < 0) { + fprintf(stderr, "Unable to send to USB Bulk device\n"); + + } else { + fprintf(stderr, "Sent %d bytes in %f ms\n", transferred, cpu_time_used); + } + + libusb_close(handle); + libusb_exit(context); + + return 0; +}