From f829bacee8461c6a265660b14b54b30fe6db732a Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Thu, 4 Oct 2007 17:33:42 +0000 Subject: [PATCH] amd64 support, extra plugins support, some fixes git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@568 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 62 + Makefile.am | 1 + configure.in | 19 +- data/locale/ca.qm | Bin 109651 -> 165882 bytes data/locale/ca.ts | 1153 +++++++++++++++-- include/main_window.h | 2 - plugins/Makefile.am | 3 +- plugins/polyb302/polyb302.cpp | 49 +- plugins/polyb302/polyb302.h | 2 +- plugins/singerbot/singerbot.cpp | 3 +- plugins/stk/mallets/mallets.cpp | 15 +- plugins/vestige/vestige.cpp | 2 + plugins/vst_base/Makefile.am | 11 +- plugins/vst_base/communication.h | 7 +- plugins/vst_base/lvsl_client.cpp | 16 +- .../{lvsl_server.c => lvsl_server.cpp} | 13 +- src/core/automation_editor.cpp | 5 +- src/core/main.cpp | 36 +- src/core/main_window.cpp | 45 +- src/core/piano_roll.cpp | 5 +- src/lib/journalling_object.cpp | 7 +- src/tracks/instrument_track.cpp | 5 +- src/widgets/effect_label.cpp | 5 +- 23 files changed, 1273 insertions(+), 193 deletions(-) rename plugins/vst_base/{lvsl_server.c => lvsl_server.cpp} (98%) diff --git a/ChangeLog b/ChangeLog index e182b8d26..ddf69568c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,65 @@ +2007-10-04 Javier Serrano Polo + + * configure.in: + * plugins/vst_base/lvsl_client.cpp: + * plugins/vst_base/lvsl_server.cpp: + * plugins/vst_base/Makefile.am: + * src/lib/journalling_object.cpp: + amd64 fixes + + * plugins/vestige/vestige.cpp: + fixed loading deadlock + + * plugins/vst_base/Makefile.am: + renamed lvsl_server.c to lvsl_server.cpp + + * plugins/vst_base/lvsl_server.cpp: + restricted shared memory permissions + + * plugins/vst_base/communication.h: + improved string communication + + * configure.in: + look for wine header in system folder too + + * configure.in: + * Makefile.am: + * plugins/Makefile.am: + added extra plugins support + + * include/main_window.h: + * src/core/main_window.cpp: + use desktop services for online help + + * src/core/main_window.cpp: + - use background artwork + - updated wiki URL + + * src/core/automation_editor.cpp: + * src/core/piano_roll.cpp: + * src/tracks/instrument_track.cpp: + * src/widgets/effect_label.cpp: + fixed null workspace segfaults + + * plugins/stk/mallets/mallets.cpp: + enabled missing files message + + * src/core/main.cpp: + use processed argc/argv rather than deprecated functions + + * plugins/singerbot/singerbot.cpp: + detected heap corruption + + * data/locale/ca.ts: + updated translation + + * plugins/polyb302/polyb302.cpp: + * plugins/polyb302/polyb302.h: + dropped Qt3-support + + * plugins/polyb302/polyb302.cpp: + applied relevant LB302 changes + 2007-09-25 Tobias Doerffel * include/mixer.h: diff --git a/Makefile.am b/Makefile.am index ba75d5afc..ab62ae92c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,5 @@ AUTOMAKE_OPTIONS = foreign 1.4 +ACLOCAL_AMFLAGS = -I m4 dist-hook: rm -rf `find $(distdir) -name \*.moc` diff --git a/configure.in b/configure.in index 0baf0679e..cb035d7a8 100644 --- a/configure.in +++ b/configure.in @@ -2,8 +2,8 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.50) -AC_INIT(lmms, 0.4.0-svn20070916, lmms-devel/at/lists/dot/sf/dot/net) -AM_INIT_AUTOMAKE(lmms, 0.4.0-svn20070916) +AC_INIT(lmms, 0.4.0-svn20071004, lmms-devel/at/lists/dot/sf/dot/net) +AM_INIT_AUTOMAKE(lmms, 0.4.0-svn20071004) AM_CONFIG_HEADER(config.h) @@ -219,7 +219,17 @@ if test "x$with_vst" = "xyes" ; then if test "$build_linux" = "true" ; then AC_CHECK_PROG(WINECXX, wineg++, /usr/bin/wineg++,,/usr/bin) - AC_CHECK_LIB([wine], [wine_init], true) + + if test "x`uname -m`" != "xx86_64" ; then + AC_CHECK_LIB([wine], [wine_init], true) + else + AMD64_BUILD=yes + OLDCFLAGS="$CFLAGS" + CFLAGS="-m32 $CFLAGS" + AC_CHECK_LIB([wine], [wine_init], true) + CFLAGS="$OLDCFLAGS" + fi + if test ! -z "$WINECXX" ; then AC_LANG_PUSH(C++) # CXXFLAGS="$CXXFLAGS -I${prefix}/include/wine/windows" @@ -227,6 +237,7 @@ if test "x$with_vst" = "xyes" ; then OLDCPPFLAGS="$CPPFLAGS" CXX="$WINECXX" CPPFLAGS="$CPPFLAGS -I${prefix}/include/wine/windows" + CPPFLAGS+=" -I/usr/include/wine/windows" AC_CHECK_HEADER(windows.h, HAVE_WINDOWS_H="true") CXX="$OLDCXX" CPPFLAGS="$OLDCPPFLAGS" @@ -238,6 +249,7 @@ if test "x$with_vst" = "xyes" ; then fi fi AM_CONDITIONAL(VST_SUPPORT, test ! -z "$WINECXX") +AM_CONDITIONAL(AMD64_BUILD, test "x$AMD64_BUILD" = "xyes") # check for LADSPA-SDK @@ -627,6 +639,7 @@ AC_CONFIG_FILES([Makefile plugins/vst_base/Makefile plugins/vst_effect/Makefile lmms.spec]) +LOCAL_EXTRA_PLUGINS AC_OUTPUT with_warnings="false" diff --git a/data/locale/ca.qm b/data/locale/ca.qm index 9b4f26f3c21aad2cff37d1d8a6a0d4ed45381b8f..b31fb3a6f70e9a43cff152caf1776d957792b4e4 100644 GIT binary patch literal 165882 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 Js;4F=|34dFvqJy? delta 31842 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 diff --git a/data/locale/ca.ts b/data/locale/ca.ts index 870b8464f..2ec3feef2 100644 --- a/data/locale/ca.ts +++ b/data/locale/ca.ts @@ -1,47 +1,60 @@ - + + + QWidget + Name: Nom: + Maker: Fabricant: + Copyright: Copyright: + Requires Real Time: Requereix Temps Real: + Yes + No No + Real Time Capable: Capaç de Temps Real: + In Place Broken: Trencat En Lloc: + Channels In: Canals d'Entrada: + Channels Out: Canals de Sortida: + File: Fitxer: @@ -49,30 +62,37 @@ aboutDialog + About LMMS... Quant a LMMS... + About Quant a + Authors Autors + License Llicència + Close Tanca + Translation Traducció + Current language not translated. If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Just contact the maintainer! @@ -80,10 +100,12 @@ If you're interested in translating LMMS in another language or want to imp <jasp00@terra.es> + Linux MultiMedia Studio %1 Linux MultiMedia Studio %1 + LMMS - A powerful synthesizer-studio Copyright (c) 2004-2007 LMMS-Developers @@ -99,490 +121,612 @@ http://lmms.sourceforge.net arpAndChordsTabWidget + octave octava + Major Major + Majb5 Major♭5 + minor menor + minb5 menor♭5 + sus2 sus2 + sus4 sus4 + aug aug + augsus4 augsus4 + tri tri + 6 6 + 6sus4 6sus4 + 6add9 6add9 + m6 m6 + m6add9 m6més9 + 7 7 + 7sus4 7sus4 + 7#5 7♯5 + 7b5 7♭5 + 7#9 7♯9 + 7b9 7♭9 + 7#5#9 7♯5♯9 + 7#5b9 7♯5♭9 + 7b5b9 7♭5♭9 + 7add11 7més11 + 7add13 7més13 + 7#11 7♯11 + Maj7 Maj7 + Maj7b5 Maj7♭5 + Maj7#5 Maj7♯5 + Maj7#11 Maj7♯11 + Maj7add13 Maj7més13 + m7 m7 + m7b5 m7♭5 + m7b9 m7♭9 + m7add11 m7més11 + m7add13 m7més13 + m-Maj7 m-Maj7 + m-Maj7add11 m-Maj7més11 + m-Maj7add13 m-Maj7més13 + 9 9 + 9sus4 9sus4 + add9 més9 + 9#5 9♯5 + 9b5 9♭5 + 9#11 9♯11 + 9b13 9♭13 + Maj9 Maj9 + Maj9sus4 Maj9sus4 + Maj9#5 Maj9♯5 + Maj9#11 Maj9♯11 + m9 m9 + madd9 mmés9 + m9b5 m9♭5 + m9-Maj7 m9-Maj7 + 11 11 + 11b9 11♭9 + Maj11 Maj11 + m11 m11 + m-Maj11 m-Maj11 + 13 13 + 13#9 13♯9 + 13b9 13♭9 + 13b5b9 13♭5♭9 + Maj13 Maj13 + m13 m13 + m-Maj13 m-Maj13 + Chord range: Rang d'acord: + octave(s) octava(es) + Use this knob for setting the chord range in octaves. The selected chord will be played within specified amount of octaves. Usa aquesta roda per a ajustar el rang d'acord en octaves. L'acord seleccionat serà reproduït amb la quantitat especificada d'octaves. + An arpeggio is a type of playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords, the only difference is, that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads. But there're a lot of other possible chords, you can select. Un arpegi és una forma de tocar (especialment puntejada) els instruments, que fa la música més animada. Les cordes d'aquests instruments (p.e. l'arpa) són puntejades com els acords, l'única diferència és que això es fa en un ordre seqüencial, així les notes no sonen a la vegada. Arpegis típics són les tríades majors o menors. Però hi ha molts més acords que pots seleccionar. + Arpeggio range: Rang d'arpegi: + Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified amount of octaves. Usa aquesta roda per a ajustar el rang d'arpegi en octaves. L'arpegi seleccionat serà reproduït amb la quantitat especificada d'octaves. + Arpeggio time: Temps d'arpegi: + ms ms + Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played. Usa aquesta roda per a ajustar el temps d'arpegi en mil·lisegons. El temps d'arpegi especifica la durada de cada nota de l'arpegi. + Arpeggio gate: Porta d'arpegi: + % % + Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato-arpeggios. Usa aquesta roda per a ajustar la porta d'arpegi. La porta d'arpegi especifica el percentatge de la nota de l'arpegi que serà reproduït. Amb això pots fer arpegis amb staccato genials. + arpeggio direction = up direcció d'arpegi = amunt + arpeggio direction = down direcció d'arpegi = abaix + arpeggio direction = up and down direcció d'arpegi = amunt i abaix + arpeggio direction = random direcció d'arpegi = aleatori + Chord range Rang d'acord + Arpeggio range Rang d'arpegi + Arpeggio time Temps d'arpegi + Arpeggio gate Porta d'arpegi + Harmonic minor Harmònic menor + Melodic minor Melòdic menor + Whole tone To sencer + Major pentatonic Pentatònic major + Minor pentatonic Pentatònic menor + Jap in sen Jap in sen + Major bebop Bebop major + Dominant bebop Bebop dominant + Blues Blues + Arabic Aràbic + Enigmatic Enigmàtic + Neopolitan Neopolità + Neopolitan minor Neopolità menor + Hungarian minor Hongarès menor + Dorian Dòric + Phrygolydian Frigolidi + Lydian Lidi + Mixolydian Mixolidi + Aeolian Eoli + Locrian Locri + Diminished Disminuït + CHORDS ACORDS + RANGE RANG + ARPEGGIO ARPEGI + TIME TEMPS + GATE PORTA + Direction: Direcció: + Mode: Mode: + Free Lliure + Sort Ordena + Sync Sinc + Chord type Tipus d'acord + Arpeggio type Tipus d'arpegi + Arpeggio direction Direcció d'arpegi + Arpeggio mode Mode d'arpegi @@ -590,14 +734,17 @@ http://lmms.sourceforge.net audioDevice + DEVICE DISPOSITIU + CHANNELS CANALS + CLIENT-NAME NOM-CLIENT @@ -605,86 +752,107 @@ http://lmms.sourceforge.net audioFileProcessor + Amplify: Amplificar: + With this knob you can set the amplify-ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!) Amb aquesta roda pots ajustar el radi d'amplificació. Quan poses un valor de 100% la mostra no canvia. Altrament, serà amplificada o reduïda (el fitxer no es modifica en cap moment!) + Startpoint: Punt inicial: + With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable Looping-Mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between start- and end-point. Amb aquesta roda pots ajustar el punt on el Processador de Fitxer d'Àudio començarà a reproduir la mostra. Si actives el Mode Bucle, aquest és el punt a on el Processador de Fitxer d'Àudio retorna si una nota és més llarga que la mostra entre els punts inicial i final. + Endpoint: Punt final: + With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable Looping-Mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between start- and end-point. Amb aquesta roda pots ajustar el punt on el Processador de Fitxer d'Àudio deixarà de reproduir la mostra. Si actives el Mode Bucle, aquest és el punt on el Processador de Fitxer d'Àudio retorna si una nota és més llarga que la mostra entre els punts inicial i final. + Click here, if you want to open another audio-file. After clicking on this button, a file-open-dialog appears and you can select your file. Settings like Looping-Mode, start- and end-point, amplify-value and so on are not reset, so please don't wonder if your sample doesn't sound like the original one... Pica aquí si vols obrir un altre fitxer d'àudio. Després de picar en aquest botó, apareix un diàleg on pots seleccionar i obrir el teu fitxer. Els ajusts com Mode Bucle, punts inicial i final, valor d'amplificació i la resta no són reiniciats, per tant no t'estranyis si la mostra no sona com l'original... + Here you can set, whether Looping-Mode is enabled. If enabled, AudioFileProcessor loops between start- and end-point of a sample until the whole note is played. This is useful for things like string- and choir-samples. Aquí pots activar el Mode Bucle. Si està activat, el Processador de Fitxer d'Àudio farà un bucle entre els punts inicial i final de la mostra fins que la nota ha acabat de tocar-se. Això és útil amb mostres de corda i de cor. + Activate this button, if your sample should be drawn with connected lines. This doesn't change the sound itself. It just gives you another view to your sample. Activa aquest botó si la mostra ha de dibuixar-se amb línies connectades. Això no canvia el so. Només et dóna una altra visió de la mostra. + Activate this button, if your sample should be drawn with dots. This doesn't change the sound itself. It just gives you another view to your sample. Activa aquest botó si la mostra ha de dibuixar-se amb punts. Això no canvia el so. Només et dóna una altra visió de la mostra. + Amplify Amplificar + Start of sample Inici de la mostra + End of sample Fi de la mostra + If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. Si actives aquest botó, la mostra sencera serà invertida. Això és útil per a efectes interessants, p.e. un xoc invertit. + Open other sample Obre altra mostra + Reverse sample Inverteix mostra + Loop sample at start- and end-point Bucle entre punts inicial i final + AMP AMP + START INICI + END FI + Loop Bucle @@ -692,6 +860,7 @@ http://lmms.sourceforge.net automatableButton + &Open in automation editor &Obre a l'editor d'automatització @@ -699,6 +868,7 @@ http://lmms.sourceforge.net automatableSlider + &Open in automation editor &Obre a l'editor d'automatització @@ -706,98 +876,122 @@ http://lmms.sourceforge.net automationEditor + Play/pause current pattern (Space) Reprodueix/pausa el patró actual (Espai) + Stop playing of current pattern (Space) Atura la reproducció del patró actual (Espai) + Click here, if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Pica aquí si vols reproduir el patró actual. Això és útil mentre s'edita. El patró es repeteix automàticament quan arriba al final. + Click here, if you want to stop playing of current pattern. Pica aquí si vols aturar la reproducció del patró actual. + Cut selected values (Ctrl+X) Talla els valors seleccionats (Ctrl+X) + Copy selected values (Ctrl+C) Copia els valors seleccionats (Ctrl+C) + Paste values from clipboard (Ctrl+V) Enganxa valors des del portapapers (Ctrl+V) + If you click here, selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste-button. Si piques aquí, els valors seleccionats seran tallats cap al portapapers. Pots enganxar-los a qualsevol banda de qualsevol patró picant el botó enganxar. + If you click here, selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste-button. Si piques aquí, els valors seleccionats seran copiats al portapapers. Pots enganxar-los a qualsevol banda de qualsevol patró picant el botó enganxar. + If you click here, the values from the clipboard will be pasted at the first visible tact. Si piques aquí, els valors del portapapers seran enganxats al primer compàs visible. + Automation Editor - no pattern Editor d'Automatització - sense patró + Automation Editor - %1 Editor d'Automatització - %1 + Please open an automation pattern with the context menu of a control! Per favor, obre un patró d'automatització amb el menú contextual d'un control! + Values copied Valors copiats + All selected values were copied to the clipboard. Tots els valors seleccionats s'han copiat al portapapers. + Draw mode (Shift+D) Mode dibuixar (Maj+D) + Erase mode (Shift+E) Mode esborrar (Maj+E) + Select mode (Shift+S) Mode seleccionar (Maj+S) + Move selection mode (Shift+M) Mode moure selecció (Maj+M) + If you click here, draw-mode will be activated. In this mode you can add and move single values. This is the default-mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir i moure valors solts. Aquest és el mode per defecte que s'utilitza més temps. També pots pitjar 'Maj+D' al teclat per a activar aquest mode. + If you click here, erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Si piques aquí, s'activarà el mode esborrar. En aquest mode pots esborrar valors solts. També pots pitjar 'Maj+E' al teclat per a activar aquest mode. + If you click here, select-mode will be activated. In this mode you can select values. This is neccessary if you want to cut, copy, paste, delete or move values. You can also press 'Shift+S' on your keyboard to activate this mode. Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar valors. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure valors. També pots pitjar 'Maj+S' al teclat per a activar aquest mode. + If you click here, move-mode will be activated. In this mode you can move the values you selected in select-mode. You can also press 'Shift+M' on your keyboard to activate this mode. Si piques aquí, el mode moure serà activat. En aquest mode pots moure els valors que has seleccionat en el mode seleccionar. També pots pitjar 'Maj+M' al teclat per a activar aquest mode. + Note detuning Desafinament de nota @@ -805,38 +999,47 @@ http://lmms.sourceforge.net bassBoosterControlDialog + Frequency Freqüència + FREQ FREQ + Frequency: Freqüència: + Gain Guany + GAIN GUANY + Gain: Guany: + Ratio Proporció + RATIO PROPORCIÓ + Ratio: Proporció: @@ -844,26 +1047,32 @@ http://lmms.sourceforge.net bbEditor + Play/pause current beat/bassline (Space) Reprodueix/pausa el ritme base actual (Espai) + Stop playing of current beat/bassline (Space) Atura el ritme base actual (Espai) + Click here, if you want to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. Pica aquí si vols reproduir el ritme base actual. El ritme base és repetit automàticament quan arriba al final. + Click here, if you want to stop playing of current beat/bassline. Pica aquí si vols aturar el ritme base actual. + Beat+Baseline Editor Editor de Ritme Base + Add beat/bassline Afegeix ritme de base @@ -871,18 +1080,22 @@ http://lmms.sourceforge.net bbTCO + Change name Canvia nom + Reset name Reinicia nom + Change color Canvia color + Open in Beat+Baseline-Editor Obre a l'Editor de Ritme Base @@ -890,6 +1103,7 @@ http://lmms.sourceforge.net bbTrack + Beat/Baseline %1 Ritme base %1 @@ -897,78 +1111,97 @@ http://lmms.sourceforge.net bitInvader + Samplelength Longitud de mostra + Sample Length Longitud de la Mostra + Draw your own waveform hereby dragging your mouse onto this graph Dibuixa la teva pròpia forma d'ona aquí arrossegant el ratolí sobre aquest gràfic + Click here if you want a sine-wave for current oscillator. Pica aquí si vols una ona sinusoïdal per a l'oscil·lador actual. + Click here if you want a triangle-wave for current oscillator. Pica aquí si vols una ona triangular per a l'oscil·lador actual. + Click here if you want a saw-wave for current oscillator. Pica aquí si vols una ona de serra per a l'oscil·lador actual. + Click here if you want a square-wave for current oscillator. Pica aquí si vols una ona quadrada per a l'oscil·lador actual. + Click here if you want a white-noise for current oscillator. Pica aquí si vols un soroll blanc per a l'oscil·lador actual. + Click here if you want a user-defined wave-shape for current oscillator. Pica aquí si vols una forma d'ona arbitrària per a l'oscil·lador actual. + Click here to smooth waveform. Pica aquí per a suavitzar la forma d'ona. + Interpolation Interpolació + Normalize Normalitza + Sine wave Ona sinusoïdal + Triangle wave Ona triangular + Saw wave Ona de serra + Square wave Ona quadrada + White noise wave Ona de soroll blanc + User defined wave Ona arbitrària + Smooth Suavitza @@ -976,6 +1209,7 @@ http://lmms.sourceforge.net comboBox + &Open in automation editor &Obre a l'editor d'automatització @@ -983,10 +1217,12 @@ http://lmms.sourceforge.net configManager + Setup LMMS Configuració de LMMS + LMMS needs to be setup in order to run properly. This wizard will help you to setup your personal LMMS-installation. If you're unsure what to do at a step, just click on 'Next'. LMMS will automatically select the best options for you. @@ -1000,6 +1236,7 @@ Si no estàs segur del que s'ha de fer en un pas, senzillament pica 'S Ara pica 'Següent' per a anar a la següent pàgina. + When working with LMMS there needs to be a working-directory. This directory is used for storing your projects, presets, samples etc. @@ -1012,54 +1249,66 @@ Aquest directori s'usarà per a emmagatzemar els teus projectes, plantilles Per favor, selecciona un directori: + Welcome to LMMS Benvingut a LMMS + Select working directory Selecciona directori de treball + Directory not existing El directori no existeix + Error in configuration-file Error al fitxer de configuració + Error while parsing configuration-file %1. The setup-wizard will be shown for reconfiguring LMMS. Error analitzant el fitxer de configuració %1. Es mostrarà l'assistent per a reconfigurar LMMS. + The directory you specified does not exist. Create it? El directori especificat no existeix. Crear-lo? + < &Back < &Enrere + &Finish &Finalitza + Could not save config-file No s'ha pogut desar el fitxer de configuració + Could not save configuration file %1. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. No s'ha pogut desar el fitxer de configuració %1. Per favor, comprova que tens permís d'escriptura per a aquest fitxer i torna-ho a provar. + Version mismatches La versió no coincideix + Accordingly to the information in your LMMS-configuration-file you seem to have run a different (probably older) version of LMMS before. It is recommended to run the setup-wizard again to ensure that @@ -1072,14 +1321,17 @@ que les darreres mostres, plantilles, projectes demo, etc. s'instal·lin al directori de treball de LMMS. Executar ara l'assistent? + &Cancel &Cancel·la + &Next > &Següent > + Choose LMMS working directory Escull el directori de treball de LMMS @@ -1087,6 +1339,7 @@ directori de treball de LMMS. Executar ara l'assistent? effectList + Description Descripció @@ -1094,14 +1347,17 @@ directori de treball de LMMS. Executar ara l'assistent? effectSelectDialog + Effects Selector Selector d'Efectes + Add Afegeix + Cancel Cancel·la @@ -1109,10 +1365,12 @@ directori de treball de LMMS. Executar ara l'assistent? effectTabWidget + EFFECTS CHAIN CADENA D'EFECTES + Add Afegeix @@ -1120,230 +1378,287 @@ directori de treball de LMMS. Executar ara l'assistent? envelopeAndLFOWidget + Predelay: Preretard: + Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. Usa aquesta roda per a ajustar el preretard de l'envoltant actual. Quan més gran aquest valor, major el temps abans de començar l'envoltant en sí. + Attack: Atac: + Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings. Usa aquesta roda per a ajustar el temps d'atac de l'envoltant actual. Quan més gran aquest valor, més temps necessita l'envoltant per a augmentar cap al nivell d'atac. Escull un valor petit per a instruments com el piano i un valor gran per a corda. + Hold: Manteniment: + Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level. Usa aquesta roda per a ajustar el temps de manteniment de l'envoltant actual. Quan més gran aquest valor, més temps manté l'envoltant el nivell d'atac abans de començar a reduir cap al nivell de sosteniment. + Decay: Decaïment: + Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos. Usa aquesta roda per a ajustar el temps de decaïment de l'envoltant actual. Quan més gran aquest valor, més temps necessita l'envoltant per a reduir des del nivell d'atac fins al de sosteniment. Escull un valor petit per a instruments com el piano. + Sustain: Sosteniment: + Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero. Usa aquesta roda per a ajustar el nivell de sosteniment de l'envoltant actual. Quan més gran aquest valor, a major nivell roman l'envoltant abans de disminuir cap a zero. + Release: Alliberament: + Modulation amount: Quantitat de modulació: + LFO-predelay: Preretard OBF: + Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate. Usa aquesta roda per a ajustar el temps de preretard de l'OBF actual. Quan més gran aquest valor, major el temps abans que l'OBF comenci a oscil·lar. + LFO-attack: Atac OBF: + Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum. Usa aquesta roda per a ajustar el temps d'atac de l'OBF actual. Quan més gran aquest valor, més temps necessita l'OBF per a augmentar la seva amplitud al màxim. + LFO-speed: Velocitat OBF: + Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect. Usa aquesta roda per a ajustar la velocitat de l'OBF actual. Quan més gran aquest valor, més ràpid oscil·la l'OBF i més ràpid serà l'efecte. + Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO. Usa aquesta roda per a ajustar la quantitat de modulació de l'OBF actual. Quan més gran aquest valor, més influirà l'OBF la magnitud seleccionada (p.e. volum o freqüència de tall). + Click here if you want a sine-wave for current oscillator. Pica aquí si vols una ona sinusoïdal per a l'oscil·lador actual. + Click here if you want a triangle-wave for current oscillator. Pica aquí si vols una ona triangular per a l'oscil·lador actual. + Click here if you want a saw-wave for current oscillator. Pica aquí si vols una ona de serra per a l'oscil·lador actual. + Click here if you want a square-wave for current oscillator. Pica aquí si vols una ona quadrada per a l'oscil·lador actual. + ms/LFO: ms/OBF: + Predelay-time Temps de preretard + Attack-time Temps d'atac + Hold-time Temps de manteniment + Decay-time Temps de decaïment + Sustain-level Temps de sosteniment + Release-time Temps d'alliberament + Modulation amount Quantitat de modulació + LFO-predelay-time Temps de preretard de l'OBF + LFO-attack-time Temps d'atac de l'OBF + LFO-speed Velocitat de l'OBF + LFO-modulation-amount Quantitat de modulació de l'OBF + Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings. Usa aquesta roda per a ajustar el temps d'alliberament de l'envoltant actual. Quan més gran aquest valor, més temps necessita l'envoltant per a disminuir des del nivell de sosteniment a zero. Escull un valor gran per a instruments suaus com els de corda. + Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. Usa aquesta roda per a ajustar la quantitat de modulació de l'envoltant actual. Quan més gran aquest valor, més influirà l'envoltant la magnitud corresponent (p.e. volum o freqüència de tall). + Click here if the frequency of this LFO should be multiplied with 100. Pica aquí si la freqüència d'aquest OBF ha de multiplicar-se per 100. + multiply LFO-frequency with 100 multiplica freqüència d'OBF per 100 + Click here to make the envelope-amount controlled by this LFO. Pica aquí per a que aquest OBF controli l'amplitud. + control envelope-amount by this LFO amplitud controlada per aquest OBF + HOLD MANT + DEL RET + ATT ATAC + DEC DEC + SUST SOST + REL ALL + AMT QUA + SPD VEL + FREQ x 100 FREQ x 100 + MODULATE ENV-AMOUNT MODULA AMPLITUD + Click here if you want a user-defined wave for current oscillator. Afterwards drag an according sample-file into LFO-graph. Pica aquí si vols una ona arbitrària per a l'oscil·lador actual. Després arrossega el fitxer de mostra corresponent al gràfic de l'OBF. + Hint Consell + Drag a sample from somewhere and drop it in this window. Arrossega una mostra d'on sigui i amolla-la en aquesta finestra. + LFO wave shape Forma d'ona de l'OBF + Freq x 100 Freq x 100 + Modulate Env-Amount Modula Amplitud @@ -1351,94 +1666,117 @@ directori de treball de LMMS. Executar ara l'assistent? envelopeTabWidget + LowPass Passa-Baixa + HiPass Passa-Alta + BandPass csg Passa-Banda csg + BandPass czpg Passa-Banda czpg + Notch Osca + Allpass Passa-Tot + Moog Moog + Hz Hz + Q/Resonance: Q/Ressonància: + Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter, how much it should amplify frequencies near Cutoff-frequency. Usa aquesta roda per a ajustar la Q/Ressonància per al filtre seleccionat. Q/Ressonància diu al filtre quant ha d'amplificar les freqüències a prop de la freqüència de tall. + Q/Resonance Q/Ressonància + 2x LowPass 2x Passa-Baixa + These tabs contain envelopes. They're very important for modifying a sound, for not saying that they're almost always neccessary for substractive synthesis. For example if you have a volume-envelope, you can set when the sound should have which volume-level. Maybe you want to create some soft strings. Then your sound has to fade in and out very softly. This can be done by setting a large attack- and release-time. It's the same for other envelope-targets like panning, cutoff-frequency of used filter and so on. Just monkey around with it! You can really make cool sounds out of a saw-wave with just some envelopes...! Aquestes pestanyes contenen envoltants. Aquestes són molt importants per a modificar el so, per no dir que són quasi sempre necessàries per a la síntesi sostractiva. Per exemple, si tens una envoltant de volum, pots ajustar quan el so ha de tenir cert nivell de volum. Potser vols crear algunes cordes suaus. Llavors el so ha d'aparèixer i desaparèixer molt suaument. Això es pot fer posant un temps d'atac i d'alliberament llargs. És el mateix per als altres tipus d'envoltants com panorama, freqüència de tall del filtre usat, etc. Tan sols juga-hi! Realment pots aconseguir sons molt bons partint d'una ona de serra amb només unes quantes envoltants...! + cutoff-frequency freqüència de tall + cutoff-frequency: freqüència de tall: + VOLUME VOLUM + CUTOFF FREQ TALL + Q/RESO Q/RESSO + FILTER FILTRE + Use this knob for setting the cutoff-frequency for the selected filter. The cutoff-frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff-frequency. A highpass-filter cuts all frequencies below cutoff-frequency and so on... Usa aquesta roda per a ajustar la freqüència de tall per al filtre seleccionat. La freqüència de tall especifica la freqüència on el filtre talla el senyal. Per exemple, un filtre passa-baixa talla totes les freqüències per sobre de la freqüència de tall. Un filtre passa-alta talla totes les freqüències per sota de la freqüència de tall, etc... + TARGET OBJECTIU + Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound. Aquí pots seleccionar el filtre integrat que vols usar per a aquesta pista d'instrument. Els filtres són molt importants per a canviar les característiques d'un so. + Filter type Tipus de filtre @@ -1446,66 +1784,81 @@ directori de treball de LMMS. Executar ara l'assistent? exportProjectDialog + Could not open file No es pot obrir el fitxer + Could not open file %1 for writing. Please make sure you have write-permission to the file and the directory containing the file and try again! No es pot obrir el fitxer %1 per a escriure. Per favor, assegura't que tens permís d'escriptura per al fitxer i el directori que el conté i torna-ho a provar! + Uncompressed Wave-File (*.wav) Fitxer WAV Descomprimit (*.wav) + Compressed OGG-File (*.ogg) Fitxer OGG Comprimit (*.ogg) + Type: Tipus: + kbps: kbps: + variable bitrate taxa de bit variable + use high-quality-mode (recommened) usa mode d'alta qualitat (recomanat) + Export Exporta + Cancel Cancel·la + Export failed L'exportació ha fallat + Rendering: Representant: + Export project to %1 Exporta projecte a %1 + The project-export failed, because the output-file/-device could not be opened. Make sure, you have write access to the selected file/device! L'exportació del projecte ha fallat perquè el fitxer/dispositiu de sortida no s'ha pogut obrir. Assegura't que tens permís d'escriptura per al fitxer/dispositiu seleccionat! + Exporting project to %1 Exportant projecte a %1 @@ -1513,22 +1866,27 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele fileBrowser + Browser Navegador + Reload (F5) Recarrega (F5) + Send to active instrument-track Envia a la pista d'instrument activa + Open in new instrument-track/Song-Editor Obre en una nova pista d'instrument/Editor de Cançó + Open in new instrument-track/B+B Editor Obre en una nova pista d'instrument/Editor R+B @@ -1536,82 +1894,102 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele impulseEditor + Draw your own waveform here by dragging your mouse onto this graph Dibuixa la teva pròpia forma d'ona aquí arrossegant el ratolí sobre aquest gràfic + Click here if you want a sine-wave for current oscillator. Pica aquí si vols una ona sinusoïdal per a l'oscil·lador actual. + Click here if you want a triangle-wave for current oscillator. Pica aquí si vols una ona triangular per a l'oscil·lador actual. + Click here if you want a saw-wave for current oscillator. Pica aquí si vols una ona de serra per a l'oscil·lador actual. + Click here if you want a square-wave for current oscillator. Pica aquí si vols una ona quadrada per a l'oscil·lador actual. + Click here if you want a white-noise for current oscillator. Pica aquí si vols un soroll blanc per a l'oscil·lador actual. + Click here if you want a user-defined wave-shape for current oscillator. Pica aquí si vols una forma d'ona arbitrària per a l'oscil·lador actual. + Click here to smooth waveform. Pica aquí per a suavitzar la forma d'ona. + Click here to normalize waveform. Pica aquí per a normalitzar la forma d'ona. + Click here to enable/disable waveform. Pica aquí per a activar/desactivar la forma d'ona. + &Help &Ajuda + Sine wave Ona sinusoïdal + Triangle wave Ona triangular + Saw wave Ona de serra + Square wave Ona quadrada + White noise wave Ona de soroll blanc + User defined wave Ona arbitrària + Smooth Suavitza + Normalize Normalitza + Enable waveform Habilita forma d'ona @@ -1619,98 +1997,122 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele instrumentTrack + With this knob you can set the volume of the opened channel. Amb aquesta roda pots ajustar el volum del canal obert. + Within this rectangle you can set the position where the channel should be audible. You should have a soundcard supporting at least surround 4.0 for enjoying this feature. Amb aquest rectangle pots ajustar la posició on el canal ha de ser audible. Necessites una targeta de so que suporti almenys l'envoltant 4.0 per a gaudir d'aquesta característica. + unnamed_channel canal_sense_nom + Channel volume Volum del canal + Channel volume: Volum del canal: + VOL VOL + MIDI input/output Entrada/sortida MIDI + GENERAL SETTINGS CONFIGURACIÓ GENERAL + VOLUME VOLUM + FX CHNL CANAL FX + Save current channel settings in a preset-file Desa la configuració del canal actual en una plantilla + Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser. Pica aquí si vols desar la configuració del canal actual en una plantilla. Més tard podràs carregar aquesta plantilla picant-la dos cops al navegador de plantilles. + Default Defecte + ENV/LFO/FILTER ENV/OBF/FILTRE + ARP/CHORD ARP/ACORD + MIDI MIDI + MIDI input Entrada MIDI + MIDI output Sortida MIDI + Save channel-settings in file Desa configuració de canal en fitxer + Channel-Settings-File (*.cs.xml) Fitxer de Configuració de Canal (*.cs.xml) + PLUGIN CONN + Surround area Àrea envoltant + FX channel Canal FX + FX FX @@ -1718,62 +2120,77 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele kickerInstrument + Start frequency Freqüència inicial + START INICI + Start frequency: Freqüència inicial: + End frequency Freqüència final + END FI + End frequency: Freqüència final: + Decay Decaïment + DECAY DECAÏMENT + Decay: Decaïment: + Distortion Distorsió + DIST DIST + Distortion: Distorsió: + Gain Guany + GAIN GUANY + Gain: Guany: @@ -1781,104 +2198,55 @@ Assegura't que tens permís d'escriptura per al fitxer/dispositiu sele knob + &Help &Ajuda + &Reset (%1%2) &Restaura (%1%2) + &Copy value (%1%2) &Copia valor (%1%2) + &Paste value (%1%2) &Enganxa valor (%1%2) + Connect to MIDI-device Connecta a dispositiu MIDI + Please enter a new value between %1 and %2: Per favor, introdueix un nou valor entre %1 i %2: + &Open in automation editor &Obre a l'editor d'automatització - - ladspaBrowser - - LADSPA Plugin Browser - Navegador de connectors LADSPA - - - Available Effects - Efectes Disponibles - - - Unavailable Effects - Efectes No Disponibles - - - Instruments - Instruments - - - Analysis Tools - Eines d'Anàlisi - - - Don't know - Desconegut - - - Close - Tanca - - - This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names. - -Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable. - -Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable. - -Instruments are plugins for which only output channels were identified. - -Analysis Tools are plugins for which only input channels were identified. - -Don't Knows are plugins for which no input or output channels were identified. - -Double clicking any of the plugins will bring up information on the ports. - Aquest diàleg mostra informació de tots els connectors LADSPA que LMMS ha pogut trobar. Els connectors estan dividits en cinc categories basades en la interpretació dels tipus i noms dels ports. - -Efectes Disponibles són aquells que LMMS pot usar. Per a que LMMS pugui usar un efecte, primerament, ha de ser un efecte, és a dir, ha de tenir canals d'entrada i de sortida. LMMS identifica un canal d'entrada com a un port d'àudio que conté 'in' al nom. Els canals de sortida són identificats amb les lletres 'out'. A més, l'efecte ha de tenir el mateix nombre d'entrades que de sortides i ser capaç de temps real. - -Efectes No Disponibles són aquells que han estat identificats com a efectes, però no tenen el mateix nombre d'entrades que de sortides o no són capaços de temps real. - -Instruments són connectors on només s'han identificat canals de sortida. - -Eines d'Anàlisi són connectors on només s'han identificat canals d'entrada. - -Desconeguts són connectors on no s'han identificat canals d'entrada o sortida. - -Fent doble clic a qualsevol connector mostrarà informació sobre els ports. - - ladspaControl + Link channels Enllaça canals + Value: Valor: + Sorry, no help available. Ajuda no disponible. @@ -1886,10 +2254,12 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports. ladspaControlDialog + Channel Canal + Link Channels Enllaça Canals @@ -1897,62 +2267,77 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports. ladspaPortDialog + Name Nom + Rate Taxa + Direction Direcció + Type Tipus + Min < Default < Max Mín < Defecte < Màx + Logarithmic Logarítmic + SR Dependent Depenent SR + Audio Àudio + Control Control + Input Entrada + Output Sortida + Toggled Commutat + Integer Enter + Float Flotant + Yes @@ -1960,138 +2345,172 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports. lb302Synth + VCF Cutoff Frequency Freqüència de Tall VCF + Cutoff Freq: Freq Tall: + CUT TALL + VCF Resonance Ressonància VCF + Resonance: Ressonància: + RES RES + VCF Envelope Mod Mod Envoltant VCF + Env Mod: Mod Env: + ENV MOD MOD ENV + VCF Envelope Decay Decaïment Envoltant VCF + Decay: Decaïment: + DEC DEC + Slide Lliscament + Accent Accent + Dead Mort + 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/octava, filtre 3 pols + Slide Decay Decaïment de Lliscament + Slide Decay: Decaïment de Lliscament: + SLIDE LLISCA + Fine detuning of the VCO. Ranged between -100 and 100 centes. Desafinament fi del VCO. Graduat entre -100 i 100 cents. + VCO Fine Detuning: Desafinament Fi VCO: + DETUNE DESAF + Distortion Distorsió + DIST: DIST: + DIST DIST + Waveform Forma d'ona + WAVE ONA + Sawtooth Dent de serra + Inverted Sawtooth Dent de serra invertida + Triangle Triangular + Square Quadrada + Rounded Square Quadrada Arrodonida + Moog Moog + WAVE: ONA: @@ -2099,6 +2518,7 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports. lcdSpinBox + &Open in automation editor &Obre a l'editor d'automatització @@ -2106,18 +2526,22 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports. listView + Files Fitxers + Loading sample Carregant mostra + Please wait, loading sample for preview... Per favor espera, carregant mostra per a previsualitzar... + --- Factory files --- --- Fitxers de fàbrica --- @@ -2125,6 +2549,7 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports. liveTool + This tool is intended to be used in live performances, though you can use it for music production as well. The following keys will work only if this window is active. The spacebar toggles play and pause in the Song Editor. @@ -2138,419 +2563,520 @@ Les tecles F1-F10 apaguen els 10 primers instruments a l'Editor de Ritme Ba mainWindow + Setting up main-window and workspace... Preparant finestra principal i espai de treball... + Creating new song... Creant nova cançó... + Creating GUI... Creant interfície... + &New &Nou + &Open... &Obre... + &Save &Desa + Save &As... &Anomena i desa... - E&xport - E&xporta - - + &Quit &Surt + Help Ajuda + About Quant a + &Help &Ajuda + What's this? Què és això? + My samples Les meves mostres + My presets Les meves plantilles + My projects Els meus projectes + Loading song... Carregant cançó... + &Settings &Configuració + Show setup wizard Mostra l'assistent de configuració + By pressing this button, you can show or hide the project notes window. In this window you can put down your project notes. Pitjant aquest botó, pots mostrar o amagar la finestra de notes del projecte. En aquesta finestra pots escriure les teves notes del projecte. + LMMS %1 LMMS %1 + Create new project Crea nou projecte + Open existing project Obre projecte existent + Save current project Desa projecte actual + Export current project Exporta projecte actual + By pressing this button, you can show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melody-patterns in an easy way. Pitjant aquest botó pots mostrar o amagar el Rotlle de Piano. Amb l'ajuda del Rotlle de Piano pots editar patrons de melodia fàcilment. + &Project &Projecte + Open project Obre projecte + Save project Desa projecte - Import file - Importa fitxer - - + My home El meu cau + Root directory Directori arrel + Show/hide Beat+Baseline Editor Mostra/amaga Editor de Ritme Base + By pressing this button, you can show or hide the Beat+Baseline Editor. The Beat+Baseline Editor is needed for creating beats, opening, adding and removing channels, cutting, copying and pasting beat- and baseline-patterns and other things like that. Pitjant aquest botó pots mostrar o amagar l'Editor de Ritme Base. L'Editor de Ritme Base és necessari per a crear ritmes; obrir, afegir i eliminar canals; tallar, copiar i enganxar patrons de ritme; i altres funcions similars. + Show/hide Piano-Roll Mostra/amaga Rotlle de Piano + Show/hide Song-Editor Mostra/amaga Editor de Cançó + By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap-samples) directly into the playlist. Pitjant aquest botó pots mostrar o amagar l'Editor de Cançó. Amb l'ajuda de l'Editor de Cançó pots editar la llista de reproducció de la cançó i especificar quan ha de tocar-se cada pista. També pots inserir i moure mostres (p.e. mostres de rap) directament a la llista de reproducció. + Show/hide project notes Mostra/amaga les notes del projecte + &Edit &Edita + Undo Desfés + Redo Refés + Show settings dialog Mostra el diàleg de configuració + Help not available Ajuda no disponible - Currently there's no help available in LMMS. -Please visit http://wiki.mindrules.net for documentation on LMMS. - Actualment no hi ha ajuda disponible a LMMS. -Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. - - + Show/hide Automation Editor Mostra/amaga Editor d'Automatització + By pressing this button, you can show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Pitjant aquest botó pots mostrar o amagar l'Editor d'Automatització. Amb l'ajuda de l'Editor d'Automatització pots editar valors dinàmics fàcilment. + &Tools E&ines - LADSPA Plugins... - Connectors LADSPA... - - + MultiMedia Project (*.mmp *.mmpz *.xml) Projecte MultiMèdia (*.mmp *.mmpz *.xml) + MultiMedia Project (*.mmp *.mmpz);;MultiMedia Project Template (*.mpt) Projecte MultiMèdia (*.mmp *.mmpz);;Plantilla de Projecte MultiMèdia (*.mpt) + Online help Ajuda en línia - start - doku.php id - start + + Import... + Importa... + + + + E&xport... + E&xporta... + + + + Currently there's no help available in LMMS. +Please visit http://lmms.sf.net/wiki for documentation on LMMS. + Actualment no hi ha ajuda disponible a LMMS. +Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS. mallets + Spread Dispersió + Spread: Dispersió: + Hardness Duresa + Hardness: Duresa: + Position Posició + Position: Posició: + Vibrato Gain Guany de Vibrat + Vib Gain Guany Vib + Vib Gain: Guany Vib: + Vibrato Freq Freq de Vibrat + Vib Freq Freq Vib + Vib Freq: Freq Vib: + Stick Mix Mescla de Pals + Stick Mix: Mescla de Pals: + Modulator Modulador + Modulator: Modulador: + Crossfade Entremescla + Crossfade: Entremescla: + LFO Speed Velocitat OBF + LFO Speed: Velocitat OBF: + LFO Depth Profunditat OBF + LFO Depth: Profunditat OBF: + ADSR ADSR + ADSR: ADSR: + Bowed Doblegat + Pressure Pressió + Pressure: Pressió: + Motion Moviment + Motion: Moviment: + Speed Velocitat + Speed: Velocitat: + Vibrato Vibrat + Vibrato: Vibrat: + Instrument Instrument + Marimba Marimba + Vibraphone Vibràfon + Agogo Agogo + Wood1 Fusta1 + Reso Reso + Wood2 Fusta2 + Beats Batecs + Two Fixed Fixat a Dos + Clump Grup + Tubular Bells Campanes Tubulars + Uniform Bar Barra Uniforme + Tuned Bar Barra Afinada + Glass Cristall + Tibetan Bowl Bol Tibetà + + + Missing files + Fitxers absents + + + + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + La instal·lació de Stk sembla estar incompleta. Assegura't de que el paquet complet Stk està instal·lat! + meterDialog + Meter Numerator Numerador de Mesurador + Meter Denominator Denominador de Mesurador @@ -2558,6 +3084,7 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. midiClient + DEVICE DISPOSITIU @@ -2565,6 +3092,7 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. midiClientRaw + DEVICE DISPOSITIU @@ -2572,50 +3100,62 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. midiTabWidget + MIDI-SETUP FOR THIS CHANNEL CONFIGURACIÓ MIDI PER A AQUEST CANAL + CHANNEL CANAL + Receive MIDI-events Rep esdeveniments MIDI + Default velocity for all input-events Velocitat per defecte per a l'entrada + Send MIDI-events Envia esdeveniments MIDI + Default velocity for all output-events Velocitat per defecte per a la sortida + MIDI-devices to receive MIDI-events from Dispositius MIDI des d'on rebre esdeveniments MIDI + MIDI-devices to send MIDI-events to Dispositius MIDI a on enviar esdeveniments MIDI + Input channel Canal d'entrada + Output channel Canal de sortida + Default input velocity Velocitat d'entrada per defecte + Default output velocity Velocitat de sortida per defecte @@ -2623,18 +3163,22 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. mixer + Plugin not found Connector no trobat + The %1-plugin wasn't found! No s'ha trobat el connector %1! + Error while loading plugin Error en carregar el connector + Failed loading plugin "%1"! Ha fallat la càrrega del connector "%1"! @@ -2642,10 +3186,12 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. nameLabel + Select icon Selecciona icona + All images (*.png *.jpg *.jpeg *.gif *.bmp) Totes les imatges (*.png *.jpg *.jpeg *.gif *.bmp) @@ -2653,6 +3199,7 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. nineButtonSelector + &Help &Ajuda @@ -2660,46 +3207,57 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. organicInstrument + Osc %1 waveform Forma d'ona d'osc %1 + Osc %1 waveform: Forma d'ona d'osc %1: + Osc %1 volume Volum d'osc %1 + Osc %1 volume: Volum d'osc %1: + Osc %1 panning Panorama d'osc %1 + Osc %1 panning: Panorama d'osc %1: + Osc %1 fine detuning left Desafinament fi esquerre d'osc %1 + Osc %1 fine detuning left: Desafinament fi esquerre d'osc %1: + cents cents + FX1 FX1 + Randomise Aleatoritza @@ -2707,46 +3265,57 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. patmanSynth + Open other patch Obre altre pedaç + Click here to open another patch-file. Loop and Tune settings are not reset. Pica aquí per a obrir un altre fitxer pedaç. La configuració de Bucle i Afina no es reinicia. + Loop mode Mode Bucle + Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. Aquí pots canviar el mode Bucle. Si és actiu, PatMan farà servir la informació de bucle disponible al fitxer. + Tune mode Mode Afina + Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency. Aquí pots canviar el mode Afina. Si és actiu, PatMan afinarà la mostra a la freqüència de la nota. + No file selected Cap fitxer seleccionat + Open patch file Obre fitxer pedaç + Patch-Files (*.pat) Fitxers Pedaç (*.pat) + Loop Bucle + Tune Afina @@ -2754,60 +3323,74 @@ Per favor, visita http://wiki.mindrules.net per a documentació sobre LMMS. pattern + Change name Canvia nom + Reset name Restaura nom + Freeze Congela + Unfreeze Descongela + Clear all notes Esborra totes les notes + Cannot freeze pattern No es pot congelar el patró + The pattern currently cannot be freezed because you're in play-mode. Please stop and try again! El patró no es pot congelar ara mateix perquè estàs en mode de reproducció. Per favor, atura i torna-ho a provar! + Open in piano-roll Obre al rotlle de piano + Refreeze Recongela + double-click to open this pattern in piano-roll use mouse wheel to set volume of a step pica dos cops per a obrir aquest patró al rotlle de piano usa la roda del ratolí per a ajustar el volum d'un pas + Add steps Afegeix passos + Remove steps Elimina passos + 1 step 1 pas + %1 steps %1 passos @@ -2815,10 +3398,12 @@ usa la roda del ratolí per a ajustar el volum d'un pas patternFreezeStatusDialog + Freezing pattern... Congelant patró... + Cancel Cancel·la @@ -2826,106 +3411,132 @@ usa la roda del ratolí per a ajustar el volum d'un pas pianoRoll + Cut selected notes (Ctrl+X) Talla les notes seleccionades (Ctrl+X) + Copy selected notes (Ctrl+C) Copia les notes seleccionades (Ctrl+C) + If you click here, selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste-button. Si piques aquí, les notes seleccionades seran tallades cap al portapapers. Pots enganxar-les a qualsevol banda de qualsevol patró picant el botó enganxar. + If you click here, selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste-button. Si piques aquí, les notes seleccionades seran copiades al portapapers. Pots enganxar-les a qualsevol banda de qualsevol patró picant el botó enganxar. + If you click here, the notes from the clipboard will be pasted at the first visible tact. Si piques aquí, les notes del portapapers seran enganxades al primer compàs visible. + Paste notes from clipboard (Ctrl+V) Enganxa notes des del portapapers (Ctrl+V) + Play/pause current pattern (Space) Reprodueix/pausa el patró actual (Espai) + Stop playing of current pattern (Space) Atura la reproducció del patró actual (Espai) + Click here, if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. Pica aquí si vols reproduir el patró actual. Això és útil mentre s'edita. El patró es repeteix automàticament quan arriba al final. + Click here, if you want to stop playing of current pattern. Pica aquí si vols aturar la reproducció del patró actual. + Piano-Roll - no pattern Rotlle de Piano - sense patró + Please open a pattern by double-clicking on it! Per favor, obre un patró picant-lo dos cops! + Piano-Roll - %1 Rotlle de Piano - %1 + Record notes from MIDI-device/channel-piano Enregistra notes des d'un dispositiu MIDI o piano de canal + Click here, if you want to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. Pica aquí si vols enregistrar notes des d'un dispositiu MIDI o el piano virtual de prova de la finestra de canal corresponent al patró actual. Mentre s'enregistra, totes les notes que toquis seran escrites en aquest patró i les podràs reproduir i editar després. + Last note Darrera nota + Notes copied Notes copiades + All selected notes were copied to the clipboard. Totes les notes seleccionades s'han copiat al portapapers. + Draw mode (Shift+D) Mode dibuixar (Maj+D) + Erase mode (Shift+E) Mode esborrar (Maj+E) + Select mode (Shift+S) Mode seleccionar (Maj+S) + Move selection mode (Shift+M) Mode moure selecció (Maj+M) + If you click here, draw-mode will be activated. In this mode you can add, resize and move single notes. This is the default-mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Si piques aquí, el mode dibuixar serà activat. En aquest mode pots afegir, redimensionar i moure notes soltes. Aquest és el mode per defecte que s'utilitza més temps. També pots pitjar 'Maj+D' al teclat per a activar aquest mode. + If you click here, erase-mode will be activated. In this mode you can erase single notes. You can also press 'Shift+E' on your keyboard to activate this mode. Si piques aquí, s'activarà el mode esborrar. En aquest mode pots esborrar notes soltes. També pots pitjar 'Maj+E' al teclat per a activar aquest mode. + If you click here, select-mode will be activated. In this mode you can select notes. This is neccessary if you want to cut, copy, paste, delete or move notes. You can also press 'Shift+S' on your keyboard to activate this mode. Si piques aquí, el mode seleccionar serà activat. En aquest mode pots seleccionar notes. Això és necessari si vols tallar, copiar, enganxar, esborrar o moure notes. També pots pitjar 'Maj+S' al teclat per a activar aquest mode. + If you click here, move-mode will be activated. In this mode you can move the notes you selected in select-mode. You can also press 'Shift+M' on your keyboard to activate this mode. Si piques aquí, el mode moure serà activat. En aquest mode pots moure les notes que has seleccionat en el mode seleccionar. També pots pitjar 'Maj+M' al teclat per a activar aquest mode. @@ -2933,10 +3544,12 @@ usa la roda del ratolí per a ajustar el volum d'un pas pianoWidget + Base note Nota base + &Open in automation editor &Obre a l'editor d'automatització @@ -2944,18 +3557,22 @@ usa la roda del ratolí per a ajustar el volum d'un pas pluckedStringSynth + Pick position Posició per a tocar + Pick position: Posició per a tocar: + Pickup position Posició per a recollir + Pickup position: Posició per a recollir: @@ -2963,90 +3580,112 @@ usa la roda del ratolí per a ajustar el volum d'un pas pluginBrowser + no description sense descripció + Instrument plugins Connectors d'instrument + Plugin browser Navegador de connectors + You can drag an instrument-plugin into either the Song-Editor, the Beat+Baseline Editor or just into a channel-window or on the corresponding channel-button. Pots arrossegar un connector d'instrument a l'Editor de Cançó, a l'Editor de Ritme Base o simplement a una finestra de canal o al botó de canal corresponent. + Vibrating string modeler Modelador de corda vibrant + cheap synthesis of guitar/harp-like sounds síntesi barata de sons com de guitarra/arpa + Filter for importing MIDI-files into LMMS Filtre per a importar fitxers MIDI a LMMS + three powerful oscillators you can modulate in several ways tres potents oscil·ladors que pots modular de vàries maneres + VST-host for using VST(i)-plugins within LMMS servidor VST per a usar connectors VST(i) amb LMMS + Filter for importing FL Studio projects into LMMS Filtre per a importar projectes FL Studio a LMMS + Rough & Dirty Wavetable Synthesizer. Sintetitzador de Taula d'ones Bast & Brut. + Additive Synthesizer for organ-like sounds Sintetitzador Additiu per a sons com d'orgue + simple sampler with various settings for using samples (e.g. drums) in an instrument-track mostrejador simple amb diferents paràmetres per a usar mostres (p.e. bateria) en una pista d'instrument + Tuneful things to bang on Coses melòdiques per a fer soroll + Incomplete monophonic immitation tb303 Imitació monofònica incompleta tb303 + plugin for using arbitrary LADSPA-effects inside LMMS. connector per a usar efectes LADSPA arbitraris a LMMS. + plugin for using arbitrary VST-effects inside LMMS. connector per a usar efectes VST arbitraris a LMMS. + versatile kick- & bassdrum-synthesizer sintetitzador versàtil de guitza & bombo + Singer bot to add some basic vocals Bot cantant per a afegir veus bàsiques + Tool for live performance Eina per a actuació en directe + Incomplete polyphonic immitation tb303 Imitació polifònica incompleta tb303 + GUS-compatible patch instrument Instrument de pedaç compatible GUS @@ -3054,126 +3693,157 @@ usa la roda del ratolí per a ajustar el volum d'un pas polyb302Synth + VCF Cutoff Frequency Freqüència de Tall VCF + Cutoff Freq: Freq Tall: + CUT TALL + VCF Resonance Ressonància VCF + Resonance: Ressonància: + RES RES + VCF Envelope Mod Mod Envoltant VCF + Env Mod: Mod Env: + ENV MOD MOD ENV + VCF Envelope Decay Decaïment Envoltant VCF + Decay: Decaïment: + DEC DEC + 303-es-que, 24dB/octave, 3 pole filter 303-es-que, 24dB/octava, filtre 3 pols + Slide Decay Decaïment de Lliscament + Slide Decay: Decaïment de Lliscament: + SLIDE LLISCA + VCO fine detuning Desafinament fi VCO + VCO Fine Detuning: Desafinament Fi VCO: + DETUNE DESAF + Distortion Distorsió + DIST: DIST: + DIST DIST + Waveform Forma d'ona + WAVE: ONA: + WAVE ONA + Sawtooth Dent de serra + Inverted Sawtooth Dent de serra invertida + Triangle Triangular + Square Quadrada + Rounded Square Quadrada Arrodonida + Moog Moog @@ -3181,118 +3851,147 @@ usa la roda del ratolí per a ajustar el volum d'un pas projectNotes + Put down your project notes here. Escriu aquí les teves notes del projecte. + Project notes Notes del projecte + Edit Actions Accions d'Editar + &Undo &Desfés + Ctrl+Z Ctrl+Z + &Redo &Refés + Ctrl+Y Ctrl+Y + &Copy &Copia + Ctrl+C Ctrl+C + Cu&t &Talla + Ctrl+X Ctrl+X + &Paste &Enganxa + Ctrl+V Ctrl+V + Format Actions Accions de Format + &Bold &Negreta + Ctrl+B Ctrl+B + &Italic Curs&iva + Ctrl+I Ctrl+I + &Underline &Subratllat + Ctrl+U Ctrl+U + &Left &Esquerra + Ctrl+L Ctrl+L + C&enter Cen&tre + Ctrl+E Ctrl+E + &Right &Dreta + Ctrl+R Ctrl+R + &Justify &Justifica + Ctrl+J Ctrl+J + &Color... &Color... @@ -3300,62 +3999,77 @@ usa la roda del ratolí per a ajustar el volum d'un pas rackPlugin + Turn the effect off Apaga l'efecte + On/Off Encès/Apagat + Toggles the effect on or off. Encén o apaga l'efecte. + Wet/Dry mix Mescla Moll/Sec + W/D M/S + Wet Level: Nivell de Moll: + The Wet/Dry knob sets the ratio between the input signal and the effect that shows up in the output. La roda Moll/Sec indica la proporció entre el senyal d'entrada i l'efecte que es mostra a la sortida. + Decay Decaïment + Time: Temps: + The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay effects. La roda Decaïment controla quants períodes de silenci han de passar abans de que el connector aturi el processament. Valors més petits reduiran la càrrega de CPU, però augmenten el risc de tallar la cua als efectes de retard. + Gate Porta + Gate: Porta: + The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. La roda Porta controla el nivell de senyal que és considerat 'silenci' mentre decideix quan aturar de processar senyals. + Controls Controls + Effect plugins function as a chained series of effects where the signal will be processed from top to bottom. The On/Off switch allows you to bypass a given plugin at any point in time. @@ -3378,18 +4092,22 @@ El botó Controls obre un diàleg per a editar els paràmetres de l'efecte. Un clic dret mostrarà un menú contextual on podràs canviar l'ordre en el qual els efectes són processats o esborrar un efecte. + Move &up Mou a&munt + Move &down Mou a&vall + &Remove this plugin &Treu aquest connector + &Help &Ajuda @@ -3397,18 +4115,22 @@ Un clic dret mostrarà un menú contextual on podràs canviar l'ordre en el remoteVSTPlugin + Loading plugin Carregant connector + Please wait while loading VST-plugin... Per favor, espera mentre es carrega el connector VST... + Failed loading VST-plugin Ha fallat la càrrega del connector VST + The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! El connector VST %1 no s'ha pogut carregar per alguna raó. @@ -3418,6 +4140,7 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen renameDialog + Rename... Canvia el nom... @@ -3425,42 +4148,52 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen sampleBuffer + Wave-Files (*.wav) Fitxers WAV (*.wav) + OGG-Files (*.ogg) Fitxers OGG (*.ogg) + VOC-Files (*.voc) Fitxers VOC (*.voc) + AIFF-Files (*.aif *.aiff) Fitxers AIFF (*.aif *.aiff) + AU-Files (*.au) Fitxers AU (*.au) + RAW-Files (*.raw) Fitxers RAW (*.raw) + Open audio file Obre fitxer d'àudio + FLAC-Files (*.flac) Fitxers FLAC (*.flac) + All Audio-Files (*.wav *.ogg *.flac *.spx *.voc *.aif *.aiff *.au *.raw) Tots els Fitxers d'Àudio (*.wav *.ogg *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + SPEEX-Files (*.spx) Fitxers SPEEX (*.spx) @@ -3468,6 +4201,7 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen sampleTCO + double-click to select sample pica dos cops per a seleccionar la mostra @@ -3475,22 +4209,27 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen sampleTrack + Sample track Pista de mostra + Channel volume Volum del canal + Channel volume: Volum del canal: + VOL VOL + With this knob you can set the volume of the opened channel. Amb aquesta roda pots ajustar el volum del canal obert. @@ -3498,182 +4237,226 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen setupDialog + Setup LMMS Configuració de LMMS + General settings Configuració general + BUFFER SIZE MIDA DE MEMÒRIA INTERMÈDIA + Reset to default-value Restaura al valor per defecte + MISC MISC + Disable tooltips (no spurious interrupts while playing) Desactiva els avisos d'eina + Classical knob usability (move cursor around knob to change value) Usabilitat de roda clàssica (moure el cursor al voltant de la roda) + GIMP-like windows (no MDI) Finestres com al GIMP (sense MDI) + Do not show wizard after up-/downgrade No mostris l'assistent després d'actualitzar/desactualitzar + Do not show message after closing this dialog No mostris el missatge que surt en tancar aquest diàleg + Display volume as dbV Mostra el volum en dbV + Directories Directoris + LMMS working directory Directori de treball de LMMS + VST-plugin directory Directori de connectors VST + Artwork directory Directori de material gràfic + FL Studio installation directory Directori d'instal·lació de FL Studio + Performance settings Configuració de rendiment + UI effects vs. performance Efectes UI vs. rendiment + Disable channel activity indicators Desactiva els indicadors d'activitat de canal + Only press keys on channel-piano manually Pitja les tecles del piano de canal només manualment + Audio settings Configuració d'àudio + AUDIO INTERFACE INTERFÍCIE D'ÀUDIO + MIDI settings Configuració MIDI + MIDI INTERFACE INTERFÍCIE MIDI + OK D'acord + Cancel Cancel·la + Restart LMMS Reinicia LMMS + Please note that most changes won't take effect until you restart LMMS! Per favor, tingues en compte que la majoria de canvis no s'aplicaran fins que reiniciïs LMMS! + Frames: %1 Latency: %2 ms Marcs: %1 Latència: %2 ms + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. Aquí pots configurar la mida de la memòria intermèdia interna usada per LMMS. Els valors més petits donen menor latència però també poden causar so inservible o baix rendiment, especialment a ordinadors antics o sistemes amb un nucli sense temps real. + Choose LMMS working directory Escull el directori de treball de LMMS + Choose your VST-plugin directory Escull el teu directori de connectors VST + Choose artwork-theme directory Escull el directori de material gràfic + Choose FL Studio installation directory Escull el directori d'instal·lació de FL Studio + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. Aquí pots seleccionar la teva interfície d'àudio preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, JACK, OSS i altres. Abaix pots veure una caixa amb controls per a configurar la interfície d'àudio seleccionada. + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. Aquí pots seleccionar la teva interfície MIDI preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, OSS i més. Abaix pots veure una caixa amb controls per a configurar la interfície MIDI seleccionada. + Do not compress project files per default No comprimeixis per defecte els fitxers de projecte + LADSPA plugin directories Directoris de connectors LADSPA + STK rawwave directory Directori d'ones crues STK + SMP support Suport SMP + Parallelizing level Nivell de paral·lelització + If you have a machine with more then one processor (e.g. dual-core systems) you should use a parallelizing-level above 1 which means that LMMS will try to split up sound-processing into several threads which should should be run on several cores by the underlaying operating-system. Please note that in some cases parallelizing won't work with small buffer-sizes. If you experience problems (i.e. lot of xruns), try to increase buffer-size. Si tens una màquina amb més d'un processador (p.e. sistemes amb nucli dual) hauries d'usar un nivell de paral·lelització més gran que 1, que vol dir que LMMS tractarà de dividir el processament de so en varis fils que haurien d'executar-se en varis nuclis pel sistema operatiu subjacent. Fixa't que en alguns casos la paral·lelització no funcionarà amb memòries intermèdies de mida petita. Si experimentes problemes (p.e. molts xruns), prova d'augmentar la mida de la memòria intermèdia. + Choose LADSPA plugin directory Escull un directori de connectors LADSPA + Choose STK rawwave directory Escull el directori d'ones crues STK @@ -3681,38 +4464,47 @@ Fixa't que en alguns casos la paral·lelització no funcionarà amb memòri setupWidget + ALSA (Advanced Linux Sound Architecture) ALSA (Advanced Linux Sound Architecture) + Dummy (no sound output) Maniquí (sense sortida de so) + JACK (JACK Audio Connection Kit) JACK (JACK Audio Connection Kit) + OSS (Open Sound System) OSS (Open Sound System) + SDL (Simple DirectMedia Layer) SDL (Simple DirectMedia Layer) + ALSA Raw-MIDI (Advanced Linux Sound Architecture) MIDI cru ALSA (Advanced Linux Sound Architecture) + OSS Raw-MIDI (Open Sound System) MIDI cru OSS (Open Sound System) + Dummy (no MIDI support) Maniquí (sense suport MIDI) + ALSA-Sequencer (Advanced Linux Sound Architecture) Seqüenciador ALSA (Advanced Linux Sound Architecture) @@ -3720,164 +4512,203 @@ Fixa't que en alguns casos la paral·lelització no funcionarà amb memòri songEditor + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. Pica aquí si vols aturar la reproducció de la cançó. El marcador de posició de cançó serà col·locat a l'inici de la cançó. + untitled sense títol + File already exists El fitxer ja existeix + Could not open file No es pot obrir el fitxer + Error in multimedia-project Error al projecte multimèdia + The multimedia-project %1 seems to contain errors. LMMS will try its best to recover as much as possible data from this file. El projecte multimèdia %1 sembla contenir errors. LMMS farà el que pot per a recuperar el màxim possible de dades d'aquest fitxer. + Could not write file No es pot escriure el fitxer + Song-Editor Editor de Cançó + The file "%1" already exists. Do you want to overwrite it? El fitxer "%1" ja existeix. Vols sobreescriure'l? + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. Pica aquí si vols reproduir la cançó sencera. La reproducció començarà al marcador de posició de cançó (verd). També pots moure'l mentre es reprodueix. + Play song (Space) Reprodueix cançó (Espai) + Stop song (Space) Atura cançó (Espai) + The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every tact has four beats, so the tempo in BPM specifies, how many tacts / 4 should be played within a minute (or how many tacts should be played within four minutes). El tempo d'una cançó s'especifica en batecs per minut (BPM). Si vols canviar el tempo de la cançó, canvia aquest valor. Cada compàs té quatre batecs, llavors el tempo en BPM especifica quants compassos / 4 s'han de tocar en un minut (o quants compassos s'han de tocar en quatre minuts). + master pitch to mestre + tempo of song tempo de cançó + Add beat/bassline Afegeix ritme base + Add sample-track Afegeix pista de mostra + Project NOT saved. Projecte NO desat. + The file %1 already exists. Do you want to overwrite it? El fitxer %1 ja existeix. Vols sobreescriure'l? + Select file for project-export... Selecciona fitxer per a exportar projecte... + Project not saved Projecte no desat + The current project was modified since last saving. Do you want to save it now? El projecte actual ha estat modificat des del darrer desament. Vols desar-lo ara? + Import file Importa fitxer + TEMPO/BPM TEMPO/BPM + Could not open file %1. You probably have no rights to read this file. Please make sure you have at least read-access to the file and try again. No es pot obrir el fitxer %1. Probablement no tens permís per a llegir aquest fitxer. Per favor, assegura't que tens permís de lectura per al fitxer i torna-ho a provar. + High quality mode Mode alta qualitat + Auto limiter Autolimitador + master volume volum mestre + Master volume Volum mestre + Master pitch To mestre + Draw mode Mode dibuixar + Edit mode (select and move) Mode editar (selecciona i mou) + Value: %1% Valor: %1% + Value: %1 semitones Valor: %1 semitons + Project saved Projecte desat + The project %1 is now saved. El projecte %1 està desat. + The project %1 was not saved! El projecte %1 no està desat! + Could not write file %1. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again. No es pot escriure el fitxer %1. Probablement no tens permís per a escriure aquest fitxer. Per favor, assegura't que tens permís d'escriptura per a aquest fitxer i torna-ho a provar. + Tempo Tempo @@ -3885,22 +4716,27 @@ Per favor, assegura't que tens permís d'escriptura per a aquest fitxe surroundArea + click to where this channel should be audible pica a on aquest canal ha de ser audible + Surround area X Àrea envoltant X + Surround area Y Àrea envoltant Y + Open &X in automation editor Obre &X a l'editor d'automatització + Open &Y in automation editor Obre &Y a l'editor d'automatització @@ -3908,6 +4744,7 @@ Per favor, assegura't que tens permís d'escriptura per a aquest fitxe tabWidget + Settings for %1 Configuració per a %1 @@ -3915,98 +4752,122 @@ Per favor, assegura't que tens permís d'escriptura per a aquest fitxe tempoSyncKnob + Tempo Sync Sinc Tempo + &Reset (%1%2) &Restaura (%1%2) + &Copy value (%1%2) &Copia valor (%1%2) + &Paste value (%1%2) &Enganxa valor (%1%2) + No Sync Sense Sinc + Eight beats Vuit batecs + Whole note Nota sencera + Half note Mitja nota + Quarter note Quart de nota + 8th note 8è de nota + 16th note 16è de nota + 32nd note 32è de nota + Connect to MIDI-device Connecta a dispositiu MIDI + &Help &Ajuda + Synced to Eight Beats Sincronitzat a Vuit Batecs + Synced to Whole Note Sincronitzat a Nota Sencera + Synced to Half Note Sincronitzat a Mitja Nota + Synced to Quarter Note Sincronitzat a Quart de Nota + Synced to 8th Note Sincronitzat a 8è de Nota + Synced to 16th Note Sincronitzat a 16è de Nota + Synced to 32nd Note Sincronitzat a 32è de Nota + &Open in automation editor &Obre a l'editor d'automatització + Custom... Personalitzat... + Custom Personalitzat @@ -4014,30 +4875,37 @@ Per favor, assegura't que tens permís d'escriptura per a aquest fitxe timeLine + Enable/disable auto-scrolling Activa/desactiva autodesplaçament + Enable/disable loop-points Activa/desactiva punts de bucle + After stopping go back to begin Després d'aturar torna al començament + After stopping go back to position at which playing was started Després d'aturar torna a la posició on va començar la reproducció + After stopping keep position Després d'aturar manté la posició + Hint Consell + Press <Ctrl> to disable magnetic loop-points. Pitja <Ctrl> per a desactivar punts de bucle magnètics. @@ -4045,42 +4913,51 @@ Per favor, assegura't que tens permís d'escriptura per a aquest fitxe trackContainer + Loading project... Carregant projecte... + Cancel Cancel·la + Please wait... Per favor, espera... + Importing MIDI-file... Important fitxer MIDI... + Couldn't import file No es pot importar el fitxer + Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. No es pot trobar un filtre per a importar el fitxer %1. Hauries de convertir aquest fitxer a un format suportat per LMMS utilitzant altre programari. + Couldn't open file No es pot obrir el fitxer + Couldn't open file %1 for reading. Please make sure you have read-permission to the file and the directory containing the file and try again! No es pot llegir el fitxer %1. Per favor, assegura't que tens permís de lectura per al fitxer i el directori que el conté i torna-ho a provar! + Importing FLP-file... Important fitxer FLP... @@ -4088,46 +4965,57 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct trackContentObject + Cut Talla + Copy Copia + Paste Enganxa + Current position Posició actual + Hint Consell + Press <Ctrl> for free positioning. Pitja <Ctrl> per a col·locar lliurement. + Current length Longitud actual + Press <Ctrl> for free resizing. Pitja <Ctrl> per a redimensionar lliurement. + %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 a %5:%6) + Delete (middle mousebutton) Esborra (botó del mig del ratolí) + Mute/unmute (<Ctrl> + middle click) Apaga/encén (<Ctrl> + clic del mig) @@ -4135,22 +5023,27 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct trackOperationsWidget + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. Pitja <Ctrl> quan piquis el control de moviment per a iniciar una nova acció d'arrossegar i amollar. + Clone this track Clona aquesta pista + Remove this track Elimina aquesta pista + Actions for this track Accions per a aquesta pista + With this switch you can either mute this track or mute all other tracks. By clicking left, this track is muted. This is useful, if you only want to listen to the other tracks without changing this track and loosing information. When you click right on this switch, all other tracks will be muted. This is useful, if you only want to listen to this track. @@ -4159,20 +5052,24 @@ Amb un clic esquerre, aquesta pista s'apaga. Això és útil si només vols Amb un clic dret a l'interruptor, totes les altres pistes s'apagaran. Això és útil si només vols escoltar aquesta pista. + left click = mute this track right click = mute all other tracks (solo) clic esquerre = apaga aquesta pista clic dret = apaga totes les altres pistes (solo) + Mute Apaga + Enable automation Habilita automatització + Disable automation Inhabilita automatització @@ -4180,182 +5077,227 @@ clic dret = apaga totes les altres pistes (solo) tripleOscillator + semitones semitons + degrees graus + Click here if you want a sine-wave for current oscillator. Pica aquí si vols una ona sinusoïdal per a l'oscil·lador actual. + Click here if you want a triangle-wave for current oscillator. Pica aquí si vols una ona triangular per a l'oscil·lador actual. + Click here if you want a saw-wave for current oscillator. Pica aquí si vols una ona de serra per a l'oscil·lador actual. + Click here if you want a square-wave for current oscillator. Pica aquí si vols una ona quadrada per a l'oscil·lador actual. + Click here if you want a white-noise for current oscillator. Pica aquí si vols un soroll blanc per a l'oscil·lador actual. + Click here if you want a user-defined wave-shape for current oscillator. Pica aquí si vols una forma d'ona arbitrària per a l'oscil·lador actual. + Click here if you want a moog-saw-wave for current oscillator. Pica aquí si vols una ona de serra Moog per a l'oscil·lador actual. + Click here if you want an exponential wave for current oscillator. Pica aquí si vols una ona exponencial per a l'oscil·lador actual. + use frequency modulation for modulating oscillator 2 with oscillator 1 modula la freqüència de l'oscil·lador 1 amb l'oscil·lador 2 + use amplitude modulation for modulating oscillator 2 with oscillator 1 modula l'amplitud de l'oscil·lador 1 amb l'oscil·lador 2 + mix output of oscillator 1 & 2 mescla la sortida dels oscil·ladors 1 & 2 + synchronize oscillator 1 with oscillator 2 sincronitza l'oscil·lador 1 amb l'oscil·lador 2 + use frequency modulation for modulating oscillator 3 with oscillator 2 modula la freqüència de l'oscil·lador 2 amb l'oscil·lador 3 + use amplitude modulation for modulating oscillator 3 with oscillator 2 modula l'amplitud de l'oscil·lador 2 amb l'oscil·lador 3 + mix output of oscillator 2 & 3 mescla la sortida dels oscil·ladors 2 & 3 + synchronize oscillator 2 with oscillator 3 sincronitza l'oscil·lador 2 amb l'oscil·lador 3 + Osc %1 volume Volum d'osc %1 + Osc %1 volume: Volum d'osc %1: + With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here. Amb aquesta roda pots ajustar el volum de l'oscil·lador %1. Quan poses un valor de 0 l'oscil·lador s'apaga. Altrament, pots sentir l'oscil·lador tan alt com l'ajustis aquí. + Osc %1 panning Panorama d'osc %1 + Osc %1 panning: Panorama d'osc %1: + With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right. Amb aquesta roda pots ajustar el panorama de l'oscil·lador %1. Un valor de -100 significa 100% a l'esquerra i un valor de 100 mou la sortida de l'oscil·lador a la dreta. + Osc %1 coarse detuning: Desafinament gruixut d'osc %1: + With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Amb aquesta roda pots ajustar el desafinament fi de l'oscil·lador %1 per al canal dret. El desafinament fi està graduat entre -100 cents i +100 cents. Això és útil per a crear sons "gruixuts". + Osc %1 phase-offset Desfasament d'osc %1 + Osc %1 phase-offset: Desfasament d'osc %1: + With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Amb aquesta roda pots ajustar el desfasament de l'oscil·lador %1. Això significa que pots moure el punt d'una oscil·lació on l'oscil·lador comença a oscil·lar. Per exemple, si tens una ona sinusoïdal amb un desfasament de 180 graus, l'ona anirà primer cap a abaix. És el mateix amb una ona quadrada. + Osc %1 stereo phase-detuning Desfasament estèreo d'osc %1 + Osc %1 coarse detuning Desafinament gruixut d'osc %1 + With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord. Amb aquesta roda pots ajustar el desafinament gruixut de l'oscil·lador %1. Pots desafinar l'oscil·lador 12 semitons (1 octava) cap a amunt i abaix. Això és útil per a crear sons amb un acord. + Osc %1 fine detuning left Desafinament fi esquerre d'osc %1 + Osc %1 fine detuning left: Desafinament fi esquerre d'osc %1: + cents cents + With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds. Amb aquesta roda pots ajustar el desafinament fi de l'oscil·lador %1 per al canal esquerre. El desafinament fi està graduat entre -100 cents i +100 cents. Això és útil per a crear sons "gruixuts". + Osc %1 fine detuning right Desafinament fi dret d'osc %1 + Osc %1 fine detuning right: Desafinament fi dret d'osc %1: + Osc %1 stereo phase-detuning: Desfasament estèreo d'osc %1: + With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo-sounds. Amb aquesta roda pots ajustar el desfasament estèreo de l'oscil·lador %1. El desfasament estèreo especifica el tamany de la diferència entre el desfasament del canal esquerre i el dret. Això és molt bo per a crear sons estèreo amples. + use phase modulation for modulating oscillator 2 with oscillator 1 modula la fase de l'oscil·lador 1 amb l'oscil·lador 2 + use phase modulation for modulating oscillator 3 with oscillator 2 modula la fase de l'oscil·lador 2 amb l'oscil·lador 3 + Modulation type 1 Tipus de modulació 1 + Modulation type 2 Tipus de modulació 2 + Osc %1 wave shape Forma d'ona d'osc %1 @@ -4363,60 +5305,74 @@ clic dret = apaga totes les altres pistes (solo) vestigeInstrument + Open other VST-plugin Obre altre connector VST + Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file. Pica aquí si vols obrir un altre connector VST. Després de picar aquest botó, apareix un diàleg d'obrir fitxers i pots seleccionar el teu fitxer. + Show/hide VST-GUI Mostra/amaga GUI VST + Click here to show or hide the graphical user interface (GUI) of your VST-plugin. Pica aquí per a mostrar o amagar la interfície gràfica d'usuari (GUI) del connector VST. + Turn off all notes Apaga totes les notes + Loading plugin Carregant connector + Please wait while loading VST-plugin... Per favor, espera mentre es carrega el connector VST... + Failed loading VST-plugin Ha fallat la càrrega del connector VST + The VST-plugin %1 could not be loaded for some reason. If it runs with other VST-software under Linux, please contact an LMMS-developer! El connector VST %1 no s'ha pogut carregar per alguna raó. Si funciona amb altre programari VST sota Linux, per favor contacta amb un desenvolupador de LMMS! + Open VST-plugin Obre connector VST + DLL-files (*.dll) Fitxers DLL (*.dll) + EXE-files (*.exe) Fitxers EXE (*.exe) + No VST-plugin loaded Cap connector VST carregat + by per @@ -4424,6 +5380,7 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen vibed + The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded. The waveform can also be drawn in the graph. @@ -4440,118 +5397,147 @@ El botó 'S' suavitzarà la forma d'ona. El botó 'N' normalitzarà la forma d'ona. + Volume Volum + Volume: Volum: + The 'V' knob sets the volume of the selected string. La roda 'V' ajusta el volum de la corda seleccionada. + String stiffness Rigidesa de corda + String stiffness: Rigidesa de corda: + The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring. La roda 'S' ajusta la rigidesa de la corda seleccionada. La rigidesa de la corda afecta el temps que la corda ressonarà. Quan més baix el valor, més temps sonarà la corda. + Pick position Posició per a tocar + Pick position: Posició per a tocar: + The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge. La roda 'P' ajusta la posició on serà tocada la corda seleccionada. Quan més baix el valor, es toca més a prop del pont. + Pickup position Posició per a recollir + Pickup position: Posició per a recollir: + The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge. La roda 'PU' ajusta la posició on les vibracions seran monitoritzades per a la corda seleccionada. Quan més baix aquest valor, la recollida és més a prop del pont. + Pan Panorama + Pan: Panorama: + The Pan knob determines the location of the selected string in the stereo field. La roda Pan determina la localització de la corda seleccionada al camp estèreo. + Detune Desafinament + Detune: Desafinament: + The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp. La roda Detune modifica el to de la corda seleccionada. Valors menors que zero faran que la corda soni amb bemoll. Valors majors que zero faran que la corda soni amb sostingut. + Fuzziness Arrissada + Fuzziness: Arrissada: + The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'. La roda Slap afegeix una mica d'arrissada a la corda seleccionada que és més notable durant l'atac, encara que també pot usar-se per a que la corda soni més 'metàl·lica'. + Length Longitud + Length: Longitud: + The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles. La roda Length ajusta la longitud de la corda seleccionada. Les cordes més llargues sonaran a la vegada més temps i més brillants, emperò també es menjaran més cicles de CPU. + Impulse or initial state Impuls o estat inicial + The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string. El selector 'Imp' determina si la forma d'ona del gràfic s'ha de tractar com un impuls impartit a la corda quan es toca o l'estat inicial de la corda. + The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. El selector Octave s'usa per a escollir a quin harmònic de la nota la corda sonarà. Per exemple, '-2' significa que la corda sonarà dues octaves per sota de la fonamental, 'F' significa que la corda sonarà a la fonamental, i '6' significa que la corda sonarà sis octaves per sobre de la fonamental. + The String selector is used to choose which string the controls are editting. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active. El selector String s'usa per a escollir quina corda estan editant els controls. Un instrument Vibed pot tenir fins a nou cordes vibrants independents. El LED a la cantonada dreta baixa de l'editor de forma d'ona indica si la corda seleccionada està activa. + Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at. The graph allows you to control the initial state or impulse used to set the string in motion. @@ -4576,10 +5562,12 @@ La roda 'Length' controla la longitud de la corda. El LED a la cantonada dreta baixa de l'editor de forma d'ona determina si la corda està activa a l'instrument actual. + &Help &Ajuda + Impulse Impuls @@ -4587,6 +5575,7 @@ El LED a la cantonada dreta baixa de l'editor de forma d'ona determina visualizationWidget + click to enable/disable visualization of master-output pica per a activar/desactivar la visualització de la sortida mestra @@ -4594,10 +5583,12 @@ El LED a la cantonada dreta baixa de l'editor de forma d'ona determina volumeKnob + Please enter a new value between -96.0 dbV and 6.0 dbV: Per favor, introdueix un nou valor entre -96,0 dbV i 6,0 dbV: + Please enter a new value between %1 and %2: Per favor, introdueix un nou valor entre %1 i %2: diff --git a/include/main_window.h b/include/main_window.h index c4fbfd94f..f2aa9b4e8 100644 --- a/include/main_window.h +++ b/include/main_window.h @@ -125,8 +125,6 @@ private: void finalize( void ); - bool have_www_browser( void ); - QWorkspace * m_workspace; diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 045efe4f6..a8acfa31d 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -30,4 +30,5 @@ SUBDIRS = \ $(STK_DIR) \ triple_oscillator \ $(VST_DIRS) \ - vibed + vibed \ + $(EXTRA_PLUGINS) diff --git a/plugins/polyb302/polyb302.cpp b/plugins/polyb302/polyb302.cpp index 6c0cc0996..ffc90eeed 100644 --- a/plugins/polyb302/polyb302.cpp +++ b/plugins/polyb302/polyb302.cpp @@ -380,15 +380,11 @@ polyb302Synth::polyb302Synth( instrumentTrack * _track ) : m_wave_knob->setLabel( tr( "WAVE" ) ); -#ifndef QT3 setAutoFillBackground( TRUE ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); -#else - setErasePixmap( PLUGIN_NAME::getIconPixmap( "artwork" ) ); -#endif connect( m_vcf_cut_knob, SIGNAL( valueChanged( float ) ), this, SLOT ( filterChanged( float ) ) ); @@ -577,7 +573,7 @@ void polyb302Synth::deleteNotePluginData( notePlayHandle * _n ) void polyb302Synth::db24Toggled( bool ) { - for( vlist::iterator it = m_handleStates.begin(); + for( QList::iterator it = m_handleStates.begin(); it != m_handleStates.end(); ++it ) { ( *it )->db24Toggled(); @@ -589,7 +585,7 @@ void polyb302Synth::db24Toggled( bool ) void polyb302Synth::detuneChanged( float ) { - for( vlist::iterator it = m_handleStates.begin(); + for( QList::iterator it = m_handleStates.begin(); it != m_handleStates.end(); ++it ) { ( *it )->detuneChanged(); @@ -603,7 +599,7 @@ void polyb302Synth::detuneChanged( float ) // recalcFilter. void polyb302Synth::filterChanged( float ) { - for( vlist::iterator it = m_handleStates.begin(); + for( QList::iterator it = m_handleStates.begin(); it != m_handleStates.end(); ++it ) { ( *it )->filterChanged(); @@ -665,7 +661,8 @@ polyb302Synth::handleState::handleState( const polyb302Synth * _synth ) m_vcf_envpos = ENVINC; m_vco_detune = 0; - m_vca_mode = 2; + // Start VCA on an attack. + m_vca_mode = 0; m_vca_a = 0; //m_vca_attack = 1.0 - 0.94406088; m_vca_attack = 1.0 - 0.96406088; @@ -816,19 +813,6 @@ void polyb302Synth::handleState::process( sampleFrame * _outbuf, m_sample_cnt++; m_vcf_envpos++; - // 01/21/07 Changed to VCF -> VCA instead of VCA -> VCF -#ifdef LB_FILTERED - float samp = m_vcf->process( m_vco_k ) * 2.0 * m_vca_a; -#else - float samp = m_vco_k * m_vca_a; -#endif - - for( int c = 0; c < DEFAULT_CHANNELS; c++ ) - { - _outbuf[i][c] = samp; - } - - // update vco m_vco_c += m_vco_inc * _freq; if( m_vco_c > 0.5 ) @@ -902,19 +886,30 @@ void polyb302Synth::handleState::process( sampleFrame * _outbuf, break; } - // Make it louder. For the better? - //m_vco_k*=2.0; + // Write out samples. +#ifdef LB_FILTERED + float samp = m_vcf->process( m_vco_k ) * 2.0 * m_vca_a; +#else + float samp = m_vco_k * m_vca_a; +#endif + + for( int c = 0; c < DEFAULT_CHANNELS; c++ ) + { + _outbuf[i][c] = samp; + } + // Handle Envelope // TODO: Add decay once I figure out how to extend past the end // of a note. - if( m_sample_cnt >= 0.5 * engine::getMixer()->sampleRate() ) - { - m_vca_mode = 2; - } if( m_vca_mode == 0 ) { m_vca_a += ( m_vca_a0 - m_vca_a ) * m_vca_attack; + if( m_sample_cnt >= 0.5 + * engine::getMixer()->sampleRate() ) + { + m_vca_mode = 2; + } } else if( m_vca_mode == 1 ) { diff --git a/plugins/polyb302/polyb302.h b/plugins/polyb302/polyb302.h index 1e7d8d87e..c32919f76 100644 --- a/plugins/polyb302/polyb302.h +++ b/plugins/polyb302/polyb302.h @@ -244,7 +244,7 @@ private: knob * m_slide_dec_knob; - vlist m_handleStates; + QList m_handleStates; } ; diff --git a/plugins/singerbot/singerbot.cpp b/plugins/singerbot/singerbot.cpp index 0e3bbc6f5..b522edf6c 100644 --- a/plugins/singerbot/singerbot.cpp +++ b/plugins/singerbot/singerbot.cpp @@ -394,6 +394,7 @@ void singerBot::synThread::run( void ) void singerBot::synThread::text_to_wave( void ) { + //TODO: Heap corruption too -> move to separate process? char command[80]; sprintf( command, "(set! duffint_params '((start %f) (end %f)))", @@ -450,7 +451,7 @@ EST_Wave * singerBot::synThread::get_wave( const char * _name ) return( NULL ); } - EST_Relation *r = utterance( lutt )->relation( "Wave" ); + EST_Relation * r = utterance( lutt )->relation( "Wave" ); //TODO: This check is useless. The error is fatal. if ( !r || !r->head() ) diff --git a/plugins/stk/mallets/mallets.cpp b/plugins/stk/mallets/mallets.cpp index 5c5a12170..2c6a1649c 100644 --- a/plugins/stk/mallets/mallets.cpp +++ b/plugins/stk/mallets/mallets.cpp @@ -1,5 +1,5 @@ /* - * mallets.h - tuned instruments that one would bang upon + * mallets.cpp - tuned instruments that one would bang upon * * Copyright (c) 2006-2007 Danny McRae * @@ -23,19 +23,20 @@ */ -#include +#include "mallets.h" + +#include +#include #include "BandedWG.h" #include "ModalBar.h" #include "TubeBell.h" -#include "mallets.h" #include "engine.h" #include "gui_templates.h" #include "instrument_track.h" #include "knob.h" #include "note_play_handle.h" -#include "templates.h" #undef SINGLE_SOURCE_COMPILE #include "embed.cpp" @@ -66,9 +67,9 @@ mallets::mallets( instrumentTrack * _instrument_track ) : { m_filesMissing = !QDir( configManager::inst()->stkDir() ).exists() || - !QFileInfo( configManager::inst()->stkDir()+QDir::separator() + !QFileInfo( configManager::inst()->stkDir() + QDir::separator() + "sinewave.raw" ).exists(); -#if 0 + // for some reason this crashes...??? if( m_filesMissing ) { @@ -78,7 +79,7 @@ mallets::mallets( instrumentTrack * _instrument_track ) : "the full Stk-package is installed!" ), QMessageBox::Ok ); } -#endif + m_modalBarWidget = setupModalBarControls( this, _instrument_track ); setWidgetBackground( m_modalBarWidget, "artwork" ); diff --git a/plugins/vestige/vestige.cpp b/plugins/vestige/vestige.cpp index 7cb1ddc24..877b981e8 100644 --- a/plugins/vestige/vestige.cpp +++ b/plugins/vestige/vestige.cpp @@ -401,7 +401,9 @@ void vestigeInstrument::openPlugin( void ) { return; } + engine::getMixer()->lock(); setParameter( "plugin", ofd.selectedFiles()[0] ); + engine::getMixer()->unlock(); } } diff --git a/plugins/vst_base/Makefile.am b/plugins/vst_base/Makefile.am index 2ab0f26ae..e662bdfd0 100644 --- a/plugins/vst_base/Makefile.am +++ b/plugins/vst_base/Makefile.am @@ -20,12 +20,19 @@ libvstbase_la_SOURCES = vst_base.cpp \ lvsl_client.cpp \ lvsl_client.h -CC = wineg++ pkglib_PROGRAMS = lvsl_server -lvsl_server_SOURCES = lvsl_server.c communication.h +lvsl_server_SOURCES = lvsl_server.cpp communication.h +lvsl_server_CPPFLAGS = $(AM_CPPFLAGS) -I${prefix}/include/wine/windows +lvsl_server_CPPFLAGS += -I/usr/include/wine/windows lvsl_server_LINK = wineg++ -mwindows -lpthread -o $(pkglib_PROGRAMS) nobase_pkglib_DATA = $(pkglib_PROGRAMS).exe.so +if AMD64_BUILD +lvsl_server_CXXFLAGS = -m32 $(AM_CXXFLAGS) +lvsl_server_LINK += -m32 -Wb,--as-cmd="as --32",--ld-cmd="ld -melf_i386" \ + -L/usr/lib32 +endif + CLEANFILES = $(MOC_FILES) $(nobase_pkglib_DATA) install-exec-hook: diff --git a/plugins/vst_base/communication.h b/plugins/vst_base/communication.h index bf7b7b1ef..35baf234a 100644 --- a/plugins/vst_base/communication.h +++ b/plugins/vst_base/communication.h @@ -2,7 +2,7 @@ * communication.h - header file defining stuff concerning communication between * LVSL-server and -client * - * Copyright (c) 2005-2006 Tobias Doerffel + * Copyright (c) 2005-2007 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -61,8 +61,9 @@ inline void writeValue( const T & _i, int _fd = 1 ) static inline std::string readString( int _fd = 0 ) { Sint16 len = readValue( _fd ); - char * sc = new char[len]; + char * sc = new char[len + 1]; read( _fd, sc, len ); + sc[len] = '\0'; std::string s( sc ); delete[] sc; return( s ); @@ -73,7 +74,7 @@ static inline std::string readString( int _fd = 0 ) static inline void writeString( const char * _str, int _fd = 1 ) { - int len = strlen( _str ) + 1; + int len = strlen( _str ); writeValue( len, _fd ); write( _fd, _str, len ); } diff --git a/plugins/vst_base/lvsl_client.cpp b/plugins/vst_base/lvsl_client.cpp index 60127d6c9..ba8d7dea2 100644 --- a/plugins/vst_base/lvsl_client.cpp +++ b/plugins/vst_base/lvsl_client.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #include @@ -155,7 +154,7 @@ remoteVSTPlugin::remoteVSTPlugin( const QString & _plugin ) : { break; } - QApplication::processEvents( QEventLoop::AllEvents, 50 ); + QCoreApplication::processEvents( QEventLoop::AllEvents, 50 ); } } @@ -328,8 +327,8 @@ bool remoteVSTPlugin::waitForProcessingFinished( sampleFrame * _out_buf ) { for( fpp_t frame = 0; frame < frames; ++frame ) { - _out_buf[frame][ch] = m_shm[(m_inputCount+ch)* - frames+frame]; + _out_buf[frame][ch] = m_shm[( m_inputCount + ch ) * + frames + frame]; } } @@ -344,7 +343,12 @@ void remoteVSTPlugin::enqueueMidiEvent( const midiEvent & _event, { lock(); writeValueS( VST_ENQUEUE_MIDI_EVENT ); - writeValueS( _event ); + + writeValueS( _event.m_type ); + writeValueS( _event.m_channel ); + writeValueS( _event.m_data.m_param[0] ); + writeValueS( _event.m_data.m_param[1] ); + writeValueS( _frames_ahead ); unlock(); } @@ -536,7 +540,7 @@ Sint16 remoteVSTPlugin::processNextMessage( void ) case VST_SHM_KEY_AND_SIZE: { Uint16 shm_key = readValueS(); - size_t shm_size = readValueS(); + size_t shm_size = readValueS(); setShmKeyAndSize( shm_key, shm_size ); break; } diff --git a/plugins/vst_base/lvsl_server.c b/plugins/vst_base/lvsl_server.cpp similarity index 98% rename from plugins/vst_base/lvsl_server.c rename to plugins/vst_base/lvsl_server.cpp index db9a7a91d..f8be5feeb 100644 --- a/plugins/vst_base/lvsl_server.c +++ b/plugins/vst_base/lvsl_server.cpp @@ -665,7 +665,7 @@ void VSTPlugin::resizeSharedMemory( void ) int shm_id; Uint16 shm_key = 0; while( ( shm_id = shmget( ++shm_key, s, IPC_CREAT | IPC_EXCL | - 0666 ) ) == -1 ) + 0600 ) ) == -1 ) { } @@ -688,7 +688,7 @@ void VSTPlugin::resizeSharedMemory( void ) writeValue( VST_SHM_KEY_AND_SIZE ); writeValue( shm_key ); - writeValue( s ); + writeValue( s ); } @@ -1206,7 +1206,14 @@ int main( void ) case VST_ENQUEUE_MIDI_EVENT: { - const midiEvent ev = readValue(); + midiEventTypes type = + readValue(); + Sint8 channel = readValue(); + Uint16 param1 = readValue(); + Uint16 param2 = readValue(); + const midiEvent ev = midiEvent( type, channel, + param1, param2 ); + const f_cnt_t fr_ahead = readValue(); plugin->enqueueMidiEvent( ev, fr_ahead ); break; diff --git a/src/core/automation_editor.cpp b/src/core/automation_editor.cpp index 495945072..f2f3987b6 100644 --- a/src/core/automation_editor.cpp +++ b/src/core/automation_editor.cpp @@ -111,7 +111,10 @@ automationEditor::automationEditor( void ) : } // add us to workspace - engine::getMainWindow()->workspace()->addWindow( this ); + if( engine::getMainWindow()->workspace() ) + { + engine::getMainWindow()->workspace()->addWindow( this ); + } // add time-line m_timeLine = new timeLine( VALUES_WIDTH, 32, m_ppt, diff --git a/src/core/main.cpp b/src/core/main.cpp index 09788d58f..4fa5e3ec2 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -86,10 +86,10 @@ int main( int argc, char * * argv ) QString extension = "wav"; QString file_to_load; - for( int i = 1; i < app.argc(); ++i ) + for( int i = 1; i < argc; ++i ) { - if( QString( app.argv()[i] ) == "--version" || - QString( app.argv()[i] ) == "-v" ) + if( QString( argv[i] ) == "--version" || + QString( argv[i] ) == "-v" ) { printf( "\nLinux MultiMedia Studio %s\n\n" "Copyright (c) 2004-2007 Tobias Doerffel and others.\n\n" @@ -101,9 +101,8 @@ int main( int argc, char * * argv ) argv[0] ); return( 0 ); } - else if( app.argc() > i && - ( QString( app.argv()[i] ) == "--help" || - QString( app.argv()[i] ) == "-h" ) ) + else if( argc > i && ( QString( argv[i] ) == "--help" || + QString( argv[i] ) == "-h" ) ) { printf( "\nLinux MultiMedia Studio %s\n" "Copyright (c) 2004-2007 Tobias Doerffel and others.\n\n" @@ -117,38 +116,35 @@ int main( int argc, char * * argv ) PACKAGE_VERSION ); return( 0 ); } - else if( app.argc() > i && - ( QString( app.argv()[i] ) == "--render" || - QString( app.argv()[i] ) == "-r" ) ) + else if( argc > i && ( QString( argv[i] ) == "--render" || + QString( argv[i] ) == "-r" ) ) { - file_to_load = QString( app.argv()[i+1] ); + file_to_load = QString( argv[i + 1] ); file_to_render = baseName( file_to_load ) + "."; ++i; } - else if( app.argc() > i && - ( QString( app.argv()[i] ) == "--output-format" || - QString( app.argv()[i] ) == "-o" ) ) + else if( argc > i && + ( QString( argv[i] ) == "--output-format" || + QString( argv[i] ) == "-o" ) ) { - extension = QString( app.argv()[i+1] ); + extension = QString( argv[i + 1] ); if( extension != "wav" && extension != "ogg" ) { printf( "\nInvalid output format %s.\n\n" - "Try \"%s --help\" for more information.\n\n", app.argv()[i+1], - argv[0] ); + "Try \"%s --help\" for more information.\n\n", argv[i + 1], argv[0] ); return( -1 ); } ++i; } else { - if( app.argv()[i][0] == '-' ) + if( argv[i][0] == '-' ) { printf( "\nInvalid option %s.\n\n" - "Try \"%s --help\" for more information.\n\n", app.argv()[i], - argv[0] ); + "Try \"%s --help\" for more information.\n\n", argv[i], argv[0] ); return( -1 ); } - file_to_load = app.argv()[i]; + file_to_load = argv[i]; } } diff --git a/src/core/main_window.cpp b/src/core/main_window.cpp index 80a9b81ed..f301830b6 100644 --- a/src/core/main_window.cpp +++ b/src/core/main_window.cpp @@ -25,7 +25,11 @@ */ +#include "main_window.h" + + #include +#include #include #include #include @@ -40,7 +44,6 @@ #endif -#include "main_window.h" #include "bb_editor.h" #include "song_editor.h" #include "piano_roll.h" @@ -142,8 +145,11 @@ mainWindow::mainWindow( void ) : m_workspace->setScrollBarsEnabled( TRUE ); #warning TODO -/* m_workspace->setBackground( embed::getIconPixmap( - "background_artwork" ) );*/ + m_workspace->setAutoFillBackground( TRUE ); + QPalette pal; + pal.setBrush( m_workspace->backgroundRole(), + embed::getIconPixmap( "background_artwork" ) ); + m_workspace->setPalette( pal ); } hbox->addWidget( side_bar ); @@ -445,7 +451,8 @@ void mainWindow::finalize( void ) // help-popup-menu QMenu * help_menu = new QMenu( this ); menuBar()->addMenu( help_menu )->setText( tr( "&Help" ) ); - if( have_www_browser() ) + // May use offline help + if( TRUE ) { help_menu->addAction( embed::getIconPixmap( "help" ), tr( "Online help" ), @@ -723,7 +730,7 @@ void mainWindow::help( void ) tr( "Currently there's no help " "available in LMMS.\n" "Please visit " - "http://wiki.mindrules.net " + "http://lmms.sf.net/wiki " "for documentation on LMMS." ), QMessageBox::Ok ); } @@ -941,32 +948,12 @@ void mainWindow::showTool( QAction * _idx ) - -bool mainWindow::have_www_browser( void ) -{ - int ret = system( "which x-www-browser > /dev/null" ); - return( WIFEXITED( ret ) && WEXITSTATUS( ret ) == EXIT_SUCCESS ); -} - - - - void mainWindow::browseHelp( void ) { - pid_t pid = fork(); - if( pid == -1 ) - { - perror( "fork" ); - } - else if( pid == 0 ) - { -// TODO: use QDesktopService with Qt4 - QString url = "http://lmms.sf.net/wiki/index.php?title=Main_Page"; - execlp( "x-www-browser", "x-www-browser", - url.toAscii().constData(), NULL ); - perror( "execlp" ); - exit( EXIT_FAILURE ); - } + // file:// alternative for offline help + QString url = "http://lmms.sf.net/wiki/index.php?title=Main_Page"; + QDesktopServices::openUrl( url ); + // TODO: Handle error } diff --git a/src/core/piano_roll.cpp b/src/core/piano_roll.cpp index 9a1eddeb4..eee59a5bb 100644 --- a/src/core/piano_roll.cpp +++ b/src/core/piano_roll.cpp @@ -183,7 +183,10 @@ pianoRoll::pianoRoll( void ) : } // add us to workspace - engine::getMainWindow()->workspace()->addWindow( this ); + if( engine::getMainWindow()->workspace() ) + { + engine::getMainWindow()->workspace()->addWindow( this ); + } // add time-line m_timeLine = new timeLine( WHITE_KEY_WIDTH, 32, m_ppt, diff --git a/src/lib/journalling_object.cpp b/src/lib/journalling_object.cpp index c2fe21c25..d72fcb2d2 100644 --- a/src/lib/journalling_object.cpp +++ b/src/lib/journalling_object.cpp @@ -151,15 +151,16 @@ void journallingObject::saveJournal( QDomDocument & _doc, QDomElement journal_de = _doc.createElement( "journal" ); journal_de.setAttribute( "id", id() ); journal_de.setAttribute( "entries", m_journalEntries.size() ); - journal_de.setAttribute( "curentry", m_currentJournalEntry - - m_journalEntries.begin() ); + journal_de.setAttribute( "curentry", (int)( m_currentJournalEntry - + m_journalEntries.begin() ) ); journal_de.setAttribute( "metadata", TRUE ); for( journalEntryVector::const_iterator it = m_journalEntries.begin(); it != m_journalEntries.end(); ++it ) { QDomElement je_de = _doc.createElement( "entry" ); - je_de.setAttribute( "pos", it - m_journalEntries.begin() ); + je_de.setAttribute( "pos", (int)( it - + m_journalEntries.begin() ) ); je_de.setAttribute( "actionid", it->actionID() ); je_de.setAttribute( "data", base64::encode( it->data() ) ); journal_de.appendChild( je_de ); diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index 36f6c372f..748af16a4 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -114,7 +114,10 @@ instrumentTrack::instrumentTrack( trackContainer * _tc ) : } - engine::getMainWindow()->workspace()->addWindow( this ); + if( engine::getMainWindow()->workspace() ) + { + engine::getMainWindow()->workspace()->addWindow( this ); + } setAcceptDrops( TRUE ); diff --git a/src/widgets/effect_label.cpp b/src/widgets/effect_label.cpp index 9bc8f6012..bd224d1e2 100644 --- a/src/widgets/effect_label.cpp +++ b/src/widgets/effect_label.cpp @@ -62,7 +62,10 @@ effectLabel::effectLabel( const QString & _initial_name, QWidget * _parent, m_track, m_track->getAudioPort() ); - engine::getMainWindow()->workspace()->addWindow( m_effWidget ); + if( engine::getMainWindow()->workspace() ) + { + engine::getMainWindow()->workspace()->addWindow( m_effWidget ); + } m_effWidget->setWindowTitle( _initial_name ); m_effWidget->setFixedSize( 240, 242 );