kmetronome-0.10.1/0000755000175000001440000000000011760763113013006 5ustar pedrouserskmetronome-0.10.1/configure.release0000755000175000001440000000046011760763113016334 0ustar pedrousers#!/bin/bash # a typical configuration for production usage... mkdir -p build cd build cmake .. -DCMAKE_CXX_FLAGS="-W -Wall" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DKDE4_ENABLE_FINAL=YES \ -DSTATIC_DRUMSTICK=NO \ -DENABLE_PCH=NO $* echo "You can run 'make' now" kmetronome-0.10.1/po/0000755000175000001440000000000011760763113013424 5ustar pedrouserskmetronome-0.10.1/po/CMakeLists.txt0000644000175000001440000000161211760763113016164 0ustar pedrousers# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2012 Pedro Lopez-Cabanillas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA FILE (GLOB PO_FILES *.po) ADD_TRANSLATIONS (kmetronome ${PO_FILES}) kmetronome-0.10.1/po/tr.po0000644000175000001440000006037611760763113014425 0ustar pedrousers# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Server Acim , 2011. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "atid=731542&group_id=134956\n" "POT-Creation-Date: 2012-05-28 21:56+0200\n" "PO-Revision-Date: 2011-02-05 17:58+0200\n" "Last-Translator: Server Acim \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.1\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/drumgrid.cpp:51 msgid "Pattern Editor" msgstr "Kalıp Düzenleyici" #: src/drumgrid.cpp:67 msgid "Cut" msgstr "" #: src/drumgrid.cpp:68 msgid "Copy" msgstr "" #: src/drumgrid.cpp:69 #, fuzzy msgid "Paste" msgstr "Kalıplar" #: src/drumgrid.cpp:278 msgid "Do you want to remove the current pattern?" msgstr "Bu kalıbı kaldırmak istiyor musunuz?" #: src/drumgrid.cpp:279 msgid "Remove Pattern" msgstr "Kalıbı Kaldır" #: src/drumgrid.cpp:333 msgctxt "name of an automatically created pattern" msgid "Sample Pattern" msgstr "Örnek Kalıp" #: src/drumgrid.cpp:364 msgid "Insert Pattern Row" msgstr "Kalıp Sırası Ekle" #: src/drumgrid.cpp:365 msgid "Drum Key:" msgstr "Davul Tuşu" #: src/drumgrid.cpp:386 msgid "Please select one, and only one row" msgstr "Lütfen, sadece ve sadece bir sıra seçiniz" #: src/drumgrid.cpp:388 msgid "Do you want to remove the selected pattern row?" msgstr "Seçili kalıbı sırasını kaldırmak istiyor musunuz?" #: src/drumgrid.cpp:389 msgid "Remove Row" msgstr "Sırayı Kaldır" #: src/kmetronome.cpp:87 msgid "" "Fatal error from the ALSA sequencer. This usually happens when the kernel " "doesn't have ALSA support, or the device node (/dev/snd/seq) doesn't exists, " "or the kernel module (snd_seq) is not loaded. Please check your ALSA/MIDI " "configuration. Returned error was: %1" msgstr "" "ALSA sekvansırdan ölümcül hata. Bu genelde çekirdeğin ALSA desteği olmadığı " "veya aygıt yolunun (/dev/snd/seq gibi) olmadığı durumlarda ya da çekirdek " "modülünün (örneğin snd seq) yüklü olmadığı durumlarda meydana gelir. Lütfen " "ALSA/MIDI ayarlarınızı kontrol edin. Gelen hata şöyle idi: %1" #: src/kmetronome.cpp:93 msgid "Error" msgstr "Hata" #: src/kmetronome.cpp:114 msgid "Play/Stop" msgstr "Çal/Dur" #: src/kmetronome.cpp:118 msgid "Show Action Buttons" msgstr "Eylem Düğmelerini Göster" #. i18n: file: src/kmetronomeviewbase.ui:126 #. i18n: ectx: property (text), widget (KPushButton, m_patternbtn) #: src/kmetronome.cpp:125 src/kmetronome.cpp:527 po/rc.cpp:128 msgid "Patterns" msgstr "Kalıplar" #: src/kmetronome.cpp:130 src/kmetronome.cpp:498 msgid "Import Patterns" msgstr "Kalıpları İçeri Aktar" #: src/kmetronome.cpp:135 src/kmetronome.cpp:511 msgid "Export Patterns" msgstr "Kalıpları Dışarı Aktar" #: src/kmetronome.cpp:497 src/kmetronome.cpp:510 msgid "*.pat|Pattern Files (*.pat)" msgstr "*.pat|Kalıp Dosyaları (*.pat)" #: src/kmetronomeview.cpp:145 msgid "Tempo" msgstr "Tempo" #: src/kmetronomeview.cpp:145 msgid "Enter new Tempo:" msgstr "Yeni Tempo Giriniz:" #: src/kmetronomeview.cpp:179 msgctxt "the pattern is created automatically" msgid "Automatic" msgstr "Otomatik" #: src/kmetropreferences.cpp:29 msgid "Preferences" msgstr "Tercihler" #: src/main.cpp:29 msgid "KDE MIDI metronome using ALSA sequencer" msgstr "KDE MIDI metronom ALSA sekvansır kullanıyor" #: src/main.cpp:41 msgid "KMetronome" msgstr "KMetronom" #: src/main.cpp:43 msgid "(C) 2005-2012 Pedro Lopez-Cabanillas" msgstr "(C) 2005-2012 Pedro Lopez-Cabanillas" #: src/main.cpp:45 msgid "Pedro Lopez-Cabanillas" msgstr "Pedro Lopez-Cabanillas" #: src/sequenceradapter.cpp:65 msgid "No connection" msgstr "Bağlantı Kurulamadı" #. i18n: file: src/drumgrid.ui:46 #. i18n: ectx: property (text), widget (QLabel, patternLabel) #. i18n: file: src/kmetronomeviewbase.ui:191 #. i18n: ectx: property (text), widget (QLabel, lblPattern) #: po/rc.cpp:3 po/rc.cpp:140 msgid "Pattern:" msgstr "Kalıp:" #. i18n: file: src/drumgrid.ui:62 #. i18n: ectx: property (whatsThis), widget (KComboBox, patternCombo) #: po/rc.cpp:6 msgid "" "Type a new name and press the \"Save\" button to create a new pattern, or " "choose an existing pattern from the drop-down list." msgstr "" "Yeni bir kalıp oluşturmak için yeni bir başlık yazınız veya listeden var " "olan bir kalıp seçiniz." #. i18n: file: src/drumgrid.ui:72 #. i18n: ectx: property (whatsThis), widget (KPushButton, saveButton) #: po/rc.cpp:9 msgid "This button stores the current pattern definition with the name given" msgstr "Bu düğme şu anki kalıp tanımını yükler ve verilen başlığı kullanır" #. i18n: file: src/drumgrid.ui:75 #. i18n: ectx: property (text), widget (KPushButton, saveButton) #: po/rc.cpp:12 msgid "Save" msgstr "Kaydet" #. i18n: file: src/drumgrid.ui:82 #. i18n: ectx: property (whatsThis), widget (KPushButton, deleteButton) #: po/rc.cpp:15 msgid "This button deletes the current pattern definition" msgstr "Bu düğme şu anki kalıp tanımını siler" #. i18n: file: src/drumgrid.ui:85 #. i18n: ectx: property (text), widget (KPushButton, deleteButton) #: po/rc.cpp:18 msgid "Delete" msgstr "Sil" #. i18n: file: src/drumgrid.ui:104 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:21 msgid "Rows:" msgstr "Sıralar:" #. i18n: file: src/drumgrid.ui:111 #. i18n: ectx: property (whatsThis), widget (KPushButton, addButton) #: po/rc.cpp:24 msgid "" "Use this button to add new rows (sounds) to the current pattern definition" msgstr "" "Bu düğmeyi şu anki kalıp tanımına yeni sıralar (sesler) eklemek için kullanın" #. i18n: file: src/drumgrid.ui:114 #. i18n: ectx: property (text), widget (KPushButton, addButton) #: po/rc.cpp:27 msgid "Add" msgstr "Ekle" #. i18n: file: src/drumgrid.ui:121 #. i18n: ectx: property (whatsThis), widget (KPushButton, removeButton) #: po/rc.cpp:30 msgid "" "Use this button to remove the selected row (sound) from the pattern " "definition" msgstr "" "Bu düğmeyi şu anki kalıp tanımından seçilmiş sırayı (sesleri) kaldırmak için " "kullanın" #. i18n: file: src/drumgrid.ui:124 #. i18n: ectx: property (text), widget (KPushButton, removeButton) #: po/rc.cpp:33 msgid "Remove" msgstr "Kaldır" #. i18n: file: src/drumgrid.ui:144 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:36 msgid "Beats:" msgstr "Vuruşlar:" #. i18n: file: src/drumgrid.ui:151 #. i18n: ectx: property (whatsThis), widget (QCheckBox, chkselbeat) #: po/rc.cpp:39 msgid "Highligh the grid columns while playing" msgstr "Çalarken ızgara sütünlarını vurgula" #. i18n: file: src/drumgrid.ui:155 #. i18n: ectx: property (text), widget (QCheckBox, chkselbeat) #: po/rc.cpp:42 msgid "" "Highlight\n" "Columns" msgstr "" "Sütunları\n" "Vurgula" #. i18n: file: src/drumgrid.ui:168 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, beatNumber) #: po/rc.cpp:46 msgid "This is the current beat number" msgstr "Şu anki vuruş sayısıdır" #. i18n: file: src/drumgrid.ui:187 #. i18n: ectx: property (whatsThis), widget (QTableView, tableView) #: po/rc.cpp:49 msgid "This is the pattern table, beats as columns and sounds as rows" msgstr "" "Bu, vuruşların sütunlarla ve seslerin sıralar halinde gösterildiği kalıp " "tablosudur" #. i18n: file: src/drumgrid.ui:203 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, gridColumns) #: po/rc.cpp:52 msgid "Number of beats per measure (bar)" msgstr "Ölçü başına düşen vuruş sayısı" #. i18n: file: src/drumgrid.ui:219 #. i18n: ectx: property (whatsThis), widget (KComboBox, figureCombo) #: po/rc.cpp:55 msgid "This is the beat length for the pattern column." msgstr "Bu, kalıp sütununda yer alan vuruş uzunluğudur." #. i18n: file: src/drumgrid.ui:229 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:282 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:58 po/rc.cpp:162 msgid "Whole" msgstr "Birlik süre" #. i18n: file: src/drumgrid.ui:238 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:291 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:61 po/rc.cpp:165 msgid "Half" msgstr "İkilik süre" #. i18n: file: src/drumgrid.ui:247 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:300 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:64 po/rc.cpp:168 msgid "Quarter" msgstr "Dörtlük süre" #. i18n: file: src/drumgrid.ui:256 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:309 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:67 po/rc.cpp:171 msgid "Eighth" msgstr "Sekizlik süre" #. i18n: file: src/drumgrid.ui:265 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:318 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:70 po/rc.cpp:174 msgid "Sixteenth" msgstr "Onaltılık süre" #. i18n: file: src/drumgrid.ui:274 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:327 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:73 po/rc.cpp:177 msgid "Thirty-Second" msgstr "Otuz-ikilik süre" #. i18n: file: src/drumgrid.ui:283 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:336 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:76 po/rc.cpp:180 msgid "Sixty-Fourth" msgstr "Atmış-dörtlük süre" #. i18n: file: src/drumgrid.ui:295 #. i18n: ectx: property (whatsThis), widget (QPushButton, startButton) #: po/rc.cpp:79 msgid "This button starts playing the current pattern" msgstr "Bu düğme bu kalıbın çalmasını başlatır" #. i18n: file: src/drumgrid.ui:298 #. i18n: ectx: property (text), widget (QPushButton, startButton) #. i18n: file: src/kmetronomeviewbase.ui:81 #. i18n: ectx: property (text), widget (KPushButton, m_playbtn) #: po/rc.cpp:82 po/rc.cpp:110 msgid "Play" msgstr "Çal" #. i18n: file: src/drumgrid.ui:311 #. i18n: ectx: property (whatsThis), widget (QPushButton, stopButton) #: po/rc.cpp:85 msgid "This button stops the playback" msgstr "Bu düğme çalmayı durdurur" #. i18n: file: src/drumgrid.ui:314 #. i18n: ectx: property (text), widget (QPushButton, stopButton) #. i18n: file: src/kmetronomeviewbase.ui:100 #. i18n: ectx: property (text), widget (KPushButton, m_stopbtn) #: po/rc.cpp:88 po/rc.cpp:116 msgid "Stop" msgstr "Dur" #. i18n: file: src/drumgrid.ui:330 #. i18n: ectx: property (whatsThis), widget (QLabel, label_3) #: po/rc.cpp:91 msgid "QPM: quarters per minute" msgstr "QPM: dakika başına düşen vuruş sayısı" #. i18n: file: src/drumgrid.ui:333 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:94 msgctxt "Quarters per Minute" msgid "QPM:" msgstr "QPM:" #. i18n: file: src/drumgrid.ui:343 #. i18n: ectx: property (whatsThis), widget (QLabel, tempoLabel) #: po/rc.cpp:97 msgid "This is the current tempo in quarters per minute" msgstr "Bu, dakika başına düşen şu anki tempodur" #. i18n: file: src/drumgrid.ui:353 #. i18n: ectx: property (whatsThis), widget (QSlider, tempoSlider) #: po/rc.cpp:101 msgid "Drag the slider handle to change the tempo, in quarters per minute" msgstr "" "Tempoyu değiştirmek için dakika başına dörtlük olarak kaydırgaçı " "sürükleyiniz, " #. i18n: file: src/kmetronomeviewbase.ui:58 #. i18n: ectx: property (windowTitle), widget (QWidget, KmetronomeViewBase) #: po/rc.cpp:104 msgid "MIDI Metronome" msgstr "MIDI Metronome" #. i18n: file: src/kmetronomeviewbase.ui:78 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_playbtn) #: po/rc.cpp:107 msgid "This button starts playing the rhythm pattern" msgstr "Bu düğme ritm kalıbının çalmasını başlatır" #. i18n: file: src/kmetronomeviewbase.ui:97 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_stopbtn) #: po/rc.cpp:113 msgid "This button stops playing the rhythm pattern" msgstr "Bu düğme ritm kalıbının çalmasını durdurur" #. i18n: file: src/kmetronomeviewbase.ui:113 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_configbtn) #: po/rc.cpp:119 msgid "This button opens the configuration window" msgstr "Bu düğme yapılandırma penceresini açar" #. i18n: file: src/kmetronomeviewbase.ui:116 #. i18n: ectx: property (text), widget (KPushButton, m_configbtn) #: po/rc.cpp:122 msgid "Settings" msgstr "Ayarlar" #. i18n: file: src/kmetronomeviewbase.ui:123 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_patternbtn) #: po/rc.cpp:125 msgid "This button opens the pattern editor" msgstr "Bu düğme kalıp düzenleyicisini açar" #. i18n: file: src/kmetronomeviewbase.ui:139 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_exitbtn) #: po/rc.cpp:131 msgid "This button exits the program" msgstr "Bu düğme programdan çıkılmasını sağlar" #. i18n: file: src/kmetronomeviewbase.ui:142 #. i18n: ectx: property (text), widget (KPushButton, m_exitbtn) #: po/rc.cpp:134 msgid "Quit" msgstr "Çık" #. i18n: file: src/kmetronomeviewbase.ui:173 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_measureLCD) #: po/rc.cpp:137 msgid "Number of measures (bars) and beats played from beginning" msgstr "Baştan itibaren çalınan ölçü ve vuruşların sayısı" #. i18n: file: src/kmetronomeviewbase.ui:210 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_pattern) #: po/rc.cpp:143 msgid "" "This is the pattern definition to play, either \"Automatic\" or a custom " "defined one." msgstr "" "Bu, çalınacak kalıbın tanımıdır, bunu \"Otomatik\" olarak " "ayarlayabileceğiniz gibi tanımı kendiniz de oluşturabilirsiniz." #. i18n: file: src/kmetronomeviewbase.ui:217 #. i18n: ectx: property (text), widget (QLabel, lblBeats) #: po/rc.cpp:146 msgid "Beats/Bar:" msgstr "Vuruşlar/Ölçüler:" #. i18n: file: src/kmetronomeviewbase.ui:238 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_beatsBar) #: po/rc.cpp:149 msgid "" "This is the number of beats for each measure (bar).\n" "Values are from 1 to 32.\n" "It is the numerator of the time signature specification." msgstr "" "Bu, her ölçüdeki vuruşların sayısıdır.\n" "Değerler 1 ile 32 arasındadır.\n" "Ölçü birimi özelliğinin sayısal göstergesidir." #. i18n: file: src/kmetronomeviewbase.ui:254 #. i18n: ectx: property (text), widget (QLabel, lblFigure) #: po/rc.cpp:154 msgid "Beat Length:" msgstr "Vuruş Uzunluğu:" #. i18n: file: src/kmetronomeviewbase.ui:272 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_figure) #: po/rc.cpp:157 msgid "" "This is the beat length.\n" "Values mean 1, 2, 4, 8, 16, 32 and 64.\n" "It is the denominator in the time signature specification." msgstr "" "Bu, vuruş süresidir.\n" "Değerler 1, 2, 4, 8, 16, 32 ve 64 arasındadır.\n" "Bunlar, ölçü birimi içindeki alt sürelerin özellikleridir." #. i18n: file: src/kmetronomeviewbase.ui:356 #. i18n: ectx: property (text), widget (QLabel, label_1) #: po/rc.cpp:183 msgctxt "weak notes MIDI velocity" msgid "Weak" msgstr "Zayıf" #. i18n: file: src/kmetronomeviewbase.ui:369 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:186 msgctxt "strong notes MIDI velocity" msgid "Strong" msgstr "Kuvvetli" #. i18n: file: src/kmetronomeviewbase.ui:382 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:189 msgctxt "audio volume level" msgid "Volume" msgstr "Gürlük" #. i18n: file: src/kmetronomeviewbase.ui:395 #. i18n: ectx: property (text), widget (QLabel, label_4) #: po/rc.cpp:192 msgctxt "audio panning" msgid "Pan" msgstr "Pan" #. i18n: file: src/kmetronomeviewbase.ui:414 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial1) #: po/rc.cpp:195 msgid "" "This is the velocity of the weak notes in the automatic rhythm pattern (all " "of them, except the first one)" msgstr "" "Bu, otomatik ritm kalıbındaki zayıf notanın seslendirme gücüdür (ilki " "dışındaki tüm notaların)" #. i18n: file: src/kmetronomeviewbase.ui:439 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial2) #: po/rc.cpp:198 msgid "" "This is the velocity of the strong note in the automatic rhythm pattern (the " "first one)" msgstr "" "Bu, otomatik ritm kalıbındaki kuvvetli notanın seslendirme gücüdür (ilk " "vuruşun)" #. i18n: file: src/kmetronomeviewbase.ui:464 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial3) #: po/rc.cpp:201 msgid "This is the MIDI volume control (CC7)" msgstr "Bu MIDI ses denetimidir (CC7)" #. i18n: file: src/kmetronomeviewbase.ui:489 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial4) #: po/rc.cpp:204 msgid "This is the MIDI pan control (CC10)" msgstr "Bu MIDI pan denetimidir (CC10)" #. i18n: file: src/kmetronomeviewbase.ui:512 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_air) #: po/rc.cpp:207 msgid "This is the musical name of the tempo value" msgstr "Bu, tempo değerinin müziksel adıdır" #. i18n: file: src/kmetronomeviewbase.ui:531 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_tempoLCD) #: po/rc.cpp:210 msgid "The current tempo value" msgstr "Geçerli tempo değeri" #. i18n: file: src/kmetronomeviewbase.ui:554 #. i18n: ectx: property (text), widget (QLabel, textLabel1_2) #: po/rc.cpp:213 msgid "Tempo (in quarters per minute)" msgstr "Tempo (dakika başına dörtlük süre)" #. i18n: file: src/kmetronomeviewbase.ui:580 #. i18n: ectx: property (whatsThis), widget (QSlider, m_tempo) #: po/rc.cpp:216 msgid "" "This slider changes the tempo, or speed of the rhythm.\n" "Values are 25 to 250 quarters per minute (Maelzel Metronome units)." msgstr "" "Kaydırgaç, tempoyu, veya ritmin hızını değiştirir.\n" "Değerler dakika başına 25 ile 250 dörtlüktür. (Maelzel Metronom birimine " "göre)" #. i18n: file: src/kmetropreferencesbase.ui:37 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_autoconn) #: po/rc.cpp:220 msgid "" "If this checkbox is activated, the the program will remember the connections " "for the input and output ports, and try to reconnect them at program startup." msgstr "" "Eğer bu seçim kutusu etkinse, program giriş çıkış portlarındaki bağlantıları " "hatırlayacaktır, ve program yeniden başladığında yeniden bağlanmayı " "deneyecektir." #. i18n: file: src/kmetropreferencesbase.ui:40 #. i18n: ectx: property (text), widget (QCheckBox, m_autoconn) #: po/rc.cpp:223 msgid "Automatic ports connection on startup" msgstr "Yeniden başlarken otomatik port bağlantıları yapılsın" #. i18n: file: src/kmetropreferencesbase.ui:61 #. i18n: ectx: property (text), widget (QLabel, lblInputPort) #: po/rc.cpp:226 msgid "Optional input port conn:" msgstr "Opsiyonel giriş portu conn değeri:" #. i18n: file: src/kmetropreferencesbase.ui:83 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_in_connection) #: po/rc.cpp:229 msgid "This is the optional connection for the MIDI IN port." msgstr "Bu MIDI IN portu için opsiyonel bağlantıdır." #. i18n: file: src/kmetropreferencesbase.ui:102 #. i18n: ectx: property (text), widget (QLabel, lblOutputPort) #: po/rc.cpp:232 msgid "Output port connection:" msgstr "Çıkış portu bağlantısı:" #. i18n: file: src/kmetropreferencesbase.ui:124 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_out_connection) #: po/rc.cpp:235 msgid "This is the mandatory connection for the MIDI OUT port" msgstr "MIDI OUT portu için zorunlu bağlantıdır" #. i18n: file: src/kmetropreferencesbase.ui:131 #. i18n: ectx: property (text), widget (QLabel, lblInstrument) #: po/rc.cpp:238 msgid "Output instrument:" msgstr "Çıkış çalgısı:" #. i18n: file: src/kmetropreferencesbase.ui:147 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_instrument) #: po/rc.cpp:241 msgid "This is the definition of the instrument connected to the MIDI OUT port" msgstr "Bu, MIDI OUT portuna bağlı olan çalgının tanımıdır" #. i18n: file: src/kmetropreferencesbase.ui:158 #. i18n: ectx: property (text), widget (QLabel, lblBank) #: po/rc.cpp:244 msgid "Bank:" msgstr "Ses Bankası:" #. i18n: file: src/kmetropreferencesbase.ui:171 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_bank) #: po/rc.cpp:247 msgid "This is the Bank of the selected MIDI program" msgstr "Bu, seçili MIDI programının Ses Bankasıdır" #. i18n: file: src/kmetropreferencesbase.ui:190 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: po/rc.cpp:250 msgid "Channel:" msgstr "Kanal:" #. i18n: file: src/kmetropreferencesbase.ui:207 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_channel) #: po/rc.cpp:253 msgid "" "This is the MIDI channel, between 1 and 16. \n" "General MIDI uses the channel 10 for percussion sounds." msgstr "" "Bu, 1 ile 16 arasındaki MIDI kanalıdır. \n" "General MIDI vurma çalgı sesleri için 10 numaralı kanalı kullanır." #. i18n: file: src/kmetropreferencesbase.ui:235 #. i18n: ectx: property (text), widget (QLabel, textLabel3) #: po/rc.cpp:257 msgid "Program:" msgstr "Program:" #. i18n: file: src/kmetropreferencesbase.ui:257 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_program) #: po/rc.cpp:260 msgid "This is the MIDI program" msgstr "Bu MIDI programıdır" #. i18n: file: src/kmetropreferencesbase.ui:270 #. i18n: ectx: property (text), widget (QLabel, textLabel7) #: po/rc.cpp:263 msgid "Resolution:" msgstr "Çözünürlük:" #. i18n: file: src/kmetropreferencesbase.ui:286 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_resolution) #: po/rc.cpp:266 msgid "This is the MIDI time resolution (number of ticks in a quarter note)" msgstr "Bu, MIDI zaman çözünürlüğüdür (dörtlük notadaki tıkların sayısı)" #. i18n: file: src/kmetropreferencesbase.ui:305 #. i18n: ectx: property (text), widget (QLabel, textLabel4) #: po/rc.cpp:269 msgid "Weak note:" msgstr "Zayıf nota:" #. i18n: file: src/kmetropreferencesbase.ui:327 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_weak_note) #: po/rc.cpp:272 msgid "This is the sound of the weak notes for the automatic patterns" msgstr "Bu, otomatik kalıplardaki zayıf notaların sesidir" #. i18n: file: src/kmetropreferencesbase.ui:340 #. i18n: ectx: property (text), widget (QLabel, textLabel8) #: po/rc.cpp:275 msgid "Note duration:" msgstr "Nota süresi:" #. i18n: file: src/kmetropreferencesbase.ui:356 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_duration) #: po/rc.cpp:278 msgid "This is the note duration in ticks, when using NOTE OFF events" msgstr "BU, NOTE OFF seçeneği kullanıldığında, tıklardaki nota süresidir" #. i18n: file: src/kmetropreferencesbase.ui:378 #. i18n: ectx: property (text), widget (QLabel, textLabel5) #: po/rc.cpp:281 msgid "Strong note:" msgstr "Kuvvetli nota:" #. i18n: file: src/kmetropreferencesbase.ui:400 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_strong_note) #: po/rc.cpp:284 msgid "This is the sound of the strong notes for the automatic patterns" msgstr "Bu, otomatik kalıplardaki kuvvetli notaların sesidir" #. i18n: file: src/kmetropreferencesbase.ui:411 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:287 msgid "Optional setting to send NOTE OFF events" msgstr "NOTE OFF seçimi gönderildiğindeki seçimlik ayarlar" #. i18n: file: src/kmetropreferencesbase.ui:414 #. i18n: ectx: property (text), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:290 msgid "Send NOTE OFF events" msgstr "NOTE OFF olaylarını gönder" #. i18n: file: src/kmetropreferencesbase.ui:440 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:293 msgid "If this option is activated, the knobs are drawn using a custom style" msgstr "" "Eğer bu seçenek etkinse, düğmeler özelleştirilmiş stili kullanacaklardır" #. i18n: file: src/kmetropreferencesbase.ui:443 #. i18n: ectx: property (text), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:296 msgid "Styled Knobs" msgstr "Stilize Düğmeler" #: po/rc.cpp:297 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Server Acim" #: po/rc.cpp:298 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "serveracim@gmail.com" #~ msgid "100" #~ msgstr "100" kmetronome-0.10.1/po/fr.po0000644000175000001440000006204011760763113014375 0ustar pedrousers# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Julien Richard-Foy , 2009, 2010. # Pedro López-Cabanillas , 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "atid=731542&group_id=134956\n" "POT-Creation-Date: 2012-05-28 21:56+0200\n" "PO-Revision-Date: 2010-05-23 17:05+0200\n" "Last-Translator: Julien Richard-Foy \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/drumgrid.cpp:51 msgid "Pattern Editor" msgstr "Éditeur de figures rythmiques" #: src/drumgrid.cpp:67 msgid "Cut" msgstr "" #: src/drumgrid.cpp:68 msgid "Copy" msgstr "" #: src/drumgrid.cpp:69 #, fuzzy msgid "Paste" msgstr "Figures" #: src/drumgrid.cpp:278 msgid "Do you want to remove the current pattern?" msgstr "Voulez-vous supprimer la figure actuelle ?" #: src/drumgrid.cpp:279 msgid "Remove Pattern" msgstr "Supprimer la figure" #: src/drumgrid.cpp:333 msgctxt "name of an automatically created pattern" msgid "Sample Pattern" msgstr "Exemple de figure" #: src/drumgrid.cpp:364 msgid "Insert Pattern Row" msgstr "Insérer une ligne" #: src/drumgrid.cpp:365 msgid "Drum Key:" msgstr "Touche « tambour » :" #: src/drumgrid.cpp:386 msgid "Please select one, and only one row" msgstr "Veuillez ne sélectionner qu’une seule ligne" #: src/drumgrid.cpp:388 msgid "Do you want to remove the selected pattern row?" msgstr "Voulez-vous supprimer la figure rythmique de cette ligne ?" #: src/drumgrid.cpp:389 msgid "Remove Row" msgstr "Supprimer la ligne" #: src/kmetronome.cpp:87 msgid "" "Fatal error from the ALSA sequencer. This usually happens when the kernel " "doesn't have ALSA support, or the device node (/dev/snd/seq) doesn't exists, " "or the kernel module (snd_seq) is not loaded. Please check your ALSA/MIDI " "configuration. Returned error was: %1" msgstr "" "Erreur fatale du séquenceur ALSA. Cela arrive généralement lorsque le noyau " "ne gère pas ALSA, ou lorsque le fichier « /dev/snd/seq » n'existe pas, ou " "lorsque le module noyau « snd_seq » n'est pas chargé. Veuillez vérifier la " "configuration de ALSA/MIDI. Le nº d'erreur retourné est : %1" #: src/kmetronome.cpp:93 msgid "Error" msgstr "Erreur" #: src/kmetronome.cpp:114 msgid "Play/Stop" msgstr "Lire/Stop" #: src/kmetronome.cpp:118 msgid "Show Action Buttons" msgstr "Afficher les boutons d’action" #. i18n: file: src/kmetronomeviewbase.ui:126 #. i18n: ectx: property (text), widget (KPushButton, m_patternbtn) #: src/kmetronome.cpp:125 src/kmetronome.cpp:527 po/rc.cpp:128 msgid "Patterns" msgstr "Figures" #: src/kmetronome.cpp:130 src/kmetronome.cpp:498 msgid "Import Patterns" msgstr "Importer des figures" #: src/kmetronome.cpp:135 src/kmetronome.cpp:511 msgid "Export Patterns" msgstr "Exporter des figures" #: src/kmetronome.cpp:497 src/kmetronome.cpp:510 msgid "*.pat|Pattern Files (*.pat)" msgstr "*.pat|Fichiers de figures rythmiques (*.pat)" #: src/kmetronomeview.cpp:145 msgid "Tempo" msgstr "Tempo" #: src/kmetronomeview.cpp:145 msgid "Enter new Tempo:" msgstr "Saisissez le nouveau tempo :" #: src/kmetronomeview.cpp:179 msgctxt "the pattern is created automatically" msgid "Automatic" msgstr "Automatique" #: src/kmetropreferences.cpp:29 msgid "Preferences" msgstr "Préférences" #: src/main.cpp:29 msgid "KDE MIDI metronome using ALSA sequencer" msgstr "Métronome MIDI KDE utilisant le séquenceur ALSA" #: src/main.cpp:41 msgid "KMetronome" msgstr "KMetronome" #: src/main.cpp:43 msgid "(C) 2005-2012 Pedro Lopez-Cabanillas" msgstr "(C) 2005-2012 Pedro Lopez-Cabanillas" #: src/main.cpp:45 msgid "Pedro Lopez-Cabanillas" msgstr "Pedro Lopez-Cabanillas" #: src/sequenceradapter.cpp:65 msgid "No connection" msgstr "Pas de connexion" #. i18n: file: src/drumgrid.ui:46 #. i18n: ectx: property (text), widget (QLabel, patternLabel) #. i18n: file: src/kmetronomeviewbase.ui:191 #. i18n: ectx: property (text), widget (QLabel, lblPattern) #: po/rc.cpp:3 po/rc.cpp:140 msgid "Pattern:" msgstr "Figure :" #. i18n: file: src/drumgrid.ui:62 #. i18n: ectx: property (whatsThis), widget (KComboBox, patternCombo) #: po/rc.cpp:6 msgid "" "Type a new name and press the \"Save\" button to create a new pattern, or " "choose an existing pattern from the drop-down list." msgstr "" "Saisissez un nouveau nom et cliquez sur le bouton « Enregistrer » pour créer " "une nouvelle figure rythmique, ou choisissez une figure existante dans la " "liste déroulante." #. i18n: file: src/drumgrid.ui:72 #. i18n: ectx: property (whatsThis), widget (KPushButton, saveButton) #: po/rc.cpp:9 msgid "This button stores the current pattern definition with the name given" msgstr "Ce bouton enregistre la figure actuelle avec le nom indiqué" #. i18n: file: src/drumgrid.ui:75 #. i18n: ectx: property (text), widget (KPushButton, saveButton) #: po/rc.cpp:12 msgid "Save" msgstr "Enregistrer" #. i18n: file: src/drumgrid.ui:82 #. i18n: ectx: property (whatsThis), widget (KPushButton, deleteButton) #: po/rc.cpp:15 msgid "This button deletes the current pattern definition" msgstr "Ce bouton supprime la définition actuelle de figure" #. i18n: file: src/drumgrid.ui:85 #. i18n: ectx: property (text), widget (KPushButton, deleteButton) #: po/rc.cpp:18 msgid "Delete" msgstr "Supprimer" #. i18n: file: src/drumgrid.ui:104 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:21 msgid "Rows:" msgstr "Lignes :" #. i18n: file: src/drumgrid.ui:111 #. i18n: ectx: property (whatsThis), widget (KPushButton, addButton) #: po/rc.cpp:24 msgid "" "Use this button to add new rows (sounds) to the current pattern definition" msgstr "" "Utilisez ce bouton pour ajouter de nouvelles lignes (sons) à la définition " "actuelle de figure rythmique" #. i18n: file: src/drumgrid.ui:114 #. i18n: ectx: property (text), widget (KPushButton, addButton) #: po/rc.cpp:27 msgid "Add" msgstr "Ajouter" #. i18n: file: src/drumgrid.ui:121 #. i18n: ectx: property (whatsThis), widget (KPushButton, removeButton) #: po/rc.cpp:30 msgid "" "Use this button to remove the selected row (sound) from the pattern " "definition" msgstr "" "Utilisez ce bouton pour supprimer la ligne (le son) sélectionnée de la " "figure rythmique" #. i18n: file: src/drumgrid.ui:124 #. i18n: ectx: property (text), widget (KPushButton, removeButton) #: po/rc.cpp:33 msgid "Remove" msgstr "Retirer" #. i18n: file: src/drumgrid.ui:144 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:36 msgid "Beats:" msgstr "Notes :" #. i18n: file: src/drumgrid.ui:151 #. i18n: ectx: property (whatsThis), widget (QCheckBox, chkselbeat) #: po/rc.cpp:39 msgid "Highligh the grid columns while playing" msgstr "Met les colonnes de la grille en surbrillance durant la lecture" #. i18n: file: src/drumgrid.ui:155 #. i18n: ectx: property (text), widget (QCheckBox, chkselbeat) #: po/rc.cpp:42 msgid "" "Highlight\n" "Columns" msgstr "" "Mettre les colonnes\n" "en surbrillance" #. i18n: file: src/drumgrid.ui:168 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, beatNumber) #: po/rc.cpp:46 msgid "This is the current beat number" msgstr "Numéro de battement actuel" #. i18n: file: src/drumgrid.ui:187 #. i18n: ectx: property (whatsThis), widget (QTableView, tableView) #: po/rc.cpp:49 msgid "This is the pattern table, beats as columns and sounds as rows" msgstr "" "Table des figures rythmiques, les battements en colonnes et les sons sur les " "lignes." #. i18n: file: src/drumgrid.ui:203 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, gridColumns) #: po/rc.cpp:52 msgid "Number of beats per measure (bar)" msgstr "Nombre de battements par mesure" #. i18n: file: src/drumgrid.ui:219 #. i18n: ectx: property (whatsThis), widget (KComboBox, figureCombo) #: po/rc.cpp:55 msgid "This is the beat length for the pattern column." msgstr "Durée du battement pour cette colonne de la figure" #. i18n: file: src/drumgrid.ui:229 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:282 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:58 po/rc.cpp:162 msgid "Whole" msgstr "Ronde" #. i18n: file: src/drumgrid.ui:238 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:291 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:61 po/rc.cpp:165 msgid "Half" msgstr "Blanche" #. i18n: file: src/drumgrid.ui:247 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:300 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:64 po/rc.cpp:168 msgid "Quarter" msgstr "Noire" #. i18n: file: src/drumgrid.ui:256 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:309 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:67 po/rc.cpp:171 msgid "Eighth" msgstr "Croche" #. i18n: file: src/drumgrid.ui:265 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:318 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:70 po/rc.cpp:174 msgid "Sixteenth" msgstr "Double croche" #. i18n: file: src/drumgrid.ui:274 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:327 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:73 po/rc.cpp:177 msgid "Thirty-Second" msgstr "Triple croche" #. i18n: file: src/drumgrid.ui:283 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:336 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:76 po/rc.cpp:180 msgid "Sixty-Fourth" msgstr "Quadruple croche" #. i18n: file: src/drumgrid.ui:295 #. i18n: ectx: property (whatsThis), widget (QPushButton, startButton) #: po/rc.cpp:79 msgid "This button starts playing the current pattern" msgstr "Démarre la lecture de la figure rythmique" #. i18n: file: src/drumgrid.ui:298 #. i18n: ectx: property (text), widget (QPushButton, startButton) #. i18n: file: src/kmetronomeviewbase.ui:81 #. i18n: ectx: property (text), widget (KPushButton, m_playbtn) #: po/rc.cpp:82 po/rc.cpp:110 msgid "Play" msgstr "Lire" #. i18n: file: src/drumgrid.ui:311 #. i18n: ectx: property (whatsThis), widget (QPushButton, stopButton) #: po/rc.cpp:85 msgid "This button stops the playback" msgstr "Interrompt la lecture" #. i18n: file: src/drumgrid.ui:314 #. i18n: ectx: property (text), widget (QPushButton, stopButton) #. i18n: file: src/kmetronomeviewbase.ui:100 #. i18n: ectx: property (text), widget (KPushButton, m_stopbtn) #: po/rc.cpp:88 po/rc.cpp:116 msgid "Stop" msgstr "Stop" #. i18n: file: src/drumgrid.ui:330 #. i18n: ectx: property (whatsThis), widget (QLabel, label_3) #: po/rc.cpp:91 msgid "QPM: quarters per minute" msgstr "Tempo (en noires par minute)" #. i18n: file: src/drumgrid.ui:333 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:94 msgctxt "Quarters per Minute" msgid "QPM:" msgstr "Tempo :" #. i18n: file: src/drumgrid.ui:343 #. i18n: ectx: property (whatsThis), widget (QLabel, tempoLabel) #: po/rc.cpp:97 msgid "This is the current tempo in quarters per minute" msgstr "Tempo en noires par minute" #. i18n: file: src/drumgrid.ui:353 #. i18n: ectx: property (whatsThis), widget (QSlider, tempoSlider) #: po/rc.cpp:101 msgid "Drag the slider handle to change the tempo, in quarters per minute" msgstr "Déplacez le curseur pour modifier le tempo, en noires par minutes" #. i18n: file: src/kmetronomeviewbase.ui:58 #. i18n: ectx: property (windowTitle), widget (QWidget, KmetronomeViewBase) #: po/rc.cpp:104 msgid "MIDI Metronome" msgstr "Métronome MIDI" #. i18n: file: src/kmetronomeviewbase.ui:78 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_playbtn) #: po/rc.cpp:107 msgid "This button starts playing the rhythm pattern" msgstr "Démarre la lecture du motif rythmique" #. i18n: file: src/kmetronomeviewbase.ui:97 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_stopbtn) #: po/rc.cpp:113 msgid "This button stops playing the rhythm pattern" msgstr "Arrête la lecture du motif rythmique" #. i18n: file: src/kmetronomeviewbase.ui:113 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_configbtn) #: po/rc.cpp:119 msgid "This button opens the configuration window" msgstr "Affiche la fenêtre de configuration" #. i18n: file: src/kmetronomeviewbase.ui:116 #. i18n: ectx: property (text), widget (KPushButton, m_configbtn) #: po/rc.cpp:122 msgid "Settings" msgstr "Configuration" #. i18n: file: src/kmetronomeviewbase.ui:123 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_patternbtn) #: po/rc.cpp:125 msgid "This button opens the pattern editor" msgstr "Ce bouton ouvre l’éditeur de figures rythmiques" #. i18n: file: src/kmetronomeviewbase.ui:139 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_exitbtn) #: po/rc.cpp:131 msgid "This button exits the program" msgstr "Quitte le programme" #. i18n: file: src/kmetronomeviewbase.ui:142 #. i18n: ectx: property (text), widget (KPushButton, m_exitbtn) #: po/rc.cpp:134 msgid "Quit" msgstr "Quitter" #. i18n: file: src/kmetronomeviewbase.ui:173 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_measureLCD) #: po/rc.cpp:137 msgid "Number of measures (bars) and beats played from beginning" msgstr "Nombre de mesures et de notes jouées depuis le début" #. i18n: file: src/kmetronomeviewbase.ui:210 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_pattern) #: po/rc.cpp:143 msgid "" "This is the pattern definition to play, either \"Automatic\" or a custom " "defined one." msgstr "Définition de la figure à jouer, « automatique » ou personnalisée." #. i18n: file: src/kmetronomeviewbase.ui:217 #. i18n: ectx: property (text), widget (QLabel, lblBeats) #: po/rc.cpp:146 msgid "Beats/Bar:" msgstr "Notes par mesure :" #. i18n: file: src/kmetronomeviewbase.ui:238 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_beatsBar) #: po/rc.cpp:149 msgid "" "This is the number of beats for each measure (bar).\n" "Values are from 1 to 32.\n" "It is the numerator of the time signature specification." msgstr "" "Nombre de temps dans une mesure\n" "Les valeurs vont de 1 à 32.\n" "C’est le numérateur de la signature rythmique." #. i18n: file: src/kmetronomeviewbase.ui:254 #. i18n: ectx: property (text), widget (QLabel, lblFigure) #: po/rc.cpp:154 msgid "Beat Length:" msgstr "Durée de la note :" #. i18n: file: src/kmetronomeviewbase.ui:272 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_figure) #: po/rc.cpp:157 msgid "" "This is the beat length.\n" "Values mean 1, 2, 4, 8, 16, 32 and 64.\n" "It is the denominator in the time signature specification." msgstr "" "Durée de la note.\n" "Les valeurs sont 1, 2, 4, 8, 16, 32 et 64.\n" "C'est le dénominateur de la signature rythmique." #. i18n: file: src/kmetronomeviewbase.ui:356 #. i18n: ectx: property (text), widget (QLabel, label_1) #: po/rc.cpp:183 msgctxt "weak notes MIDI velocity" msgid "Weak" msgstr "Faible" #. i18n: file: src/kmetronomeviewbase.ui:369 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:186 msgctxt "strong notes MIDI velocity" msgid "Strong" msgstr "Fort" #. i18n: file: src/kmetronomeviewbase.ui:382 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:189 msgctxt "audio volume level" msgid "Volume" msgstr "Volume" #. i18n: file: src/kmetronomeviewbase.ui:395 #. i18n: ectx: property (text), widget (QLabel, label_4) #: po/rc.cpp:192 msgctxt "audio panning" msgid "Pan" msgstr "Balance" #. i18n: file: src/kmetronomeviewbase.ui:414 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial1) #: po/rc.cpp:195 msgid "" "This is the velocity of the weak notes in the automatic rhythm pattern (all " "of them, except the first one)" msgstr "" "Intensité des temps faibles dans la figure rythmique (toutes les notes sauf " "la première)" #. i18n: file: src/kmetronomeviewbase.ui:439 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial2) #: po/rc.cpp:198 msgid "" "This is the velocity of the strong note in the automatic rhythm pattern (the " "first one)" msgstr "Intensité du temps fort dans la figure rythmique (la première note)" #. i18n: file: src/kmetronomeviewbase.ui:464 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial3) #: po/rc.cpp:201 msgid "This is the MIDI volume control (CC7)" msgstr "Contrôle du volume MIDI (CC7)" #. i18n: file: src/kmetronomeviewbase.ui:489 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial4) #: po/rc.cpp:204 msgid "This is the MIDI pan control (CC10)" msgstr "Contrôle de la balance MIDI (CC10)" #. i18n: file: src/kmetronomeviewbase.ui:512 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_air) #: po/rc.cpp:207 msgid "This is the musical name of the tempo value" msgstr "Nom musical de la valeur du tempo" #. i18n: file: src/kmetronomeviewbase.ui:531 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_tempoLCD) #: po/rc.cpp:210 msgid "The current tempo value" msgstr "Valeur actuelle du tempo" #. i18n: file: src/kmetronomeviewbase.ui:554 #. i18n: ectx: property (text), widget (QLabel, textLabel1_2) #: po/rc.cpp:213 msgid "Tempo (in quarters per minute)" msgstr "Tempo (en noires par minute) :" #. i18n: file: src/kmetronomeviewbase.ui:580 #. i18n: ectx: property (whatsThis), widget (QSlider, m_tempo) #: po/rc.cpp:216 msgid "" "This slider changes the tempo, or speed of the rhythm.\n" "Values are 25 to 250 quarters per minute (Maelzel Metronome units)." msgstr "" "Ce curseur modifie le tempo, ou la vitesse du rythme.\n" "Les valeurs possibles vont de 25 à 250 noires par minute (unités du " "métronome de Maelzel)" #. i18n: file: src/kmetropreferencesbase.ui:37 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_autoconn) #: po/rc.cpp:220 msgid "" "If this checkbox is activated, the the program will remember the connections " "for the input and output ports, and try to reconnect them at program startup." msgstr "" "Si cette case est cochée, l'application se souviendra des connexions aux " "ports d'entrées et sorties et tentera de s'y reconnecter au prochain " "démarrage." #. i18n: file: src/kmetropreferencesbase.ui:40 #. i18n: ectx: property (text), widget (QCheckBox, m_autoconn) #: po/rc.cpp:223 msgid "Automatic ports connection on startup" msgstr "Connexion automatique des ports au démarrage" #. i18n: file: src/kmetropreferencesbase.ui:61 #. i18n: ectx: property (text), widget (QLabel, lblInputPort) #: po/rc.cpp:226 msgid "Optional input port conn:" msgstr "Connexion (optionnelle) du port d'entrée :" #. i18n: file: src/kmetropreferencesbase.ui:83 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_in_connection) #: po/rc.cpp:229 msgid "This is the optional connection for the MIDI IN port." msgstr "Connexion optionnelle du port d’entrée MIDI." #. i18n: file: src/kmetropreferencesbase.ui:102 #. i18n: ectx: property (text), widget (QLabel, lblOutputPort) #: po/rc.cpp:232 msgid "Output port connection:" msgstr "Connexion du port de sortie :" #. i18n: file: src/kmetropreferencesbase.ui:124 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_out_connection) #: po/rc.cpp:235 msgid "This is the mandatory connection for the MIDI OUT port" msgstr "Connexion obligatoire du port MIDI de sortie" #. i18n: file: src/kmetropreferencesbase.ui:131 #. i18n: ectx: property (text), widget (QLabel, lblInstrument) #: po/rc.cpp:238 msgid "Output instrument:" msgstr "Instrument de sortie :" #. i18n: file: src/kmetropreferencesbase.ui:147 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_instrument) #: po/rc.cpp:241 msgid "This is the definition of the instrument connected to the MIDI OUT port" msgstr "Définition de l’instrument relié au port MIDI de sortie" #. i18n: file: src/kmetropreferencesbase.ui:158 #. i18n: ectx: property (text), widget (QLabel, lblBank) #: po/rc.cpp:244 msgid "Bank:" msgstr "Banque :" #. i18n: file: src/kmetropreferencesbase.ui:171 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_bank) #: po/rc.cpp:247 msgid "This is the Bank of the selected MIDI program" msgstr "Banque du programme MIDI sélectionné" #. i18n: file: src/kmetropreferencesbase.ui:190 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: po/rc.cpp:250 msgid "Channel:" msgstr "Canal :" #. i18n: file: src/kmetropreferencesbase.ui:207 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_channel) #: po/rc.cpp:253 msgid "" "This is the MIDI channel, between 1 and 16. \n" "General MIDI uses the channel 10 for percussion sounds." msgstr "" "Canal MIDI, entre 1 et 16.\n" "Le programme « General » utilise le canal 10 pour les sons de percussion." #. i18n: file: src/kmetropreferencesbase.ui:235 #. i18n: ectx: property (text), widget (QLabel, textLabel3) #: po/rc.cpp:257 msgid "Program:" msgstr "Programme :" #. i18n: file: src/kmetropreferencesbase.ui:257 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_program) #: po/rc.cpp:260 msgid "This is the MIDI program" msgstr "Programme MIDI" #. i18n: file: src/kmetropreferencesbase.ui:270 #. i18n: ectx: property (text), widget (QLabel, textLabel7) #: po/rc.cpp:263 msgid "Resolution:" msgstr "Résolution :" #. i18n: file: src/kmetropreferencesbase.ui:286 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_resolution) #: po/rc.cpp:266 msgid "This is the MIDI time resolution (number of ticks in a quarter note)" msgstr "Résolution MIDI (nombre de tics pour une noire)" #. i18n: file: src/kmetropreferencesbase.ui:305 #. i18n: ectx: property (text), widget (QLabel, textLabel4) #: po/rc.cpp:269 msgid "Weak note:" msgstr "Note du temps faible :" #. i18n: file: src/kmetropreferencesbase.ui:327 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_weak_note) #: po/rc.cpp:272 msgid "This is the sound of the weak notes for the automatic patterns" msgstr "Son pour la note faible des figures rythmiques automatiques" #. i18n: file: src/kmetropreferencesbase.ui:340 #. i18n: ectx: property (text), widget (QLabel, textLabel8) #: po/rc.cpp:275 msgid "Note duration:" msgstr "Durée d'une note :" #. i18n: file: src/kmetropreferencesbase.ui:356 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_duration) #: po/rc.cpp:278 msgid "This is the note duration in ticks, when using NOTE OFF events" msgstr "" "Durée d’une note, en nombre de tics d’horloge, lorsque vous utilisez les " "événements NOTE OFF" #. i18n: file: src/kmetropreferencesbase.ui:378 #. i18n: ectx: property (text), widget (QLabel, textLabel5) #: po/rc.cpp:281 msgid "Strong note:" msgstr "Note du temps fort :" #. i18n: file: src/kmetropreferencesbase.ui:400 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_strong_note) #: po/rc.cpp:284 msgid "This is the sound of the strong notes for the automatic patterns" msgstr "Son pour le temps fort des figures rythmiques automatiques" #. i18n: file: src/kmetropreferencesbase.ui:411 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:287 msgid "Optional setting to send NOTE OFF events" msgstr "Envoyer des évènements « NOTE OFF » (facultatif)" #. i18n: file: src/kmetropreferencesbase.ui:414 #. i18n: ectx: property (text), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:290 msgid "Send NOTE OFF events" msgstr "Envoyer des évènements « NOTE OFF »" #. i18n: file: src/kmetropreferencesbase.ui:440 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:293 msgid "If this option is activated, the knobs are drawn using a custom style" msgstr "" "Si cette option est activée, les boutons seront affichés avec un style " "personnalisé" #. i18n: file: src/kmetropreferencesbase.ui:443 #. i18n: ectx: property (text), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:296 msgid "Styled Knobs" msgstr "Jolis boutons" #: po/rc.cpp:297 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Julien Richard-Foy" #: po/rc.cpp:298 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "julien.rf@no-log.org" #~ msgid "100" #~ msgstr "100" #~ msgid "Config" #~ msgstr "Configuration" #~ msgid "Exit" #~ msgstr "Quitter" #~ msgid "Rhythm figure:" #~ msgstr "Figure rythmique :" #~ msgid "" #~ "\n" #~ "\n" #~ "

This is the aire control to change the tempo value " #~ "using musical names

" #~ msgstr "" #~ "Contrôle permettant de modifier le tempo en utilisant des noms musicaux" #~ msgid "&OK" #~ msgstr "Ok" #~ msgid "&Cancel" #~ msgstr "Annuler" kmetronome-0.10.1/po/es.po0000644000175000001440000006406311760763113014404 0ustar pedrousers# translation of es.po to Spanish # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Pedro Lopez-Cabanillas , 2008, 2009. # Pedro López-Cabanillas , 2010. msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "atid=731542&group_id=134956\n" "POT-Creation-Date: 2012-05-28 21:56+0200\n" "PO-Revision-Date: 2010-05-23 11:30+0200\n" "Last-Translator: Pedro López-Cabanillas \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/drumgrid.cpp:51 msgid "Pattern Editor" msgstr "Editor de patrones" #: src/drumgrid.cpp:67 msgid "Cut" msgstr "Cortar" #: src/drumgrid.cpp:68 msgid "Copy" msgstr "Copiar" #: src/drumgrid.cpp:69 msgid "Paste" msgstr "Pegar" #: src/drumgrid.cpp:278 msgid "Do you want to remove the current pattern?" msgstr "¿Desea eliminar el patrón actual?" #: src/drumgrid.cpp:279 msgid "Remove Pattern" msgstr "Eliminar patrón" #: src/drumgrid.cpp:333 msgctxt "name of an automatically created pattern" msgid "Sample Pattern" msgstr "Patrón de ejemplo" #: src/drumgrid.cpp:364 msgid "Insert Pattern Row" msgstr "Insertar fila en el patrón" #: src/drumgrid.cpp:365 msgid "Drum Key:" msgstr "Sonido de percusión:" #: src/drumgrid.cpp:386 msgid "Please select one, and only one row" msgstr "Por favor seleccione una fila, y sólamente una" #: src/drumgrid.cpp:388 msgid "Do you want to remove the selected pattern row?" msgstr "¿Desea eliminar la fila seleccionada del patrón?" #: src/drumgrid.cpp:389 msgid "Remove Row" msgstr "Eliminar fila" #: src/kmetronome.cpp:87 msgid "" "Fatal error from the ALSA sequencer. This usually happens when the kernel " "doesn't have ALSA support, or the device node (/dev/snd/seq) doesn't exists, " "or the kernel module (snd_seq) is not loaded. Please check your ALSA/MIDI " "configuration. Returned error was: %1" msgstr "" "Error fatal del secuenciador ALSA. Esto ocurre normalmente cuando el núcleo " "no tiene soporte ALSA, o el nodo de dispositivo (/dev/snd/seq) no existe, o " "bien el módulo del núcleo (snd_seq) no ha sido cargado. Por favor, compruebe " "la configuración de ALSA y MIDI.El error devuelto ha sido: %1" #: src/kmetronome.cpp:93 msgid "Error" msgstr "Error" #: src/kmetronome.cpp:114 msgid "Play/Stop" msgstr "Comenzar/Parar" #: src/kmetronome.cpp:118 msgid "Show Action Buttons" msgstr "Mostrar botones de acción" #. i18n: file: src/kmetronomeviewbase.ui:126 #. i18n: ectx: property (text), widget (KPushButton, m_patternbtn) #: src/kmetronome.cpp:125 src/kmetronome.cpp:527 po/rc.cpp:128 msgid "Patterns" msgstr "Patrones" #: src/kmetronome.cpp:130 src/kmetronome.cpp:498 msgid "Import Patterns" msgstr "Importar patrones" #: src/kmetronome.cpp:135 src/kmetronome.cpp:511 msgid "Export Patterns" msgstr "Exportar patrones" #: src/kmetronome.cpp:497 src/kmetronome.cpp:510 msgid "*.pat|Pattern Files (*.pat)" msgstr "*.pat|Archivos de patrones (*.pat)" #: src/kmetronomeview.cpp:145 msgid "Tempo" msgstr "Tempo" #: src/kmetronomeview.cpp:145 msgid "Enter new Tempo:" msgstr "Introducir nuevo tempo:" #: src/kmetronomeview.cpp:179 msgctxt "the pattern is created automatically" msgid "Automatic" msgstr "Automático" #: src/kmetropreferences.cpp:29 msgid "Preferences" msgstr "Preferencias" #: src/main.cpp:29 msgid "KDE MIDI metronome using ALSA sequencer" msgstr "Metrónomo MIDI de KDE utilizando el secuenciador de ALSA " #: src/main.cpp:41 msgid "KMetronome" msgstr "KMetronome" #: src/main.cpp:43 msgid "(C) 2005-2012 Pedro Lopez-Cabanillas" msgstr "(C) 2005-2012 Pedro Lopez-Cabanillas" #: src/main.cpp:45 msgid "Pedro Lopez-Cabanillas" msgstr "Pedro Lopez-Cabanillas" #: src/sequenceradapter.cpp:65 msgid "No connection" msgstr "Sin conexión" #. i18n: file: src/drumgrid.ui:46 #. i18n: ectx: property (text), widget (QLabel, patternLabel) #. i18n: file: src/kmetronomeviewbase.ui:191 #. i18n: ectx: property (text), widget (QLabel, lblPattern) #: po/rc.cpp:3 po/rc.cpp:140 msgid "Pattern:" msgstr "Patrón:" #. i18n: file: src/drumgrid.ui:62 #. i18n: ectx: property (whatsThis), widget (KComboBox, patternCombo) #: po/rc.cpp:6 msgid "" "Type a new name and press the \"Save\" button to create a new pattern, or " "choose an existing pattern from the drop-down list." msgstr "" "Escriba un nuevo nombre y pulse el botón \"Guardar\" para crear un nuevo " "patrón, o elija un patrón existente en la lista desplegable." #. i18n: file: src/drumgrid.ui:72 #. i18n: ectx: property (whatsThis), widget (KPushButton, saveButton) #: po/rc.cpp:9 msgid "This button stores the current pattern definition with the name given" msgstr "" "Este botón almacena la definición del patrón actual con el nombre " "proporcionado" #. i18n: file: src/drumgrid.ui:75 #. i18n: ectx: property (text), widget (KPushButton, saveButton) #: po/rc.cpp:12 msgid "Save" msgstr "Guardar" #. i18n: file: src/drumgrid.ui:82 #. i18n: ectx: property (whatsThis), widget (KPushButton, deleteButton) #: po/rc.cpp:15 msgid "This button deletes the current pattern definition" msgstr "Este botón borra la definición del patrón actual" #. i18n: file: src/drumgrid.ui:85 #. i18n: ectx: property (text), widget (KPushButton, deleteButton) #: po/rc.cpp:18 msgid "Delete" msgstr "Eliminar" #. i18n: file: src/drumgrid.ui:104 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:21 msgid "Rows:" msgstr "Filas:" #. i18n: file: src/drumgrid.ui:111 #. i18n: ectx: property (whatsThis), widget (KPushButton, addButton) #: po/rc.cpp:24 msgid "" "Use this button to add new rows (sounds) to the current pattern definition" msgstr "" "Utilice este botón para añadir nuevas filas (sonidos) a la definición de " "patrón actual" #. i18n: file: src/drumgrid.ui:114 #. i18n: ectx: property (text), widget (KPushButton, addButton) #: po/rc.cpp:27 msgid "Add" msgstr "Añadir" #. i18n: file: src/drumgrid.ui:121 #. i18n: ectx: property (whatsThis), widget (KPushButton, removeButton) #: po/rc.cpp:30 msgid "" "Use this button to remove the selected row (sound) from the pattern " "definition" msgstr "" "Utilize este botón para eliminar la fila seleccionada (sonido) de la " "definición de patrón" #. i18n: file: src/drumgrid.ui:124 #. i18n: ectx: property (text), widget (KPushButton, removeButton) #: po/rc.cpp:33 msgid "Remove" msgstr "Eliminar" #. i18n: file: src/drumgrid.ui:144 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:36 msgid "Beats:" msgstr "Partes:" #. i18n: file: src/drumgrid.ui:151 #. i18n: ectx: property (whatsThis), widget (QCheckBox, chkselbeat) #: po/rc.cpp:39 msgid "Highligh the grid columns while playing" msgstr "Destacar las columnas de la tabla durante la reproducción" #. i18n: file: src/drumgrid.ui:155 #. i18n: ectx: property (text), widget (QCheckBox, chkselbeat) #: po/rc.cpp:42 msgid "" "Highlight\n" "Columns" msgstr "" "Destacar\n" "Columnas" #. i18n: file: src/drumgrid.ui:168 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, beatNumber) #: po/rc.cpp:46 msgid "This is the current beat number" msgstr "Este es el número de parte actual" #. i18n: file: src/drumgrid.ui:187 #. i18n: ectx: property (whatsThis), widget (QTableView, tableView) #: po/rc.cpp:49 msgid "This is the pattern table, beats as columns and sounds as rows" msgstr "" "Esta es la tabla de patrones, partes como columnas y sonidos como filas" #. i18n: file: src/drumgrid.ui:203 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, gridColumns) #: po/rc.cpp:52 msgid "Number of beats per measure (bar)" msgstr "Número de partes rítmicas por compás" #. i18n: file: src/drumgrid.ui:219 #. i18n: ectx: property (whatsThis), widget (KComboBox, figureCombo) #: po/rc.cpp:55 msgid "This is the beat length for the pattern column." msgstr "Esta es la duración de cada columna del patrón" #. i18n: file: src/drumgrid.ui:229 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:282 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:58 po/rc.cpp:162 msgid "Whole" msgstr "Redonda " #. i18n: file: src/drumgrid.ui:238 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:291 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:61 po/rc.cpp:165 msgid "Half" msgstr "Blanca" #. i18n: file: src/drumgrid.ui:247 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:300 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:64 po/rc.cpp:168 msgid "Quarter" msgstr "Negra" #. i18n: file: src/drumgrid.ui:256 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:309 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:67 po/rc.cpp:171 msgid "Eighth" msgstr "Corchea" #. i18n: file: src/drumgrid.ui:265 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:318 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:70 po/rc.cpp:174 msgid "Sixteenth" msgstr "Semicorchea" #. i18n: file: src/drumgrid.ui:274 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:327 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:73 po/rc.cpp:177 msgid "Thirty-Second" msgstr "Fusa" #. i18n: file: src/drumgrid.ui:283 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:336 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:76 po/rc.cpp:180 msgid "Sixty-Fourth" msgstr "Semifusa" #. i18n: file: src/drumgrid.ui:295 #. i18n: ectx: property (whatsThis), widget (QPushButton, startButton) #: po/rc.cpp:79 msgid "This button starts playing the current pattern" msgstr "Este botón inicia la reproducción del patrón rítmico" #. i18n: file: src/drumgrid.ui:298 #. i18n: ectx: property (text), widget (QPushButton, startButton) #. i18n: file: src/kmetronomeviewbase.ui:81 #. i18n: ectx: property (text), widget (KPushButton, m_playbtn) #: po/rc.cpp:82 po/rc.cpp:110 msgid "Play" msgstr "Reproducir" #. i18n: file: src/drumgrid.ui:311 #. i18n: ectx: property (whatsThis), widget (QPushButton, stopButton) #: po/rc.cpp:85 msgid "This button stops the playback" msgstr "Este botón termina la reproducción" #. i18n: file: src/drumgrid.ui:314 #. i18n: ectx: property (text), widget (QPushButton, stopButton) #. i18n: file: src/kmetronomeviewbase.ui:100 #. i18n: ectx: property (text), widget (KPushButton, m_stopbtn) #: po/rc.cpp:88 po/rc.cpp:116 msgid "Stop" msgstr "Parar" #. i18n: file: src/drumgrid.ui:330 #. i18n: ectx: property (whatsThis), widget (QLabel, label_3) #: po/rc.cpp:91 msgid "QPM: quarters per minute" msgstr "NPM: negras por minuto" #. i18n: file: src/drumgrid.ui:333 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:94 msgctxt "Quarters per Minute" msgid "QPM:" msgstr "NPM:" #. i18n: file: src/drumgrid.ui:343 #. i18n: ectx: property (whatsThis), widget (QLabel, tempoLabel) #: po/rc.cpp:97 msgid "This is the current tempo in quarters per minute" msgstr "Este es el tempo actual (en negras por minuto)" #. i18n: file: src/drumgrid.ui:353 #. i18n: ectx: property (whatsThis), widget (QSlider, tempoSlider) #: po/rc.cpp:101 msgid "Drag the slider handle to change the tempo, in quarters per minute" msgstr "Arrastre el deslizador para cambiar el tempo, en negras por minuto" #. i18n: file: src/kmetronomeviewbase.ui:58 #. i18n: ectx: property (windowTitle), widget (QWidget, KmetronomeViewBase) #: po/rc.cpp:104 msgid "MIDI Metronome" msgstr "Metrónomo MIDI" #. i18n: file: src/kmetronomeviewbase.ui:78 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_playbtn) #: po/rc.cpp:107 msgid "This button starts playing the rhythm pattern" msgstr "Este botón inicia la reproducción del patrón rítmico" #. i18n: file: src/kmetronomeviewbase.ui:97 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_stopbtn) #: po/rc.cpp:113 msgid "This button stops playing the rhythm pattern" msgstr "Este botón detiene la reproducción del patrón rítmico" #. i18n: file: src/kmetronomeviewbase.ui:113 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_configbtn) #: po/rc.cpp:119 msgid "This button opens the configuration window" msgstr "Este botón abre la ventana de configuración" #. i18n: file: src/kmetronomeviewbase.ui:116 #. i18n: ectx: property (text), widget (KPushButton, m_configbtn) #: po/rc.cpp:122 msgid "Settings" msgstr "Preferencias" #. i18n: file: src/kmetronomeviewbase.ui:123 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_patternbtn) #: po/rc.cpp:125 msgid "This button opens the pattern editor" msgstr "Este botón abre el editor de patrones" #. i18n: file: src/kmetronomeviewbase.ui:139 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_exitbtn) #: po/rc.cpp:131 msgid "This button exits the program" msgstr "Este botón termina el programa" #. i18n: file: src/kmetronomeviewbase.ui:142 #. i18n: ectx: property (text), widget (KPushButton, m_exitbtn) #: po/rc.cpp:134 msgid "Quit" msgstr "Salir" #. i18n: file: src/kmetronomeviewbase.ui:173 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_measureLCD) #: po/rc.cpp:137 msgid "Number of measures (bars) and beats played from beginning" msgstr "Número de compases y partes ejecutadas desde el principio" #. i18n: file: src/kmetronomeviewbase.ui:210 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_pattern) #: po/rc.cpp:143 msgid "" "This is the pattern definition to play, either \"Automatic\" or a custom " "defined one." msgstr "" "Esta es la definición de patrón que se reproducirá, bien \"Automático\" o " "bién una definición personalizada." #. i18n: file: src/kmetronomeviewbase.ui:217 #. i18n: ectx: property (text), widget (QLabel, lblBeats) #: po/rc.cpp:146 msgid "Beats/Bar:" msgstr "Partes/Compás:" #. i18n: file: src/kmetronomeviewbase.ui:238 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_beatsBar) #: po/rc.cpp:149 msgid "" "This is the number of beats for each measure (bar).\n" "Values are from 1 to 32.\n" "It is the numerator of the time signature specification." msgstr "" "Este es el número de partes de cada compás.\n" "Valores admisibles entre 1 y 32.\n" "Este es el numerador de la especificación de ritmo." #. i18n: file: src/kmetronomeviewbase.ui:254 #. i18n: ectx: property (text), widget (QLabel, lblFigure) #: po/rc.cpp:154 msgid "Beat Length:" msgstr "Figura rítmica:" #. i18n: file: src/kmetronomeviewbase.ui:272 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_figure) #: po/rc.cpp:157 msgid "" "This is the beat length.\n" "Values mean 1, 2, 4, 8, 16, 32 and 64.\n" "It is the denominator in the time signature specification." msgstr "" "Esta es la duración de una parte rítmica.\n" "Los valores significan 1, 2, 4, 8, 16, 32 y 64.\n" "Es el denominador de la especificación de ritmo." #. i18n: file: src/kmetronomeviewbase.ui:356 #. i18n: ectx: property (text), widget (QLabel, label_1) #: po/rc.cpp:183 msgctxt "weak notes MIDI velocity" msgid "Weak" msgstr "Débil" #. i18n: file: src/kmetronomeviewbase.ui:369 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:186 msgctxt "strong notes MIDI velocity" msgid "Strong" msgstr "Fuerte" #. i18n: file: src/kmetronomeviewbase.ui:382 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:189 msgctxt "audio volume level" msgid "Volume" msgstr "Volumen" #. i18n: file: src/kmetronomeviewbase.ui:395 #. i18n: ectx: property (text), widget (QLabel, label_4) #: po/rc.cpp:192 msgctxt "audio panning" msgid "Pan" msgstr "Balance" #. i18n: file: src/kmetronomeviewbase.ui:414 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial1) #: po/rc.cpp:195 msgid "" "This is the velocity of the weak notes in the automatic rhythm pattern (all " "of them, except the first one)" msgstr "" "Esta es la velocidad de las notas débiles en el patrón rítmico automático " "(todas ellas excepto la primera)" #. i18n: file: src/kmetronomeviewbase.ui:439 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial2) #: po/rc.cpp:198 msgid "" "This is the velocity of the strong note in the automatic rhythm pattern (the " "first one)" msgstr "" "Esta es la velocidad de las notas fuertes en el patrón rítmico automático " "(la primera)" #. i18n: file: src/kmetronomeviewbase.ui:464 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial3) #: po/rc.cpp:201 msgid "This is the MIDI volume control (CC7)" msgstr "Este es el control de volumen (CC7)" #. i18n: file: src/kmetronomeviewbase.ui:489 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial4) #: po/rc.cpp:204 msgid "This is the MIDI pan control (CC10)" msgstr "Este es el control de balance (CC10)" #. i18n: file: src/kmetronomeviewbase.ui:512 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_air) #: po/rc.cpp:207 msgid "This is the musical name of the tempo value" msgstr "Esta es la denominación musical del valor del tempo" #. i18n: file: src/kmetronomeviewbase.ui:531 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_tempoLCD) #: po/rc.cpp:210 msgid "The current tempo value" msgstr "El valor actual del tempo" #. i18n: file: src/kmetronomeviewbase.ui:554 #. i18n: ectx: property (text), widget (QLabel, textLabel1_2) #: po/rc.cpp:213 msgid "Tempo (in quarters per minute)" msgstr "Tempo (en negras por minuto)" #. i18n: file: src/kmetronomeviewbase.ui:580 #. i18n: ectx: property (whatsThis), widget (QSlider, m_tempo) #: po/rc.cpp:216 msgid "" "This slider changes the tempo, or speed of the rhythm.\n" "Values are 25 to 250 quarters per minute (Maelzel Metronome units)." msgstr "" "Este deslizador cambia el tempo, o velocidad del ritmo.\n" "Los valores van desde 25 hasta 250 negras por minuto. (unidades del " "Metrónomo de Mälzel)." #. i18n: file: src/kmetropreferencesbase.ui:37 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_autoconn) #: po/rc.cpp:220 msgid "" "If this checkbox is activated, the the program will remember the connections " "for the input and output ports, and try to reconnect them at program startup." msgstr "" "Si esta casilla está marcada, el programa recordará las conexiones para los " "puertos de entrada y de salida, e intentará su reconexión al inicio del " "programa." #. i18n: file: src/kmetropreferencesbase.ui:40 #. i18n: ectx: property (text), widget (QCheckBox, m_autoconn) #: po/rc.cpp:223 msgid "Automatic ports connection on startup" msgstr "Conexión automática de los puertos al iniciar" #. i18n: file: src/kmetropreferencesbase.ui:61 #. i18n: ectx: property (text), widget (QLabel, lblInputPort) #: po/rc.cpp:226 msgid "Optional input port conn:" msgstr "Conexión de la entrada:" #. i18n: file: src/kmetropreferencesbase.ui:83 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_in_connection) #: po/rc.cpp:229 msgid "This is the optional connection for the MIDI IN port." msgstr "Esta es la conexión opcional del puerto MIDI IN." #. i18n: file: src/kmetropreferencesbase.ui:102 #. i18n: ectx: property (text), widget (QLabel, lblOutputPort) #: po/rc.cpp:232 msgid "Output port connection:" msgstr "Conexión de la salida:" #. i18n: file: src/kmetropreferencesbase.ui:124 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_out_connection) #: po/rc.cpp:235 msgid "This is the mandatory connection for the MIDI OUT port" msgstr "Esta es la conexión obligatoria del puerto MIDI OUT" #. i18n: file: src/kmetropreferencesbase.ui:131 #. i18n: ectx: property (text), widget (QLabel, lblInstrument) #: po/rc.cpp:238 msgid "Output instrument:" msgstr "Instrumento receptor:" #. i18n: file: src/kmetropreferencesbase.ui:147 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_instrument) #: po/rc.cpp:241 msgid "This is the definition of the instrument connected to the MIDI OUT port" msgstr "Esta es la definición del instrumento conectado al puerto MIDI OUT" #. i18n: file: src/kmetropreferencesbase.ui:158 #. i18n: ectx: property (text), widget (QLabel, lblBank) #: po/rc.cpp:244 msgid "Bank:" msgstr "Banco:" #. i18n: file: src/kmetropreferencesbase.ui:171 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_bank) #: po/rc.cpp:247 msgid "This is the Bank of the selected MIDI program" msgstr "Este es el banco del programa MIDI seleccionado" #. i18n: file: src/kmetropreferencesbase.ui:190 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: po/rc.cpp:250 msgid "Channel:" msgstr "Canal:" #. i18n: file: src/kmetropreferencesbase.ui:207 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_channel) #: po/rc.cpp:253 msgid "" "This is the MIDI channel, between 1 and 16. \n" "General MIDI uses the channel 10 for percussion sounds." msgstr "" "Este es el canal MIDI, entre 1 y 16.\n" "General MIDI utiliza el canal 10 para sonidos de percusión." #. i18n: file: src/kmetropreferencesbase.ui:235 #. i18n: ectx: property (text), widget (QLabel, textLabel3) #: po/rc.cpp:257 msgid "Program:" msgstr "Programa:" #. i18n: file: src/kmetropreferencesbase.ui:257 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_program) #: po/rc.cpp:260 msgid "This is the MIDI program" msgstr "Este es el programa MIDI" #. i18n: file: src/kmetropreferencesbase.ui:270 #. i18n: ectx: property (text), widget (QLabel, textLabel7) #: po/rc.cpp:263 msgid "Resolution:" msgstr "Resolución:" #. i18n: file: src/kmetropreferencesbase.ui:286 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_resolution) #: po/rc.cpp:266 msgid "This is the MIDI time resolution (number of ticks in a quarter note)" msgstr "Esta es la resolución de tiempo MIDI (número de tics por negra)" #. i18n: file: src/kmetropreferencesbase.ui:305 #. i18n: ectx: property (text), widget (QLabel, textLabel4) #: po/rc.cpp:269 msgid "Weak note:" msgstr "Nota débil:" #. i18n: file: src/kmetropreferencesbase.ui:327 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_weak_note) #: po/rc.cpp:272 msgid "This is the sound of the weak notes for the automatic patterns" msgstr "Este es sonido de las notas débiles en el patrón rítmico automático" #. i18n: file: src/kmetropreferencesbase.ui:340 #. i18n: ectx: property (text), widget (QLabel, textLabel8) #: po/rc.cpp:275 msgid "Note duration:" msgstr "Duración:" #. i18n: file: src/kmetropreferencesbase.ui:356 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_duration) #: po/rc.cpp:278 msgid "This is the note duration in ticks, when using NOTE OFF events" msgstr "" "Esta es la duración de las notas en tics, cuando se utilizan eventos NOTE OFF" #. i18n: file: src/kmetropreferencesbase.ui:378 #. i18n: ectx: property (text), widget (QLabel, textLabel5) #: po/rc.cpp:281 msgid "Strong note:" msgstr "Nota fuerte:" #. i18n: file: src/kmetropreferencesbase.ui:400 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_strong_note) #: po/rc.cpp:284 msgid "This is the sound of the strong notes for the automatic patterns" msgstr "Este es el sonido de las notas fuertes en el patrón rítmico automático" #. i18n: file: src/kmetropreferencesbase.ui:411 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:287 msgid "Optional setting to send NOTE OFF events" msgstr "Opción para emitir eventos NOTE OFF" #. i18n: file: src/kmetropreferencesbase.ui:414 #. i18n: ectx: property (text), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:290 msgid "Send NOTE OFF events" msgstr "Emitir eventos NOTE OFF" #. i18n: file: src/kmetropreferencesbase.ui:440 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:293 msgid "If this option is activated, the knobs are drawn using a custom style" msgstr "" "Si esta opción está seleccionada, los botones rotatorios se dibujarán con un " "estilo personalizado" #. i18n: file: src/kmetropreferencesbase.ui:443 #. i18n: ectx: property (text), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:296 msgid "Styled Knobs" msgstr "Botones decorados" #: po/rc.cpp:297 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Pedro López-Cabanillas" #: po/rc.cpp:298 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "plcl@users.sf.net" #~ msgid "100" #~ msgstr "100" #~ msgid "" #~ "This is the aire control to change the tempo value using musical names" #~ msgstr "Este es el valor del tempo en denominaciones musicales" #~ msgid "Rhythm figure:" #~ msgstr "Figura rítmica:" #, fuzzy #~ msgid "This is the MIDI channel" #~ msgstr "Este es el control de balance (CC10)" #~ msgid "Config" #~ msgstr "Configuración" #~ msgid "Exit" #~ msgstr "Terminar" #~ msgid "" #~ "\n" #~ "\n" #~ "

This is the aire control to change the tempo value " #~ "using musical names

" #~ msgstr "" #~ "\n" #~ "\n" #~ "

Este es el control " #~ "deaire para cambiar el tempo " #~ "value usando nombres musicales

" #~ msgid "&OK" #~ msgstr "&Aceptar" #~ msgid "&Cancel" #~ msgstr "&Cancelar" #~ msgid "Measure : Beat" #~ msgstr "Compás : Parte" kmetronome-0.10.1/po/cs.po0000644000175000001440000006324211760763113014400 0ustar pedrousers# translation of es.po to Spanish # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Pedro Lopez-Cabanillas , 2008. # Pavel, 2009. # Pavel Fric , 2009, 2010. # Pedro López-Cabanillas , 2010. msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "atid=731542&group_id=134956\n" "POT-Creation-Date: 2012-05-28 21:56+0200\n" "PO-Revision-Date: 2010-05-23 14:20+0200\n" "Last-Translator: Pavel Fric\n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: src/drumgrid.cpp:51 msgid "Pattern Editor" msgstr "Editor vzorů" #: src/drumgrid.cpp:67 msgid "Cut" msgstr "" #: src/drumgrid.cpp:68 msgid "Copy" msgstr "" #: src/drumgrid.cpp:69 #, fuzzy msgid "Paste" msgstr "Vzory" #: src/drumgrid.cpp:278 msgid "Do you want to remove the current pattern?" msgstr "Chcete odstranit současný vzor?" #: src/drumgrid.cpp:279 msgid "Remove Pattern" msgstr "Odstranit vzor" #: src/drumgrid.cpp:333 msgctxt "name of an automatically created pattern" msgid "Sample Pattern" msgstr "Ukázkový vzor" #: src/drumgrid.cpp:364 msgid "Insert Pattern Row" msgstr "Vložit vzor nyní" #: src/drumgrid.cpp:365 msgid "Drum Key:" msgstr "Tónina bubnu:" #: src/drumgrid.cpp:386 msgid "Please select one, and only one row" msgstr "Vyberte, prosím, jednu, a pouze jeden řádek" #: src/drumgrid.cpp:388 msgid "Do you want to remove the selected pattern row?" msgstr "Chcete odstranit vybraný vzor nyní?" #: src/drumgrid.cpp:389 msgid "Remove Row" msgstr "Odstranit řádek" #: src/kmetronome.cpp:87 msgid "" "Fatal error from the ALSA sequencer. This usually happens when the kernel " "doesn't have ALSA support, or the device node (/dev/snd/seq) doesn't exists, " "or the kernel module (snd_seq) is not loaded. Please check your ALSA/MIDI " "configuration. Returned error was: %1" msgstr "" "Vážná chyba v ALSA sekvenceru. Obyčejně se to stává, když v jádru není " "podpora pro ALSA, nebo neexistuje uzel zařízení (/dev/snd/seq), nebo když " "není nahrán modul jádra (snd_seq). Ověřte, prosím, své nastavení ALSA/MIDI. " "Vrácenou chybou bylo: %1" #: src/kmetronome.cpp:93 msgid "Error" msgstr "Chyba" #: src/kmetronome.cpp:114 msgid "Play/Stop" msgstr "Přehrát/Zastavit" #: src/kmetronome.cpp:118 msgid "Show Action Buttons" msgstr "Ukázat tlačítka činností" #. i18n: file: src/kmetronomeviewbase.ui:126 #. i18n: ectx: property (text), widget (KPushButton, m_patternbtn) #: src/kmetronome.cpp:125 src/kmetronome.cpp:527 po/rc.cpp:128 msgid "Patterns" msgstr "Vzory" #: src/kmetronome.cpp:130 src/kmetronome.cpp:498 msgid "Import Patterns" msgstr "Zavést vzory" #: src/kmetronome.cpp:135 src/kmetronome.cpp:511 msgid "Export Patterns" msgstr "Vyvést vzory" #: src/kmetronome.cpp:497 src/kmetronome.cpp:510 msgid "*.pat|Pattern Files (*.pat)" msgstr "*.pat|Soubory se vzory (*.pat)" #: src/kmetronomeview.cpp:145 msgid "Tempo" msgstr "Tempo" #: src/kmetronomeview.cpp:145 msgid "Enter new Tempo:" msgstr "Zadat nové tempo:" #: src/kmetronomeview.cpp:179 msgctxt "the pattern is created automatically" msgid "Automatic" msgstr "Automaticky" #: src/kmetropreferences.cpp:29 msgid "Preferences" msgstr "Nastavení" #: src/main.cpp:29 msgid "KDE MIDI metronome using ALSA sequencer" msgstr "Metronom MIDI pro prostředí KDE používající sekvencer ALSA" #: src/main.cpp:41 msgid "KMetronome" msgstr "KMetronome" #: src/main.cpp:43 msgid "(C) 2005-2012 Pedro Lopez-Cabanillas" msgstr "(C) 2005-2012 Pedro Lopez-Cabanillas" #: src/main.cpp:45 msgid "Pedro Lopez-Cabanillas" msgstr "Pedro Lopez-Cabanillas" #: src/sequenceradapter.cpp:65 msgid "No connection" msgstr "Žádné spojení" #. i18n: file: src/drumgrid.ui:46 #. i18n: ectx: property (text), widget (QLabel, patternLabel) #. i18n: file: src/kmetronomeviewbase.ui:191 #. i18n: ectx: property (text), widget (QLabel, lblPattern) #: po/rc.cpp:3 po/rc.cpp:140 msgid "Pattern:" msgstr "Vzor:" #. i18n: file: src/drumgrid.ui:62 #. i18n: ectx: property (whatsThis), widget (KComboBox, patternCombo) #: po/rc.cpp:6 msgid "" "Type a new name and press the \"Save\" button to create a new pattern, or " "choose an existing pattern from the drop-down list." msgstr "" "Napište nový název a stiskněte tlačítko \"Uložit\" pro vytvoření nového " "vzoru. nebo vyberte stávající vzor ze seznamu." #. i18n: file: src/drumgrid.ui:72 #. i18n: ectx: property (whatsThis), widget (KPushButton, saveButton) #: po/rc.cpp:9 msgid "This button stores the current pattern definition with the name given" msgstr "Tímto tlačítkem se ukládá vymezení současného vzoru se zadaným názvem" #. i18n: file: src/drumgrid.ui:75 #. i18n: ectx: property (text), widget (KPushButton, saveButton) #: po/rc.cpp:12 msgid "Save" msgstr "Uložit" #. i18n: file: src/drumgrid.ui:82 #. i18n: ectx: property (whatsThis), widget (KPushButton, deleteButton) #: po/rc.cpp:15 msgid "This button deletes the current pattern definition" msgstr "Tímto tlačítkem se maže vymezení současného vzoru" #. i18n: file: src/drumgrid.ui:85 #. i18n: ectx: property (text), widget (KPushButton, deleteButton) #: po/rc.cpp:18 msgid "Delete" msgstr "Smazat" #. i18n: file: src/drumgrid.ui:104 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:21 msgid "Rows:" msgstr "Řádky:" #. i18n: file: src/drumgrid.ui:111 #. i18n: ectx: property (whatsThis), widget (KPushButton, addButton) #: po/rc.cpp:24 msgid "" "Use this button to add new rows (sounds) to the current pattern definition" msgstr "" "Použijte toto tlačítko pro přidání nových řádků (zvuků) do vymezení " "současného vzoru" #. i18n: file: src/drumgrid.ui:114 #. i18n: ectx: property (text), widget (KPushButton, addButton) #: po/rc.cpp:27 msgid "Add" msgstr "Přidat" #. i18n: file: src/drumgrid.ui:121 #. i18n: ectx: property (whatsThis), widget (KPushButton, removeButton) #: po/rc.cpp:30 msgid "" "Use this button to remove the selected row (sound) from the pattern " "definition" msgstr "" "Toto tlačítko použijte pro odstranění vybraného řádku (zvuku) z vymezení " "současného vzoru" #. i18n: file: src/drumgrid.ui:124 #. i18n: ectx: property (text), widget (KPushButton, removeButton) #: po/rc.cpp:33 msgid "Remove" msgstr "Odstranit" #. i18n: file: src/drumgrid.ui:144 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:36 msgid "Beats:" msgstr "Doby:" #. i18n: file: src/drumgrid.ui:151 #. i18n: ectx: property (whatsThis), widget (QCheckBox, chkselbeat) #: po/rc.cpp:39 msgid "Highligh the grid columns while playing" msgstr "Zvýraznit sloupce mřížky při přehrávání" #. i18n: file: src/drumgrid.ui:155 #. i18n: ectx: property (text), widget (QCheckBox, chkselbeat) #: po/rc.cpp:42 msgid "" "Highlight\n" "Columns" msgstr "" "Zvýraznit\n" "Sloupce" #. i18n: file: src/drumgrid.ui:168 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, beatNumber) #: po/rc.cpp:46 msgid "This is the current beat number" msgstr "Toto je číslo nynější doby" #. i18n: file: src/drumgrid.ui:187 #. i18n: ectx: property (whatsThis), widget (QTableView, tableView) #: po/rc.cpp:49 msgid "This is the pattern table, beats as columns and sounds as rows" msgstr "Toto je tabulka vzoru, doby jako sloupce a zvuky jako řádky" #. i18n: file: src/drumgrid.ui:203 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, gridColumns) #: po/rc.cpp:52 msgid "Number of beats per measure (bar)" msgstr "Počet dob na takt" #. i18n: file: src/drumgrid.ui:219 #. i18n: ectx: property (whatsThis), widget (KComboBox, figureCombo) #: po/rc.cpp:55 msgid "This is the beat length for the pattern column." msgstr "Toto je délka doby pro sloupec vzoru." #. i18n: file: src/drumgrid.ui:229 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:282 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:58 po/rc.cpp:162 msgid "Whole" msgstr "Celá" #. i18n: file: src/drumgrid.ui:238 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:291 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:61 po/rc.cpp:165 msgid "Half" msgstr "Půlová" #. i18n: file: src/drumgrid.ui:247 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:300 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:64 po/rc.cpp:168 msgid "Quarter" msgstr "Čtvrtina" #. i18n: file: src/drumgrid.ui:256 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:309 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:67 po/rc.cpp:171 msgid "Eighth" msgstr "Osmina" #. i18n: file: src/drumgrid.ui:265 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:318 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:70 po/rc.cpp:174 msgid "Sixteenth" msgstr "Šestnáctina" #. i18n: file: src/drumgrid.ui:274 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:327 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:73 po/rc.cpp:177 msgid "Thirty-Second" msgstr "Dvaatřicetina" #. i18n: file: src/drumgrid.ui:283 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:336 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:76 po/rc.cpp:180 msgid "Sixty-Fourth" msgstr "Čtyřiašedesátina" #. i18n: file: src/drumgrid.ui:295 #. i18n: ectx: property (whatsThis), widget (QPushButton, startButton) #: po/rc.cpp:79 msgid "This button starts playing the current pattern" msgstr "Tímto tlačítkem se spouští přehrávání současného vzoru" #. i18n: file: src/drumgrid.ui:298 #. i18n: ectx: property (text), widget (QPushButton, startButton) #. i18n: file: src/kmetronomeviewbase.ui:81 #. i18n: ectx: property (text), widget (KPushButton, m_playbtn) #: po/rc.cpp:82 po/rc.cpp:110 msgid "Play" msgstr "Přehrát" #. i18n: file: src/drumgrid.ui:311 #. i18n: ectx: property (whatsThis), widget (QPushButton, stopButton) #: po/rc.cpp:85 msgid "This button stops the playback" msgstr "Tímto tlačítkem se zastavuje přehrávání" #. i18n: file: src/drumgrid.ui:314 #. i18n: ectx: property (text), widget (QPushButton, stopButton) #. i18n: file: src/kmetronomeviewbase.ui:100 #. i18n: ectx: property (text), widget (KPushButton, m_stopbtn) #: po/rc.cpp:88 po/rc.cpp:116 msgid "Stop" msgstr "Zastavit" #. i18n: file: src/drumgrid.ui:330 #. i18n: ectx: property (whatsThis), widget (QLabel, label_3) #: po/rc.cpp:91 msgid "QPM: quarters per minute" msgstr "ČZM: čtvrtin za minutu" #. i18n: file: src/drumgrid.ui:333 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:94 msgctxt "Quarters per Minute" msgid "QPM:" msgstr "ČZM:" #. i18n: file: src/drumgrid.ui:343 #. i18n: ectx: property (whatsThis), widget (QLabel, tempoLabel) #: po/rc.cpp:97 msgid "This is the current tempo in quarters per minute" msgstr "Toto je nynější tempo ve čtvrtinách za minutu)" #. i18n: file: src/drumgrid.ui:353 #. i18n: ectx: property (whatsThis), widget (QSlider, tempoSlider) #: po/rc.cpp:101 msgid "Drag the slider handle to change the tempo, in quarters per minute" msgstr "Táhněte posuvníkem pro změnu tempa, ve čtvrtinách za minutu" #. i18n: file: src/kmetronomeviewbase.ui:58 #. i18n: ectx: property (windowTitle), widget (QWidget, KmetronomeViewBase) #: po/rc.cpp:104 msgid "MIDI Metronome" msgstr "MIDI metronom" #. i18n: file: src/kmetronomeviewbase.ui:78 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_playbtn) #: po/rc.cpp:107 msgid "This button starts playing the rhythm pattern" msgstr "Tímto tlačítkem se spouští přehrávání rytmického vzoru" #. i18n: file: src/kmetronomeviewbase.ui:97 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_stopbtn) #: po/rc.cpp:113 msgid "This button stops playing the rhythm pattern" msgstr "Tímto tlačítkem se zastavuje přehrávání rytmického vzoru" #. i18n: file: src/kmetronomeviewbase.ui:113 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_configbtn) #: po/rc.cpp:119 msgid "This button opens the configuration window" msgstr "Tímto tlačítkem se otevírá okno s nastavením" #. i18n: file: src/kmetronomeviewbase.ui:116 #. i18n: ectx: property (text), widget (KPushButton, m_configbtn) #: po/rc.cpp:122 msgid "Settings" msgstr "Nastavení" #. i18n: file: src/kmetronomeviewbase.ui:123 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_patternbtn) #: po/rc.cpp:125 msgid "This button opens the pattern editor" msgstr "Tímto tlačítkem se otevírá editor vzoru" #. i18n: file: src/kmetronomeviewbase.ui:139 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_exitbtn) #: po/rc.cpp:131 msgid "This button exits the program" msgstr "Tímto tlačítkem se program ukončuje" #. i18n: file: src/kmetronomeviewbase.ui:142 #. i18n: ectx: property (text), widget (KPushButton, m_exitbtn) #: po/rc.cpp:134 msgid "Quit" msgstr "Ukončit" #. i18n: file: src/kmetronomeviewbase.ui:173 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_measureLCD) #: po/rc.cpp:137 msgid "Number of measures (bars) and beats played from beginning" msgstr "Počet taktů a dob přehrávaných od začátku" #. i18n: file: src/kmetronomeviewbase.ui:210 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_pattern) #: po/rc.cpp:143 msgid "" "This is the pattern definition to play, either \"Automatic\" or a custom " "defined one." msgstr "" "Toto je vymezení vzoru pro hru, stanoveného buď \"Automaticky\", nebo " "uživatelsky." #. i18n: file: src/kmetronomeviewbase.ui:217 #. i18n: ectx: property (text), widget (QLabel, lblBeats) #: po/rc.cpp:146 msgid "Beats/Bar:" msgstr "Doby/Takt:" #. i18n: file: src/kmetronomeviewbase.ui:238 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_beatsBar) #: po/rc.cpp:149 msgid "" "This is the number of beats for each measure (bar).\n" "Values are from 1 to 32.\n" "It is the numerator of the time signature specification." msgstr "" "Toto je počet dob pro každý takt\n" "Hodnoty jsou od 1 do 32\n" "Je to čitatel zadání taktového označení." #. i18n: file: src/kmetronomeviewbase.ui:254 #. i18n: ectx: property (text), widget (QLabel, lblFigure) #: po/rc.cpp:154 msgid "Beat Length:" msgstr "Délka doby:" #. i18n: file: src/kmetronomeviewbase.ui:272 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_figure) #: po/rc.cpp:157 msgid "" "This is the beat length.\n" "Values mean 1, 2, 4, 8, 16, 32 and 64.\n" "It is the denominator in the time signature specification." msgstr "" "Toto je délka doby.\n" "Hodnoty znamenají 1, 2, 4, 8, 16, 32 a 64.\n" "Je to jmenovatel zadání taktového označení." #. i18n: file: src/kmetronomeviewbase.ui:356 #. i18n: ectx: property (text), widget (QLabel, label_1) #: po/rc.cpp:183 msgctxt "weak notes MIDI velocity" msgid "Weak" msgstr "Slabý" #. i18n: file: src/kmetronomeviewbase.ui:369 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:186 msgctxt "strong notes MIDI velocity" msgid "Strong" msgstr "Silný" #. i18n: file: src/kmetronomeviewbase.ui:382 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:189 msgctxt "audio volume level" msgid "Volume" msgstr "Hlasitost" #. i18n: file: src/kmetronomeviewbase.ui:395 #. i18n: ectx: property (text), widget (QLabel, label_4) #: po/rc.cpp:192 msgctxt "audio panning" msgid "Pan" msgstr "Vyváženost" #. i18n: file: src/kmetronomeviewbase.ui:414 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial1) #: po/rc.cpp:195 msgid "" "This is the velocity of the weak notes in the automatic rhythm pattern (all " "of them, except the first one)" msgstr "" "Toto je rychlost slabých not v automatickém rytmickém vzoru (všechny kromě " "první)" #. i18n: file: src/kmetronomeviewbase.ui:439 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial2) #: po/rc.cpp:198 msgid "" "This is the velocity of the strong note in the automatic rhythm pattern (the " "first one)" msgstr "Toto je rychlost silné noty v automatickém rytmickém vzoru (první)" #. i18n: file: src/kmetronomeviewbase.ui:464 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial3) #: po/rc.cpp:201 msgid "This is the MIDI volume control (CC7)" msgstr "Toto je ovládání hlasitosti MIDI (CC7)" #. i18n: file: src/kmetronomeviewbase.ui:489 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial4) #: po/rc.cpp:204 msgid "This is the MIDI pan control (CC10)" msgstr "Toto je ovládání vyrovnání MIDI (CC10)" #. i18n: file: src/kmetronomeviewbase.ui:512 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_air) #: po/rc.cpp:207 msgid "This is the musical name of the tempo value" msgstr "Toto je hudební název pro hodnotu tempa" #. i18n: file: src/kmetronomeviewbase.ui:531 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_tempoLCD) #: po/rc.cpp:210 msgid "The current tempo value" msgstr "Nynější hodnota pro tempo" #. i18n: file: src/kmetronomeviewbase.ui:554 #. i18n: ectx: property (text), widget (QLabel, textLabel1_2) #: po/rc.cpp:213 msgid "Tempo (in quarters per minute)" msgstr "Tempo (ve čtvrtinách za minutu)" #. i18n: file: src/kmetronomeviewbase.ui:580 #. i18n: ectx: property (whatsThis), widget (QSlider, m_tempo) #: po/rc.cpp:216 msgid "" "This slider changes the tempo, or speed of the rhythm.\n" "Values are 25 to 250 quarters per minute (Maelzel Metronome units)." msgstr "" "Posuvníkem se mění tempo, nebo rychlost rytmu.\n" "Hodnoty jsou 25 až 250 čtvrtin za minutu. (jednotky metronomu Mälzel)." #. i18n: file: src/kmetropreferencesbase.ui:37 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_autoconn) #: po/rc.cpp:220 msgid "" "If this checkbox is activated, the the program will remember the connections " "for the input and output ports, and try to reconnect them at program startup." msgstr "" "Pokud je zaškrtnuto toto políčko, bude si program pamatovat spojení " "vstupních a výstupních přípojek a pokusí se je při spuštění programu znovu " "spojit." #. i18n: file: src/kmetropreferencesbase.ui:40 #. i18n: ectx: property (text), widget (QCheckBox, m_autoconn) #: po/rc.cpp:223 msgid "Automatic ports connection on startup" msgstr "Automatické spojení přípojek při spuštění" #. i18n: file: src/kmetropreferencesbase.ui:61 #. i18n: ectx: property (text), widget (QLabel, lblInputPort) #: po/rc.cpp:226 msgid "Optional input port conn:" msgstr "Volitelné spojení vstupní přípojky:" #. i18n: file: src/kmetropreferencesbase.ui:83 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_in_connection) #: po/rc.cpp:229 msgid "This is the optional connection for the MIDI IN port." msgstr "Toto je volitelné spojení pro vstupní přípojku MIDI." #. i18n: file: src/kmetropreferencesbase.ui:102 #. i18n: ectx: property (text), widget (QLabel, lblOutputPort) #: po/rc.cpp:232 msgid "Output port connection:" msgstr "Spojení výstupní přípojky:" #. i18n: file: src/kmetropreferencesbase.ui:124 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_out_connection) #: po/rc.cpp:235 msgid "This is the mandatory connection for the MIDI OUT port" msgstr "Toto je povinné spojení pro výstupní přípojku MIDI" #. i18n: file: src/kmetropreferencesbase.ui:131 #. i18n: ectx: property (text), widget (QLabel, lblInstrument) #: po/rc.cpp:238 msgid "Output instrument:" msgstr "Výstupní nástroj:" #. i18n: file: src/kmetropreferencesbase.ui:147 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_instrument) #: po/rc.cpp:241 msgid "This is the definition of the instrument connected to the MIDI OUT port" msgstr "Toto je vymezení nástroje spojeného s výstupní přípojkou MIDI" #. i18n: file: src/kmetropreferencesbase.ui:158 #. i18n: ectx: property (text), widget (QLabel, lblBank) #: po/rc.cpp:244 msgid "Bank:" msgstr "Banka:" #. i18n: file: src/kmetropreferencesbase.ui:171 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_bank) #: po/rc.cpp:247 msgid "This is the Bank of the selected MIDI program" msgstr "Toto je banka vybraného programu MIDI" #. i18n: file: src/kmetropreferencesbase.ui:190 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: po/rc.cpp:250 msgid "Channel:" msgstr "Kanál:" #. i18n: file: src/kmetropreferencesbase.ui:207 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_channel) #: po/rc.cpp:253 msgid "" "This is the MIDI channel, between 1 and 16. \n" "General MIDI uses the channel 10 for percussion sounds." msgstr "" "Toto je kanál MIDI, mezi 1 a 16.\n" "Obecné MIDI používá pro zvuky bicích nástrojů kanál 10." #. i18n: file: src/kmetropreferencesbase.ui:235 #. i18n: ectx: property (text), widget (QLabel, textLabel3) #: po/rc.cpp:257 msgid "Program:" msgstr "Program:" #. i18n: file: src/kmetropreferencesbase.ui:257 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_program) #: po/rc.cpp:260 msgid "This is the MIDI program" msgstr "Toto je program MIDI" #. i18n: file: src/kmetropreferencesbase.ui:270 #. i18n: ectx: property (text), widget (QLabel, textLabel7) #: po/rc.cpp:263 msgid "Resolution:" msgstr "Rozlišení:" #. i18n: file: src/kmetropreferencesbase.ui:286 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_resolution) #: po/rc.cpp:266 msgid "This is the MIDI time resolution (number of ticks in a quarter note)" msgstr "Toto je rozlišení času MIDI (počet tiknutí ve čtvrťové notě)" #. i18n: file: src/kmetropreferencesbase.ui:305 #. i18n: ectx: property (text), widget (QLabel, textLabel4) #: po/rc.cpp:269 msgid "Weak note:" msgstr "Slabá nota:" #. i18n: file: src/kmetropreferencesbase.ui:327 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_weak_note) #: po/rc.cpp:272 msgid "This is the sound of the weak notes for the automatic patterns" msgstr "Toto je zvuk slabých not pro automatické vzory" #. i18n: file: src/kmetropreferencesbase.ui:340 #. i18n: ectx: property (text), widget (QLabel, textLabel8) #: po/rc.cpp:275 msgid "Note duration:" msgstr "Doba trvání noty:" #. i18n: file: src/kmetropreferencesbase.ui:356 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_duration) #: po/rc.cpp:278 msgid "This is the note duration in ticks, when using NOTE OFF events" msgstr "" "Toto je doba trvání noty v tiknutích, když se používají události NOTA VYPNUTA" #. i18n: file: src/kmetropreferencesbase.ui:378 #. i18n: ectx: property (text), widget (QLabel, textLabel5) #: po/rc.cpp:281 msgid "Strong note:" msgstr "Silná nota:" #. i18n: file: src/kmetropreferencesbase.ui:400 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_strong_note) #: po/rc.cpp:284 msgid "This is the sound of the strong notes for the automatic patterns" msgstr "Toto je zvuk silných not pro automatické vzory" #. i18n: file: src/kmetropreferencesbase.ui:411 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:287 msgid "Optional setting to send NOTE OFF events" msgstr "Volitelné nastavení pro poslání událostí NOTA VYPNUTA" #. i18n: file: src/kmetropreferencesbase.ui:414 #. i18n: ectx: property (text), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:290 msgid "Send NOTE OFF events" msgstr "Poslat události NOTA VYPNUTA" #. i18n: file: src/kmetropreferencesbase.ui:440 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:293 msgid "If this option is activated, the knobs are drawn using a custom style" msgstr "" "Pokud je zapnuta tato volba, otočné knoflíky se vykreslují za použití " "vlastního stylu" #. i18n: file: src/kmetropreferencesbase.ui:443 #. i18n: ectx: property (text), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:296 msgid "Styled Knobs" msgstr "Stylizované knoflíky" #: po/rc.cpp:297 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Pavel Fric" #: po/rc.cpp:298 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "fripohled.blogspot.com" #~ msgid "100" #~ msgstr "100" #~ msgid "Config" #~ msgstr "Nastavení" #~ msgid "Exit" #~ msgstr "Ukončit" #~ msgid "Rhythm figure:" #~ msgstr "Rytmická figura:" #~ msgid "" #~ "\n" #~ "\n" #~ "

This is the aire control to change the tempo value " #~ "using musical names

" #~ msgstr "" #~ "\n" #~ "\n" #~ "

Toto je ovládáníaire pro změnu hodnoty tempa pomocí " #~ "hudebních názvů

" #~ msgid "&OK" #~ msgstr "&OK" #~ msgid "&Cancel" #~ msgstr "&Zrušit" #~ msgid "Measure : Beat" #~ msgstr "Compás : Parte" kmetronome-0.10.1/po/kmetronome.pot0000644000175000001440000004714711760763113016345 0ustar pedrousers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "atid=731542&group_id=134956\n" "POT-Creation-Date: 2012-05-28 21:56+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/drumgrid.cpp:51 msgid "Pattern Editor" msgstr "" #: src/drumgrid.cpp:67 msgid "Cut" msgstr "" #: src/drumgrid.cpp:68 msgid "Copy" msgstr "" #: src/drumgrid.cpp:69 msgid "Paste" msgstr "" #: src/drumgrid.cpp:278 msgid "Do you want to remove the current pattern?" msgstr "" #: src/drumgrid.cpp:279 msgid "Remove Pattern" msgstr "" #: src/drumgrid.cpp:333 msgctxt "name of an automatically created pattern" msgid "Sample Pattern" msgstr "" #: src/drumgrid.cpp:364 msgid "Insert Pattern Row" msgstr "" #: src/drumgrid.cpp:365 msgid "Drum Key:" msgstr "" #: src/drumgrid.cpp:386 msgid "Please select one, and only one row" msgstr "" #: src/drumgrid.cpp:388 msgid "Do you want to remove the selected pattern row?" msgstr "" #: src/drumgrid.cpp:389 msgid "Remove Row" msgstr "" #: src/kmetronome.cpp:87 msgid "" "Fatal error from the ALSA sequencer. This usually happens when the kernel " "doesn't have ALSA support, or the device node (/dev/snd/seq) doesn't exists, " "or the kernel module (snd_seq) is not loaded. Please check your ALSA/MIDI " "configuration. Returned error was: %1" msgstr "" #: src/kmetronome.cpp:93 msgid "Error" msgstr "" #: src/kmetronome.cpp:114 msgid "Play/Stop" msgstr "" #: src/kmetronome.cpp:118 msgid "Show Action Buttons" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:126 #. i18n: ectx: property (text), widget (KPushButton, m_patternbtn) #: src/kmetronome.cpp:125 src/kmetronome.cpp:527 po/rc.cpp:128 msgid "Patterns" msgstr "" #: src/kmetronome.cpp:130 src/kmetronome.cpp:498 msgid "Import Patterns" msgstr "" #: src/kmetronome.cpp:135 src/kmetronome.cpp:511 msgid "Export Patterns" msgstr "" #: src/kmetronome.cpp:497 src/kmetronome.cpp:510 msgid "*.pat|Pattern Files (*.pat)" msgstr "" #: src/kmetronomeview.cpp:145 msgid "Tempo" msgstr "" #: src/kmetronomeview.cpp:145 msgid "Enter new Tempo:" msgstr "" #: src/kmetronomeview.cpp:179 msgctxt "the pattern is created automatically" msgid "Automatic" msgstr "" #: src/kmetropreferences.cpp:29 msgid "Preferences" msgstr "" #: src/main.cpp:29 msgid "KDE MIDI metronome using ALSA sequencer" msgstr "" #: src/main.cpp:41 msgid "KMetronome" msgstr "" #: src/main.cpp:43 msgid "(C) 2005-2012 Pedro Lopez-Cabanillas" msgstr "" #: src/main.cpp:45 msgid "Pedro Lopez-Cabanillas" msgstr "" #: src/sequenceradapter.cpp:65 msgid "No connection" msgstr "" #. i18n: file: src/drumgrid.ui:46 #. i18n: ectx: property (text), widget (QLabel, patternLabel) #. i18n: file: src/kmetronomeviewbase.ui:191 #. i18n: ectx: property (text), widget (QLabel, lblPattern) #: po/rc.cpp:3 po/rc.cpp:140 msgid "Pattern:" msgstr "" #. i18n: file: src/drumgrid.ui:62 #. i18n: ectx: property (whatsThis), widget (KComboBox, patternCombo) #: po/rc.cpp:6 msgid "" "Type a new name and press the \"Save\" button to create a new pattern, or " "choose an existing pattern from the drop-down list." msgstr "" #. i18n: file: src/drumgrid.ui:72 #. i18n: ectx: property (whatsThis), widget (KPushButton, saveButton) #: po/rc.cpp:9 msgid "This button stores the current pattern definition with the name given" msgstr "" #. i18n: file: src/drumgrid.ui:75 #. i18n: ectx: property (text), widget (KPushButton, saveButton) #: po/rc.cpp:12 msgid "Save" msgstr "" #. i18n: file: src/drumgrid.ui:82 #. i18n: ectx: property (whatsThis), widget (KPushButton, deleteButton) #: po/rc.cpp:15 msgid "This button deletes the current pattern definition" msgstr "" #. i18n: file: src/drumgrid.ui:85 #. i18n: ectx: property (text), widget (KPushButton, deleteButton) #: po/rc.cpp:18 msgid "Delete" msgstr "" #. i18n: file: src/drumgrid.ui:104 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:21 msgid "Rows:" msgstr "" #. i18n: file: src/drumgrid.ui:111 #. i18n: ectx: property (whatsThis), widget (KPushButton, addButton) #: po/rc.cpp:24 msgid "" "Use this button to add new rows (sounds) to the current pattern definition" msgstr "" #. i18n: file: src/drumgrid.ui:114 #. i18n: ectx: property (text), widget (KPushButton, addButton) #: po/rc.cpp:27 msgid "Add" msgstr "" #. i18n: file: src/drumgrid.ui:121 #. i18n: ectx: property (whatsThis), widget (KPushButton, removeButton) #: po/rc.cpp:30 msgid "" "Use this button to remove the selected row (sound) from the pattern " "definition" msgstr "" #. i18n: file: src/drumgrid.ui:124 #. i18n: ectx: property (text), widget (KPushButton, removeButton) #: po/rc.cpp:33 msgid "Remove" msgstr "" #. i18n: file: src/drumgrid.ui:144 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:36 msgid "Beats:" msgstr "" #. i18n: file: src/drumgrid.ui:151 #. i18n: ectx: property (whatsThis), widget (QCheckBox, chkselbeat) #: po/rc.cpp:39 msgid "Highligh the grid columns while playing" msgstr "" #. i18n: file: src/drumgrid.ui:155 #. i18n: ectx: property (text), widget (QCheckBox, chkselbeat) #: po/rc.cpp:42 msgid "" "Highlight\n" "Columns" msgstr "" #. i18n: file: src/drumgrid.ui:168 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, beatNumber) #: po/rc.cpp:46 msgid "This is the current beat number" msgstr "" #. i18n: file: src/drumgrid.ui:187 #. i18n: ectx: property (whatsThis), widget (QTableView, tableView) #: po/rc.cpp:49 msgid "This is the pattern table, beats as columns and sounds as rows" msgstr "" #. i18n: file: src/drumgrid.ui:203 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, gridColumns) #: po/rc.cpp:52 msgid "Number of beats per measure (bar)" msgstr "" #. i18n: file: src/drumgrid.ui:219 #. i18n: ectx: property (whatsThis), widget (KComboBox, figureCombo) #: po/rc.cpp:55 msgid "This is the beat length for the pattern column." msgstr "" #. i18n: file: src/drumgrid.ui:229 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:282 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:58 po/rc.cpp:162 msgid "Whole" msgstr "" #. i18n: file: src/drumgrid.ui:238 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:291 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:61 po/rc.cpp:165 msgid "Half" msgstr "" #. i18n: file: src/drumgrid.ui:247 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:300 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:64 po/rc.cpp:168 msgid "Quarter" msgstr "" #. i18n: file: src/drumgrid.ui:256 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:309 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:67 po/rc.cpp:171 msgid "Eighth" msgstr "" #. i18n: file: src/drumgrid.ui:265 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:318 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:70 po/rc.cpp:174 msgid "Sixteenth" msgstr "" #. i18n: file: src/drumgrid.ui:274 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:327 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:73 po/rc.cpp:177 msgid "Thirty-Second" msgstr "" #. i18n: file: src/drumgrid.ui:283 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:336 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:76 po/rc.cpp:180 msgid "Sixty-Fourth" msgstr "" #. i18n: file: src/drumgrid.ui:295 #. i18n: ectx: property (whatsThis), widget (QPushButton, startButton) #: po/rc.cpp:79 msgid "This button starts playing the current pattern" msgstr "" #. i18n: file: src/drumgrid.ui:298 #. i18n: ectx: property (text), widget (QPushButton, startButton) #. i18n: file: src/kmetronomeviewbase.ui:81 #. i18n: ectx: property (text), widget (KPushButton, m_playbtn) #: po/rc.cpp:82 po/rc.cpp:110 msgid "Play" msgstr "" #. i18n: file: src/drumgrid.ui:311 #. i18n: ectx: property (whatsThis), widget (QPushButton, stopButton) #: po/rc.cpp:85 msgid "This button stops the playback" msgstr "" #. i18n: file: src/drumgrid.ui:314 #. i18n: ectx: property (text), widget (QPushButton, stopButton) #. i18n: file: src/kmetronomeviewbase.ui:100 #. i18n: ectx: property (text), widget (KPushButton, m_stopbtn) #: po/rc.cpp:88 po/rc.cpp:116 msgid "Stop" msgstr "" #. i18n: file: src/drumgrid.ui:330 #. i18n: ectx: property (whatsThis), widget (QLabel, label_3) #: po/rc.cpp:91 msgid "QPM: quarters per minute" msgstr "" #. i18n: file: src/drumgrid.ui:333 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:94 msgctxt "Quarters per Minute" msgid "QPM:" msgstr "" #. i18n: file: src/drumgrid.ui:343 #. i18n: ectx: property (whatsThis), widget (QLabel, tempoLabel) #: po/rc.cpp:97 msgid "This is the current tempo in quarters per minute" msgstr "" #. i18n: file: src/drumgrid.ui:353 #. i18n: ectx: property (whatsThis), widget (QSlider, tempoSlider) #: po/rc.cpp:101 msgid "Drag the slider handle to change the tempo, in quarters per minute" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:58 #. i18n: ectx: property (windowTitle), widget (QWidget, KmetronomeViewBase) #: po/rc.cpp:104 msgid "MIDI Metronome" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:78 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_playbtn) #: po/rc.cpp:107 msgid "This button starts playing the rhythm pattern" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:97 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_stopbtn) #: po/rc.cpp:113 msgid "This button stops playing the rhythm pattern" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:113 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_configbtn) #: po/rc.cpp:119 msgid "This button opens the configuration window" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:116 #. i18n: ectx: property (text), widget (KPushButton, m_configbtn) #: po/rc.cpp:122 msgid "Settings" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:123 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_patternbtn) #: po/rc.cpp:125 msgid "This button opens the pattern editor" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:139 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_exitbtn) #: po/rc.cpp:131 msgid "This button exits the program" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:142 #. i18n: ectx: property (text), widget (KPushButton, m_exitbtn) #: po/rc.cpp:134 msgid "Quit" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:173 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_measureLCD) #: po/rc.cpp:137 msgid "Number of measures (bars) and beats played from beginning" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:210 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_pattern) #: po/rc.cpp:143 msgid "" "This is the pattern definition to play, either \"Automatic\" or a custom " "defined one." msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:217 #. i18n: ectx: property (text), widget (QLabel, lblBeats) #: po/rc.cpp:146 msgid "Beats/Bar:" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:238 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_beatsBar) #: po/rc.cpp:149 msgid "" "This is the number of beats for each measure (bar).\n" "Values are from 1 to 32.\n" "It is the numerator of the time signature specification." msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:254 #. i18n: ectx: property (text), widget (QLabel, lblFigure) #: po/rc.cpp:154 msgid "Beat Length:" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:272 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_figure) #: po/rc.cpp:157 msgid "" "This is the beat length.\n" "Values mean 1, 2, 4, 8, 16, 32 and 64.\n" "It is the denominator in the time signature specification." msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:356 #. i18n: ectx: property (text), widget (QLabel, label_1) #: po/rc.cpp:183 msgctxt "weak notes MIDI velocity" msgid "Weak" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:369 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:186 msgctxt "strong notes MIDI velocity" msgid "Strong" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:382 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:189 msgctxt "audio volume level" msgid "Volume" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:395 #. i18n: ectx: property (text), widget (QLabel, label_4) #: po/rc.cpp:192 msgctxt "audio panning" msgid "Pan" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:414 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial1) #: po/rc.cpp:195 msgid "" "This is the velocity of the weak notes in the automatic rhythm pattern (all " "of them, except the first one)" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:439 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial2) #: po/rc.cpp:198 msgid "" "This is the velocity of the strong note in the automatic rhythm pattern (the " "first one)" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:464 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial3) #: po/rc.cpp:201 msgid "This is the MIDI volume control (CC7)" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:489 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial4) #: po/rc.cpp:204 msgid "This is the MIDI pan control (CC10)" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:512 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_air) #: po/rc.cpp:207 msgid "This is the musical name of the tempo value" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:531 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_tempoLCD) #: po/rc.cpp:210 msgid "The current tempo value" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:554 #. i18n: ectx: property (text), widget (QLabel, textLabel1_2) #: po/rc.cpp:213 msgid "Tempo (in quarters per minute)" msgstr "" #. i18n: file: src/kmetronomeviewbase.ui:580 #. i18n: ectx: property (whatsThis), widget (QSlider, m_tempo) #: po/rc.cpp:216 msgid "" "This slider changes the tempo, or speed of the rhythm.\n" "Values are 25 to 250 quarters per minute (Maelzel Metronome units)." msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:37 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_autoconn) #: po/rc.cpp:220 msgid "" "If this checkbox is activated, the the program will remember the connections " "for the input and output ports, and try to reconnect them at program startup." msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:40 #. i18n: ectx: property (text), widget (QCheckBox, m_autoconn) #: po/rc.cpp:223 msgid "Automatic ports connection on startup" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:61 #. i18n: ectx: property (text), widget (QLabel, lblInputPort) #: po/rc.cpp:226 msgid "Optional input port conn:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:83 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_in_connection) #: po/rc.cpp:229 msgid "This is the optional connection for the MIDI IN port." msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:102 #. i18n: ectx: property (text), widget (QLabel, lblOutputPort) #: po/rc.cpp:232 msgid "Output port connection:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:124 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_out_connection) #: po/rc.cpp:235 msgid "This is the mandatory connection for the MIDI OUT port" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:131 #. i18n: ectx: property (text), widget (QLabel, lblInstrument) #: po/rc.cpp:238 msgid "Output instrument:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:147 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_instrument) #: po/rc.cpp:241 msgid "This is the definition of the instrument connected to the MIDI OUT port" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:158 #. i18n: ectx: property (text), widget (QLabel, lblBank) #: po/rc.cpp:244 msgid "Bank:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:171 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_bank) #: po/rc.cpp:247 msgid "This is the Bank of the selected MIDI program" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:190 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: po/rc.cpp:250 msgid "Channel:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:207 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_channel) #: po/rc.cpp:253 msgid "" "This is the MIDI channel, between 1 and 16. \n" "General MIDI uses the channel 10 for percussion sounds." msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:235 #. i18n: ectx: property (text), widget (QLabel, textLabel3) #: po/rc.cpp:257 msgid "Program:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:257 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_program) #: po/rc.cpp:260 msgid "This is the MIDI program" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:270 #. i18n: ectx: property (text), widget (QLabel, textLabel7) #: po/rc.cpp:263 msgid "Resolution:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:286 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_resolution) #: po/rc.cpp:266 msgid "This is the MIDI time resolution (number of ticks in a quarter note)" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:305 #. i18n: ectx: property (text), widget (QLabel, textLabel4) #: po/rc.cpp:269 msgid "Weak note:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:327 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_weak_note) #: po/rc.cpp:272 msgid "This is the sound of the weak notes for the automatic patterns" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:340 #. i18n: ectx: property (text), widget (QLabel, textLabel8) #: po/rc.cpp:275 msgid "Note duration:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:356 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_duration) #: po/rc.cpp:278 msgid "This is the note duration in ticks, when using NOTE OFF events" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:378 #. i18n: ectx: property (text), widget (QLabel, textLabel5) #: po/rc.cpp:281 msgid "Strong note:" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:400 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_strong_note) #: po/rc.cpp:284 msgid "This is the sound of the strong notes for the automatic patterns" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:411 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:287 msgid "Optional setting to send NOTE OFF events" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:414 #. i18n: ectx: property (text), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:290 msgid "Send NOTE OFF events" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:440 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:293 msgid "If this option is activated, the knobs are drawn using a custom style" msgstr "" #. i18n: file: src/kmetropreferencesbase.ui:443 #. i18n: ectx: property (text), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:296 msgid "Styled Knobs" msgstr "" #: po/rc.cpp:297 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: po/rc.cpp:298 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kmetronome-0.10.1/po/de.po0000644000175000001440000006363511760763113014371 0ustar pedrousers# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Rene Landert , 2010. msgid "" msgstr "" "Project-Id-Version: kmetronome\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "atid=731542&group_id=134956\n" "POT-Creation-Date: 2012-05-28 21:56+0200\n" "PO-Revision-Date: 2010-06-03 19:13+0200\n" "Last-Translator: Rene Landert \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: src/drumgrid.cpp:51 msgid "Pattern Editor" msgstr "Editor für Rhythmusschema" #: src/drumgrid.cpp:67 msgid "Cut" msgstr "" #: src/drumgrid.cpp:68 msgid "Copy" msgstr "" #: src/drumgrid.cpp:69 #, fuzzy msgid "Paste" msgstr "Rhythmusschema" #: src/drumgrid.cpp:278 msgid "Do you want to remove the current pattern?" msgstr "Möchten Sie das aktuelle Rhythmusschema entfernen?" #: src/drumgrid.cpp:279 msgid "Remove Pattern" msgstr "Rhythmusschema entfernen" #: src/drumgrid.cpp:333 msgctxt "name of an automatically created pattern" msgid "Sample Pattern" msgstr "Muster für Rhythmusschema" #: src/drumgrid.cpp:364 msgid "Insert Pattern Row" msgstr "Zeile in Rhythmusschema einfügen" #: src/drumgrid.cpp:365 msgid "Drum Key:" msgstr "Schlagzeug Taste:" #: src/drumgrid.cpp:386 msgid "Please select one, and only one row" msgstr "Bitte wählen Sie eine, und nur eine Zeile aus" #: src/drumgrid.cpp:388 msgid "Do you want to remove the selected pattern row?" msgstr "Möchten Sie die ausgewählte Zeile des Rhythmusschemas entfernen?" #: src/drumgrid.cpp:389 msgid "Remove Row" msgstr "Zeile entfernen" #: src/kmetronome.cpp:87 msgid "" "Fatal error from the ALSA sequencer. This usually happens when the kernel " "doesn't have ALSA support, or the device node (/dev/snd/seq) doesn't exists, " "or the kernel module (snd_seq) is not loaded. Please check your ALSA/MIDI " "configuration. Returned error was: %1" msgstr "" "Schwerer Fehler im ALSA-Sequenzer. Dies geschieht meist, wenn der Kernel " "kein ALSA unterstützt, oder das Gerät (/dev/snd/seq) nicht existiert, oder " "das Kernel-Modul (snd_seq) nicht geladen ist. Bitte überprüfen Sie Ihre ALSA/" "MIDI Konfiguration. Zurückgegebener Fehler war: %1" #: src/kmetronome.cpp:93 msgid "Error" msgstr "Fehler" #: src/kmetronome.cpp:114 msgid "Play/Stop" msgstr "Wiedergabe/Stopp" #: src/kmetronome.cpp:118 msgid "Show Action Buttons" msgstr "Aktionsknopf anzeigen" #. i18n: file: src/kmetronomeviewbase.ui:126 #. i18n: ectx: property (text), widget (KPushButton, m_patternbtn) #: src/kmetronome.cpp:125 src/kmetronome.cpp:527 po/rc.cpp:128 msgid "Patterns" msgstr "Rhythmusschema" #: src/kmetronome.cpp:130 src/kmetronome.cpp:498 msgid "Import Patterns" msgstr "Rhythmusschema importieren" #: src/kmetronome.cpp:135 src/kmetronome.cpp:511 msgid "Export Patterns" msgstr "Rhythmusschema exportieren" #: src/kmetronome.cpp:497 src/kmetronome.cpp:510 msgid "*.pat|Pattern Files (*.pat)" msgstr "*.pat|Rhythmusschema Dateien (*.pat)" #: src/kmetronomeview.cpp:145 msgid "Tempo" msgstr "Tempo" #: src/kmetronomeview.cpp:145 msgid "Enter new Tempo:" msgstr "Neues Tempo eingeben:" #: src/kmetronomeview.cpp:179 msgctxt "the pattern is created automatically" msgid "Automatic" msgstr "Automatisch" #: src/kmetropreferences.cpp:29 msgid "Preferences" msgstr "Einstellungen" #: src/main.cpp:29 msgid "KDE MIDI metronome using ALSA sequencer" msgstr "KDE MIDI Metronom mit dem ALSA Sequenzer" #: src/main.cpp:41 msgid "KMetronome" msgstr "KMetronome" #: src/main.cpp:43 msgid "(C) 2005-2012 Pedro Lopez-Cabanillas" msgstr "(C) 2005-2012 Pedro Lopez-Cabanillas" #: src/main.cpp:45 msgid "Pedro Lopez-Cabanillas" msgstr "Pedro Lopez-Cabanillas" #: src/sequenceradapter.cpp:65 msgid "No connection" msgstr "Keine Verbindung" #. i18n: file: src/drumgrid.ui:46 #. i18n: ectx: property (text), widget (QLabel, patternLabel) #. i18n: file: src/kmetronomeviewbase.ui:191 #. i18n: ectx: property (text), widget (QLabel, lblPattern) #: po/rc.cpp:3 po/rc.cpp:140 msgid "Pattern:" msgstr "Rhythmusschema:" #. i18n: file: src/drumgrid.ui:62 #. i18n: ectx: property (whatsThis), widget (KComboBox, patternCombo) #: po/rc.cpp:6 msgid "" "Type a new name and press the \"Save\" button to create a new pattern, or " "choose an existing pattern from the drop-down list." msgstr "" "Geben Sie einen neuen Namen ein und drücken Sie den Knopf \"Speichern\", um " "ein neues Rhythmusschemas zu erstellen, oder wählen Sie ein vorhandenes " "Schema aus der Aufklappliste." #. i18n: file: src/drumgrid.ui:72 #. i18n: ectx: property (whatsThis), widget (KPushButton, saveButton) #: po/rc.cpp:9 msgid "This button stores the current pattern definition with the name given" msgstr "" "Dieser Knopf speichert die aktuelle Definition des Rhythmusschemas mit dem " "gegebenen Namen" #. i18n: file: src/drumgrid.ui:75 #. i18n: ectx: property (text), widget (KPushButton, saveButton) #: po/rc.cpp:12 msgid "Save" msgstr "Speichern" #. i18n: file: src/drumgrid.ui:82 #. i18n: ectx: property (whatsThis), widget (KPushButton, deleteButton) #: po/rc.cpp:15 msgid "This button deletes the current pattern definition" msgstr "Dieser Knopf entfernt die aktuelle Definition des Rhythmusschemas" #. i18n: file: src/drumgrid.ui:85 #. i18n: ectx: property (text), widget (KPushButton, deleteButton) #: po/rc.cpp:18 msgid "Delete" msgstr "Entfernen" #. i18n: file: src/drumgrid.ui:104 #. i18n: ectx: property (text), widget (QLabel, label) #: po/rc.cpp:21 msgid "Rows:" msgstr "Zeilen:" #. i18n: file: src/drumgrid.ui:111 #. i18n: ectx: property (whatsThis), widget (KPushButton, addButton) #: po/rc.cpp:24 msgid "" "Use this button to add new rows (sounds) to the current pattern definition" msgstr "" "Dieser Knopf fügt der aktuellen Definition des Rhythmusschemas neue Zeilen " "(Töne) hinzu" #. i18n: file: src/drumgrid.ui:114 #. i18n: ectx: property (text), widget (KPushButton, addButton) #: po/rc.cpp:27 msgid "Add" msgstr "Hinzufügen" #. i18n: file: src/drumgrid.ui:121 #. i18n: ectx: property (whatsThis), widget (KPushButton, removeButton) #: po/rc.cpp:30 msgid "" "Use this button to remove the selected row (sound) from the pattern " "definition" msgstr "" "Dieser Knopf entfernt die ausgewählte Zeile (Töne) aus der Definition des " "Rhythmusschemas" #. i18n: file: src/drumgrid.ui:124 #. i18n: ectx: property (text), widget (KPushButton, removeButton) #: po/rc.cpp:33 msgid "Remove" msgstr "Entfernen" #. i18n: file: src/drumgrid.ui:144 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:36 msgid "Beats:" msgstr "Taktzahl:" #. i18n: file: src/drumgrid.ui:151 #. i18n: ectx: property (whatsThis), widget (QCheckBox, chkselbeat) #: po/rc.cpp:39 msgid "Highligh the grid columns while playing" msgstr "Markiere die Gitterspalten während der Wiedergabe" #. i18n: file: src/drumgrid.ui:155 #. i18n: ectx: property (text), widget (QCheckBox, chkselbeat) #: po/rc.cpp:42 msgid "" "Highlight\n" "Columns" msgstr "" "Markiere\n" "Spalten" #. i18n: file: src/drumgrid.ui:168 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, beatNumber) #: po/rc.cpp:46 msgid "This is the current beat number" msgstr "Dies ist die aktuelle Anzahl Grundschläge" #. i18n: file: src/drumgrid.ui:187 #. i18n: ectx: property (whatsThis), widget (QTableView, tableView) #: po/rc.cpp:49 msgid "This is the pattern table, beats as columns and sounds as rows" msgstr "" "Dies ist die Tabelle des Rhythmusschemas, Grundschläge als Spalten und Töne " "als Zeilen" #. i18n: file: src/drumgrid.ui:203 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, gridColumns) #: po/rc.cpp:52 msgid "Number of beats per measure (bar)" msgstr "Anzahl Grundschläge pro Takt" #. i18n: file: src/drumgrid.ui:219 #. i18n: ectx: property (whatsThis), widget (KComboBox, figureCombo) #: po/rc.cpp:55 msgid "This is the beat length for the pattern column." msgstr "" "Dies ist die Dauer des Grundschlags für die Spalte des Rhythmusschemas." #. i18n: file: src/drumgrid.ui:229 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:282 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:58 po/rc.cpp:162 msgid "Whole" msgstr "Ganze" #. i18n: file: src/drumgrid.ui:238 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:291 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:61 po/rc.cpp:165 msgid "Half" msgstr "Halbe" #. i18n: file: src/drumgrid.ui:247 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:300 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:64 po/rc.cpp:168 msgid "Quarter" msgstr "Viertel" #. i18n: file: src/drumgrid.ui:256 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:309 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:67 po/rc.cpp:171 msgid "Eighth" msgstr "Achtel" #. i18n: file: src/drumgrid.ui:265 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:318 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:70 po/rc.cpp:174 msgid "Sixteenth" msgstr "Sechzehntel" #. i18n: file: src/drumgrid.ui:274 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:327 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:73 po/rc.cpp:177 msgid "Thirty-Second" msgstr "Zweiundreissigstel" #. i18n: file: src/drumgrid.ui:283 #. i18n: ectx: property (text), item, widget (KComboBox, figureCombo) #. i18n: file: src/kmetronomeviewbase.ui:336 #. i18n: ectx: property (text), item, widget (KComboBox, m_figure) #: po/rc.cpp:76 po/rc.cpp:180 msgid "Sixty-Fourth" msgstr "Vierundsechzigstel" #. i18n: file: src/drumgrid.ui:295 #. i18n: ectx: property (whatsThis), widget (QPushButton, startButton) #: po/rc.cpp:79 msgid "This button starts playing the current pattern" msgstr "Dieser Knopf startet die Wiedergabe des Rhythmusschemas" #. i18n: file: src/drumgrid.ui:298 #. i18n: ectx: property (text), widget (QPushButton, startButton) #. i18n: file: src/kmetronomeviewbase.ui:81 #. i18n: ectx: property (text), widget (KPushButton, m_playbtn) #: po/rc.cpp:82 po/rc.cpp:110 msgid "Play" msgstr "Wiedergabe" #. i18n: file: src/drumgrid.ui:311 #. i18n: ectx: property (whatsThis), widget (QPushButton, stopButton) #: po/rc.cpp:85 msgid "This button stops the playback" msgstr "Dieser Knopf beendet die Wiedergabe" #. i18n: file: src/drumgrid.ui:314 #. i18n: ectx: property (text), widget (QPushButton, stopButton) #. i18n: file: src/kmetronomeviewbase.ui:100 #. i18n: ectx: property (text), widget (KPushButton, m_stopbtn) #: po/rc.cpp:88 po/rc.cpp:116 msgid "Stop" msgstr "Stopp" #. i18n: file: src/drumgrid.ui:330 #. i18n: ectx: property (whatsThis), widget (QLabel, label_3) #: po/rc.cpp:91 msgid "QPM: quarters per minute" msgstr "QPM: Tempo (in Viertel pro Minute)" #. i18n: file: src/drumgrid.ui:333 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:94 msgctxt "Quarters per Minute" msgid "QPM:" msgstr "QPM:" #. i18n: file: src/drumgrid.ui:343 #. i18n: ectx: property (whatsThis), widget (QLabel, tempoLabel) #: po/rc.cpp:97 msgid "This is the current tempo in quarters per minute" msgstr "Dies ist das aktuelle Tempo in Viertel pro Minute" #. i18n: file: src/drumgrid.ui:353 #. i18n: ectx: property (whatsThis), widget (QSlider, tempoSlider) #: po/rc.cpp:101 msgid "Drag the slider handle to change the tempo, in quarters per minute" msgstr "" "Ziehen Sie den Schieberegler um das Tempo zu ändern, in Viertel pro Minute" #. i18n: file: src/kmetronomeviewbase.ui:58 #. i18n: ectx: property (windowTitle), widget (QWidget, KmetronomeViewBase) #: po/rc.cpp:104 msgid "MIDI Metronome" msgstr "MIDI Metronom" #. i18n: file: src/kmetronomeviewbase.ui:78 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_playbtn) #: po/rc.cpp:107 msgid "This button starts playing the rhythm pattern" msgstr "Dieser Knopf startet die Wiedergabe des Rhythmusschemas" #. i18n: file: src/kmetronomeviewbase.ui:97 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_stopbtn) #: po/rc.cpp:113 msgid "This button stops playing the rhythm pattern" msgstr "Dieser Knopf stoppt die Wiedergabe des Rhythmusschemas" #. i18n: file: src/kmetronomeviewbase.ui:113 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_configbtn) #: po/rc.cpp:119 msgid "This button opens the configuration window" msgstr "Dieser Knopf öffnet den Einrichtungsdialog" #. i18n: file: src/kmetronomeviewbase.ui:116 #. i18n: ectx: property (text), widget (KPushButton, m_configbtn) #: po/rc.cpp:122 msgid "Settings" msgstr "Einstellungen" #. i18n: file: src/kmetronomeviewbase.ui:123 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_patternbtn) #: po/rc.cpp:125 msgid "This button opens the pattern editor" msgstr "Dieser Knopf öffnet den Editor für das Rhythmusschema" #. i18n: file: src/kmetronomeviewbase.ui:139 #. i18n: ectx: property (whatsThis), widget (KPushButton, m_exitbtn) #: po/rc.cpp:131 msgid "This button exits the program" msgstr "Dieser Knopf beendet das Programm" #. i18n: file: src/kmetronomeviewbase.ui:142 #. i18n: ectx: property (text), widget (KPushButton, m_exitbtn) #: po/rc.cpp:134 msgid "Quit" msgstr "Beenden" #. i18n: file: src/kmetronomeviewbase.ui:173 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_measureLCD) #: po/rc.cpp:137 msgid "Number of measures (bars) and beats played from beginning" msgstr "Anzahl Noten (Takte) und Schläge seit Beginn der Wiedergabe" #. i18n: file: src/kmetronomeviewbase.ui:210 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_pattern) #: po/rc.cpp:143 msgid "" "This is the pattern definition to play, either \"Automatic\" or a custom " "defined one." msgstr "" "Dies ist die Definition des Rhythmusschemas für die Wiedergabe, entweder " "\"Automatisch\" oder Benutzerdefiniert." #. i18n: file: src/kmetronomeviewbase.ui:217 #. i18n: ectx: property (text), widget (QLabel, lblBeats) #: po/rc.cpp:146 msgid "Beats/Bar:" msgstr "Taktzahl:" #. i18n: file: src/kmetronomeviewbase.ui:238 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_beatsBar) #: po/rc.cpp:149 msgid "" "This is the number of beats for each measure (bar).\n" "Values are from 1 to 32.\n" "It is the numerator of the time signature specification." msgstr "" "Dies ist die Anzahl Grundschläge für jeden Takt.\n" "Die Werte sind von 1 bis 32.\n" "Dies ist der Zähler der Taktart-Spezifikation." #. i18n: file: src/kmetronomeviewbase.ui:254 #. i18n: ectx: property (text), widget (QLabel, lblFigure) #: po/rc.cpp:154 msgid "Beat Length:" msgstr "Länge Grundschlag." #. i18n: file: src/kmetronomeviewbase.ui:272 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_figure) #: po/rc.cpp:157 msgid "" "This is the beat length.\n" "Values mean 1, 2, 4, 8, 16, 32 and 64.\n" "It is the denominator in the time signature specification." msgstr "" "Dies ist die Dauer des Grundschlags.\n" "Die Werte sind 1, 2, 4, 8, 16, 32 und 64.\n" "Es ist der Nenner der Taktart-Spezifikation." #. i18n: file: src/kmetronomeviewbase.ui:356 #. i18n: ectx: property (text), widget (QLabel, label_1) #: po/rc.cpp:183 msgctxt "weak notes MIDI velocity" msgid "Weak" msgstr "Schwach" #. i18n: file: src/kmetronomeviewbase.ui:369 #. i18n: ectx: property (text), widget (QLabel, label_2) #: po/rc.cpp:186 msgctxt "strong notes MIDI velocity" msgid "Strong" msgstr " Stark" #. i18n: file: src/kmetronomeviewbase.ui:382 #. i18n: ectx: property (text), widget (QLabel, label_3) #: po/rc.cpp:189 msgctxt "audio volume level" msgid "Volume" msgstr "Volumen" #. i18n: file: src/kmetronomeviewbase.ui:395 #. i18n: ectx: property (text), widget (QLabel, label_4) #: po/rc.cpp:192 msgctxt "audio panning" msgid "Pan" msgstr "Balance" #. i18n: file: src/kmetronomeviewbase.ui:414 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial1) #: po/rc.cpp:195 msgid "" "This is the velocity of the weak notes in the automatic rhythm pattern (all " "of them, except the first one)" msgstr "" "Dies ist die Lautstärke der schwachen Noten im Rhythmusschema (alle von " "ihnen, ausser der ersten)" #. i18n: file: src/kmetronomeviewbase.ui:439 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial2) #: po/rc.cpp:198 msgid "" "This is the velocity of the strong note in the automatic rhythm pattern (the " "first one)" msgstr "Dies ist die Lautstärke der starken Note im Rhythmusschema (die erste)" #. i18n: file: src/kmetronomeviewbase.ui:464 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial3) #: po/rc.cpp:201 msgid "This is the MIDI volume control (CC7)" msgstr "Dies ist die MIDI Lautstärkenregelung (CC7)" #. i18n: file: src/kmetronomeviewbase.ui:489 #. i18n: ectx: property (whatsThis), widget (Knob, m_dial4) #: po/rc.cpp:204 msgid "This is the MIDI pan control (CC10)" msgstr "Dies ist die MIDI Balance Steuerung (CC10)" #. i18n: file: src/kmetronomeviewbase.ui:512 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_air) #: po/rc.cpp:207 msgid "This is the musical name of the tempo value" msgstr "Dies ist der musikalische Name des Tempos" #. i18n: file: src/kmetronomeviewbase.ui:531 #. i18n: ectx: property (whatsThis), widget (QLCDNumber, m_tempoLCD) #: po/rc.cpp:210 msgid "The current tempo value" msgstr "Der aktuelle Wert für das Tempo" #. i18n: file: src/kmetronomeviewbase.ui:554 #. i18n: ectx: property (text), widget (QLabel, textLabel1_2) #: po/rc.cpp:213 msgid "Tempo (in quarters per minute)" msgstr "Tempo (in Viertel pro Minute)" #. i18n: file: src/kmetronomeviewbase.ui:580 #. i18n: ectx: property (whatsThis), widget (QSlider, m_tempo) #: po/rc.cpp:216 msgid "" "This slider changes the tempo, or speed of the rhythm.\n" "Values are 25 to 250 quarters per minute (Maelzel Metronome units)." msgstr "" "Dieser Schieberegler ändert das Tempo, oder Geschwindigkeit des " "Rhythmus.\n" "Die Werte sind von 25 bis 250 Viertel pro Minute (Maelzel Metronom " "Einheiten)." #. i18n: file: src/kmetropreferencesbase.ui:37 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_autoconn) #: po/rc.cpp:220 msgid "" "If this checkbox is activated, the the program will remember the connections " "for the input and output ports, and try to reconnect them at program startup." msgstr "" "Aktivieren Sie dieses Ankreuzfeld, damit das Programm sich an den Eingangs- " "und Ausgangs-Port erinnert, und diese beim nächsten Programmstart wieder " "verbindet." #. i18n: file: src/kmetropreferencesbase.ui:40 #. i18n: ectx: property (text), widget (QCheckBox, m_autoconn) #: po/rc.cpp:223 msgid "Automatic ports connection on startup" msgstr "Automatische Verbindung der Ports beim Start" #. i18n: file: src/kmetropreferencesbase.ui:61 #. i18n: ectx: property (text), widget (QLabel, lblInputPort) #: po/rc.cpp:226 msgid "Optional input port conn:" msgstr "Opt.Verbindung Eingangs-Port:" #. i18n: file: src/kmetropreferencesbase.ui:83 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_in_connection) #: po/rc.cpp:229 msgid "This is the optional connection for the MIDI IN port." msgstr "Dies ist die optionale Verbindung für den MIDI Eingangs-Port" #. i18n: file: src/kmetropreferencesbase.ui:102 #. i18n: ectx: property (text), widget (QLabel, lblOutputPort) #: po/rc.cpp:232 msgid "Output port connection:" msgstr "Verbindung für Ausgabe-Port:" #. i18n: file: src/kmetropreferencesbase.ui:124 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_out_connection) #: po/rc.cpp:235 msgid "This is the mandatory connection for the MIDI OUT port" msgstr "Dies ist die notwendige Verbindung für den MIDI Ausgabe-Port" #. i18n: file: src/kmetropreferencesbase.ui:131 #. i18n: ectx: property (text), widget (QLabel, lblInstrument) #: po/rc.cpp:238 msgid "Output instrument:" msgstr "Ausgabe Instrument:" #. i18n: file: src/kmetropreferencesbase.ui:147 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_instrument) #: po/rc.cpp:241 msgid "This is the definition of the instrument connected to the MIDI OUT port" msgstr "" "Dies ist die Definition des Instrumentes das mit dem MIDI Ausgabe-Port " "verbunden ist" #. i18n: file: src/kmetropreferencesbase.ui:158 #. i18n: ectx: property (text), widget (QLabel, lblBank) #: po/rc.cpp:244 msgid "Bank:" msgstr "Bank:" #. i18n: file: src/kmetropreferencesbase.ui:171 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_bank) #: po/rc.cpp:247 msgid "This is the Bank of the selected MIDI program" msgstr "Dies ist die Bank des ausgewählten MIDI Programms" #. i18n: file: src/kmetropreferencesbase.ui:190 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: po/rc.cpp:250 msgid "Channel:" msgstr "Kanal:" #. i18n: file: src/kmetropreferencesbase.ui:207 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_channel) #: po/rc.cpp:253 msgid "" "This is the MIDI channel, between 1 and 16. \n" "General MIDI uses the channel 10 for percussion sounds." msgstr "" "Dies ist der MIDI Kanal, zwischen 1 und 16. \n" "Allgemeines MIDI braucht den Kanal 10 für das Schlagzeug." #. i18n: file: src/kmetropreferencesbase.ui:235 #. i18n: ectx: property (text), widget (QLabel, textLabel3) #: po/rc.cpp:257 msgid "Program:" msgstr "Programm:" #. i18n: file: src/kmetropreferencesbase.ui:257 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_program) #: po/rc.cpp:260 msgid "This is the MIDI program" msgstr "Dies ist das MIDI Programm" #. i18n: file: src/kmetropreferencesbase.ui:270 #. i18n: ectx: property (text), widget (QLabel, textLabel7) #: po/rc.cpp:263 msgid "Resolution:" msgstr "Auflösung:" #. i18n: file: src/kmetropreferencesbase.ui:286 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_resolution) #: po/rc.cpp:266 msgid "This is the MIDI time resolution (number of ticks in a quarter note)" msgstr "Dies ist die MIDI Zeitauflösung (Anzahl Ticks in einer Viertel Note)" #. i18n: file: src/kmetropreferencesbase.ui:305 #. i18n: ectx: property (text), widget (QLabel, textLabel4) #: po/rc.cpp:269 msgid "Weak note:" msgstr "Schwache Note:" #. i18n: file: src/kmetropreferencesbase.ui:327 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_weak_note) #: po/rc.cpp:272 msgid "This is the sound of the weak notes for the automatic patterns" msgstr "" "Dies ist die Lautstärke der schwachen Note im automatischen Rhythmusschema" #. i18n: file: src/kmetropreferencesbase.ui:340 #. i18n: ectx: property (text), widget (QLabel, textLabel8) #: po/rc.cpp:275 msgid "Note duration:" msgstr "Dauer der Note:" #. i18n: file: src/kmetropreferencesbase.ui:356 #. i18n: ectx: property (whatsThis), widget (KIntSpinBox, m_duration) #: po/rc.cpp:278 msgid "This is the note duration in ticks, when using NOTE OFF events" msgstr "" "Dies ist die Dauer der Note in Anzahl Ticks, wenn NOTE OFF Ereignisse " "benutzt werden." #. i18n: file: src/kmetropreferencesbase.ui:378 #. i18n: ectx: property (text), widget (QLabel, textLabel5) #: po/rc.cpp:281 msgid "Strong note:" msgstr "Starke Note:" #. i18n: file: src/kmetropreferencesbase.ui:400 #. i18n: ectx: property (whatsThis), widget (KComboBox, m_strong_note) #: po/rc.cpp:284 msgid "This is the sound of the strong notes for the automatic patterns" msgstr "" "Dies ist die Lautstärke der starken Note im automatischen Rhythmusschema" #. i18n: file: src/kmetropreferencesbase.ui:411 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:287 msgid "Optional setting to send NOTE OFF events" msgstr "Optionale Einstellung zum Senden von NOTE OFF Ereignissen" #. i18n: file: src/kmetropreferencesbase.ui:414 #. i18n: ectx: property (text), widget (QCheckBox, m_use_noteoff) #: po/rc.cpp:290 msgid "Send NOTE OFF events" msgstr "Sende NOTE OFF Ereignisse" #. i18n: file: src/kmetropreferencesbase.ui:440 #. i18n: ectx: property (whatsThis), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:293 msgid "If this option is activated, the knobs are drawn using a custom style" msgstr "" "Beim Aktivieren dieser Option werden die Knöpfe mit einem " "benutzerdefinierten Stil dargestellt" #. i18n: file: src/kmetropreferencesbase.ui:443 #. i18n: ectx: property (text), widget (QCheckBox, m_styledknobs) #: po/rc.cpp:296 msgid "Styled Knobs" msgstr "Stilvolle Knöpfe" #: po/rc.cpp:297 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Rene Landert" #: po/rc.cpp:298 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "rene.landert@bluewin.ch " #~ msgid "100" #~ msgstr "100" #~ msgid "Config" #~ msgstr "Einrichtung" #~ msgid "Exit" #~ msgstr "Beenden" #~ msgid "Rhythm figure:" #~ msgstr "Notenschlüssel:" #~ msgid "" #~ "\n" #~ "\n" #~ "

This is the aire control to change the tempo value " #~ "using musical names

" #~ msgstr "" #~ "\n" #~ "\n" #~ "

Dies ist das Kontrollfeld zum Tempowechsel " #~ "mittels Musiknamen

" #~ msgid "&OK" #~ msgstr "&OK" #~ msgid "&Cancel" #~ msgstr "&Abbrechen" kmetronome-0.10.1/src/0000755000175000001440000000000011760763113013575 5ustar pedrouserskmetronome-0.10.1/src/kmetropreferences.h0000644000175000001440000000721311760763113017474 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #ifndef KMETROPREFERENCES_H #define KMETROPREFERENCES_H #include "ui_kmetropreferencesbase.h" #include "instrument.h" #include class KMetroPreferences : public KDialog { Q_OBJECT public: KMetroPreferences(QWidget *parent = 0); virtual ~KMetroPreferences(); void fillInputConnections(QStringList lst) { m_ui.m_in_connection->insertItems(0, lst); } void fillOutputConnections(QStringList lst) { m_ui.m_out_connection->insertItems(0, lst); } void fillInstruments(InstrumentList* instruments); bool getAutoConnect() { return m_ui.m_autoconn->isChecked(); } QString getOutputConnection() { return m_ui.m_out_connection->currentText(); } QString getInputConnection() { return m_ui.m_in_connection->currentText(); } int getChannel() { return (m_ui.m_channel->value()-1); } int getResolution() { return m_ui.m_resolution->value(); } int getDuration() { return m_ui.m_duration->value(); } bool getSendNoteOff() { return m_ui.m_use_noteoff->isChecked(); } bool getStyledKnobs() { return m_ui.m_styledknobs->isChecked(); } QString getInstrumentName(); QString getProgramName(); QString getBankName(); int getWeakNote(); int getStrongNote(); void setAutoConnect(bool newValue) { m_ui.m_autoconn->setChecked(newValue); } void setOutputConnection(QString newValue); void setInputConnection(QString newValue); void setChannel(int newValue) { m_ui.m_channel->setValue(newValue+1); } void setResolution(int newValue) { m_ui.m_resolution->setValue(newValue); } void setDuration(int newValue) { m_ui.m_duration->setValue(newValue); } void setSendNoteOff(bool newValue) { m_ui.m_use_noteoff->setChecked(newValue); } void setStyledKnobs(bool newValue) { m_ui.m_styledknobs->setChecked(newValue); } void setWeakNote(int newValue); void setStrongNote(int newValue); void setInstrumentName(QString name); void setProgramName(QString name); void setBankName(QString name); public slots: void slotInstrumentChanged(int idx); void slotBankChanged(int idx); void slotProgramChanged(int idx); private: Ui::KMetroPreferencesBase m_ui; InstrumentList* m_insList; Instrument m_ins; }; #endif // KMETROPREFERENCES_H kmetronome-0.10.1/src/kmetronomeviewbase.ui0000644000175000001440000005046011760763113020047 0ustar pedrousers Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012 Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA KmetronomeViewBase 0 0 388 364 0 0 0 0 32767 32767 0 0 MIDI Metronome 0 0 0 This button starts playing the rhythm pattern Play false 0 0 This button stops playing the rhythm pattern Stop 0 0 This button opens the configuration window Settings This button opens the pattern editor Patterns 0 0 This button exits the program Quit Qt::Vertical 20 28 0 0 Number of measures (bars) and beats played from beginning 6 QLCDNumber::Dec QLCDNumber::Flat Pattern: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter m_pattern 0 0 This is the pattern definition to play, either "Automatic" or a custom defined one. Beats/Bar: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter m_beatsBar 60 16777215 This is the number of beats for each measure (bar). Values are from 1 to 32. It is the numerator of the time signature specification. 4 32 1 Beat Length: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_figure This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. 0 0 Whole :/icons/1.png:/icons/1.png Half :/icons/2.png:/icons/2.png Quarter :/icons/4.png:/icons/4.png Eighth :/icons/8.png:/icons/8.png Sixteenth :/icons/16.png:/icons/16.png Thirty-Second :/icons/32.png:/icons/32.png Sixty-Fourth :/icons/64.png:/icons/64.png Weak Qt::AlignBottom|Qt::AlignHCenter m_dial1 Strong Qt::AlignBottom|Qt::AlignHCenter m_dial2 Volume Qt::AlignBottom|Qt::AlignHCenter m_dial3 Pan Qt::AlignBottom|Qt::AlignHCenter m_dial4 50 50 This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) 127 1 10.000000000000000 true 50 50 This is the velocity of the strong note in the automatic rhythm pattern (the first one) 127 1 10.000000000000000 true 50 50 This is the MIDI volume control (CC7) 127 1 10.000000000000000 true 50 50 This is the MIDI pan control (CC10) 127 1 10.000000000000000 true This is the musical name of the tempo value 0 0 150 100 The current <i>tempo</i> value 3 100.000000000000000 0 0 Tempo (in quarters per minute) false m_tempo 0 0 0 0 This slider changes the <i>tempo</i>, or speed of the rhythm. Values are 25 to 250 quarters per minute (<i>Maelzel Metronome units</i>). 25 250 100 Qt::Horizontal QSlider::TicksBelow 5 KIntSpinBox QSpinBox
knuminput.h
KPushButton QPushButton
kpushbutton.h
KComboBox QComboBox
kcombobox.h
Knob QDial
knob.h
m_pattern m_beatsBar m_figure m_air m_dial1 m_dial2 m_dial3 m_dial4 m_tempo knob.h knob.h kpushbutton.h kpushbutton.h kpushbutton.h kpushbutton.h knuminput.h kcombobox.h
kmetronome-0.10.1/src/kmetronome.cpp0000644000175000001440000004374511760763113016476 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #include "kmetronome.h" #include "kmetronomeview.h" #include "kmetropreferences.h" #include "sequenceradapter.h" #include "kmetronomeadaptor.h" #include "defs.h" #include "drumgrid.h" #include "drumgridmodel.h" #include "instrument.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include KMetronome::KMetronome(QWidget *parent) : KXmlGuiWindow(parent), m_styledKnobs(true), m_view(0), m_seq(0) { new KmetronomeAdaptor(this); QDBusConnection dbus = QDBusConnection::sessionBus(); dbus.registerObject("/", this); m_view = new KmetronomeView(this); m_model = new DrumGridModel(this); m_instrumentList = new InstrumentList; m_model->setInstrumentList(m_instrumentList); QString drums = KStandardDirs::locate("appdata", "drums.ins"); if (!drums.isEmpty()) m_instrumentList->load(drums); try { m_seq = new SequencerAdapter(this); m_seq->setModel(m_model); connect(m_seq, SIGNAL(signalUpdate(int,int)), SLOT(updateDisplay(int,int)), Qt::QueuedConnection); connect(m_seq, SIGNAL(signalPlay()), SLOT(play()), Qt::QueuedConnection); connect(m_seq, SIGNAL(signalStop()), SLOT(stop()), Qt::QueuedConnection); connect(m_seq, SIGNAL(signalCont()), SLOT(cont()), Qt::QueuedConnection); connect(m_seq, SIGNAL(signalNotation(int,int)), SLOT(setTimeSignature(int,int)), Qt::QueuedConnection); setCentralWidget(m_view); setupActions(); setAutoSaveSettings(); setupPlaces(); readConfiguration(); } catch (SequencerError& ex) { QString errorstr = i18n("Fatal error from the ALSA sequencer. " "This usually happens when the kernel doesn't have ALSA support, " "or the device node (/dev/snd/seq) doesn't exists, " "or the kernel module (snd_seq) is not loaded. " "Please check your ALSA/MIDI configuration. Returned error was: %1", ex.qstrError()); KMessageBox::error(0, errorstr, i18n("Error")); close(); } } KMetronome::~KMetronome() { delete m_instrumentList; } void KMetronome::setupActions() { KStandardAction::quit(kapp, SLOT(quit()), actionCollection()); m_prefs = KStandardAction::preferences(this, SLOT(optionsPreferences()), actionCollection()); KStandardAction::configureToolbars(this, SLOT(configureToolbars()), actionCollection()); KStandardAction::keyBindings(guiFactory(), SLOT(configureShortcuts()), actionCollection()); m_playStop = new KToggleAction(KIcon("media-playback-start"), i18n("Play/Stop"), this); actionCollection()->addAction("play_stop", m_playStop); connect(m_playStop, SIGNAL(triggered(bool)), SLOT(toggle(bool))); m_fakeToolbar = new KToggleAction(i18n("Show Action Buttons"), this); m_fakeToolbar->setChecked(true); actionCollection()->addAction("show_faketoolbar", m_fakeToolbar); connect(m_fakeToolbar, SIGNAL(triggered(bool)), m_view, SLOT(displayFakeToolbar(bool))); m_editPatterns = new KAction(KIcon("document-edit"), i18n("Patterns"), this); actionCollection()->addAction("edit_patterns", m_editPatterns); connect(m_editPatterns, SIGNAL(triggered()), SLOT(editPatterns())); KAction* imp = new KAction(KIcon("document-import"), i18n("Import Patterns"), this); actionCollection()->addAction("import_patterns", imp); connect(imp, SIGNAL(triggered()), SLOT(importPatterns())); KAction* exp = new KAction( KIcon("document-export"), i18n("Export Patterns"), this); actionCollection()->addAction("export_patterns", exp); connect(exp, SIGNAL(triggered()), SLOT(exportPatterns())); setStandardToolBarMenuEnabled(true); createGUI(); } bool KMetronome::queryExit() { saveConfiguration(); return true; } void KMetronome::saveConfiguration() { KConfigGroup config = KGlobal::config()->group("Settings"); if (m_seq == NULL) return; config.writeEntry("instrument", m_instrument); config.writeEntry("bank", m_bank); config.writeEntry("program", m_program); config.writeEntry("weakNote", m_seq->getWeakNote()); config.writeEntry("strongNote", m_seq->getStrongNote()); config.writeEntry("channel", m_seq->getChannel()); config.writeEntry("weakVelocity", m_seq->getWeakVelocity()); config.writeEntry("strongVelocity", m_seq->getStrongVelocity()); config.writeEntry("volume", m_seq->getVolume()); config.writeEntry("balance", m_seq->getBalance()); config.writeEntry("resolution", m_seq->getResolution()); config.writeEntry("sendNoteOff", m_seq->getSendNoteOff()); config.writeEntry("duration", m_seq->getNoteDuration()); config.writeEntry("tempo", m_seq->getBpm()); config.writeEntry("rhythmNumerator", m_seq->getRhythmNumerator()); config.writeEntry("rhythmDenominator", m_seq->getRhythmDenominator()); config.writeEntry("autoconnect", m_seq->getAutoConnect()); config.writeEntry("outputConn", m_seq->getOutputConn()); config.writeEntry("inputConn", m_seq->getInputConn()); config.writeEntry("styledKnobs", m_styledKnobs); config.writeEntry("fakeToolbar", m_fakeToolbar->isChecked()); config.sync(); } void KMetronome::applyInstrumentSettings() { Instrument ins = m_instrumentList->value(m_instrument); m_seq->setBankSelMethod(ins.bankSelMethod()); InstrumentPatches banks = ins.patches(); InstrumentPatches::ConstIterator j; for( j = banks.constBegin(); j != banks.constEnd(); ++j ) { InstrumentData bank = j.value(); if (bank.name() == m_bank) { int ibank = j.key(); InstrumentData::ConstIterator k; for( k = bank.constBegin(); k != bank.constEnd(); ++k ) { if (k.value() == m_program) { int iprogram = k.key(); m_seq->setBank(ibank); m_seq->setProgram(iprogram); return; } } } } } void KMetronome::readConfiguration() { KConfigGroup config = KGlobal::config()->group("Settings"); m_instrument = config.readEntry("instrument", QString()); m_bank = config.readEntry("bank", QString()); m_program = config.readEntry("program", QString()); applyInstrumentSettings(); m_seq->setChannel(config.readEntry("channel", METRONOME_CHANNEL)); m_seq->setWeakNote(config.readEntry("weakNote", METRONOME_WEAK_NOTE)); m_seq->setStrongNote(config.readEntry("strongNote", METRONOME_STRONG_NOTE)); m_seq->setResolution(config.readEntry("resolution", METRONOME_RESOLUTION)); int volume = config.readEntry("volume", METRONOME_VOLUME); int balance = config.readEntry("balance", METRONOME_PAN); int weakVel = config.readEntry("weakVelocity", METRONOME_VELOCITY); int strongVel = config.readEntry("strongVelocity", METRONOME_VELOCITY); int tempo = config.readEntry("tempo", 100); int ts_num = config.readEntry("rhythmNumerator", 4); int ts_div = config.readEntry("rhythmDenominator", 4); m_seq->setVolume(volume); m_seq->setBalance(balance); m_seq->setWeakVelocity(weakVel); m_seq->setStrongVelocity(strongVel); m_seq->setBpm(tempo); m_seq->setRhythmNumerator(ts_num); m_seq->setRhythmDenominator(ts_div); m_view->setBeatsBar(ts_num); m_view->setFigure(ts_div); m_view->setTempo(tempo); m_view->displayWeakVelocity(weakVel); m_view->displayStrongVelocity(strongVel); m_view->displayVolume(volume); m_view->displayBalance(balance); int duration = config.readEntry("duration", NOTE_DURATION); m_seq->setNoteDuration(duration); bool sendNoteOff = config.readEntry("sendNoteOff", true); m_seq->setSendNoteOff(sendNoteOff); bool autoconn = config.readEntry("autoconnect", false); m_seq->setAutoConnect(autoconn); if(autoconn) { m_seq->setOutputConn(config.readEntry("outputConn", "20:0")); m_seq->setInputConn(config.readEntry("inputConn", "20:0")); m_seq->connect_output(); m_seq->connect_input(); } m_styledKnobs = config.readEntry("styledKnobs", true); m_seq->sendInitialControls(); m_view->updateKnobs(m_styledKnobs); bool fakeToolbar = config.readEntry("fakeToolbar", true); m_fakeToolbar->setChecked(fakeToolbar); m_view->displayFakeToolbar(fakeToolbar); updatePatterns(); } void KMetronome::optionsPreferences() { QPointer dlg = new KMetroPreferences(this); dlg->fillOutputConnections(m_seq->outputConnections()); dlg->fillInputConnections(m_seq->inputConnections()); dlg->fillInstruments(m_instrumentList); dlg->setAutoConnect(m_seq->getAutoConnect()); QString conn = m_seq->getOutputConn(); if (conn != NULL && !conn.isEmpty()) dlg->setOutputConnection(conn); conn = m_seq->getInputConn(); if (conn != NULL && !conn.isEmpty()) dlg->setInputConnection(conn); dlg->setInstrumentName(m_instrument); dlg->setBankName(m_bank); dlg->setProgramName(m_program); dlg->setWeakNote(m_seq->getWeakNote()); dlg->setStrongNote(m_seq->getStrongNote()); dlg->setChannel(m_seq->getChannel()); dlg->setResolution(m_seq->getResolution()); dlg->setSendNoteOff(m_seq->getSendNoteOff()); dlg->setDuration(m_seq->getNoteDuration()); dlg->setStyledKnobs(m_styledKnobs); if (dlg->exec() == QDialog::Accepted) { m_seq->disconnect_output(); m_seq->disconnect_input(); if (dlg != NULL) { m_seq->setAutoConnect(dlg->getAutoConnect()); m_seq->setOutputConn(dlg->getOutputConnection()); m_seq->setInputConn(dlg->getInputConnection()); m_instrument = dlg->getInstrumentName(); m_bank = dlg->getBankName(); m_program = dlg->getProgramName(); applyInstrumentSettings(); m_seq->setWeakNote(dlg->getWeakNote()); m_seq->setStrongNote(dlg->getStrongNote()); m_seq->setResolution(dlg->getResolution()); m_seq->setChannel(dlg->getChannel()); m_seq->setSendNoteOff(dlg->getSendNoteOff()); m_seq->setNoteDuration(dlg->getDuration()); m_seq->connect_output(); m_seq->connect_input(); m_seq->sendInitialControls(); if (m_styledKnobs != dlg->getStyledKnobs()) { m_styledKnobs = dlg->getStyledKnobs(); m_view->updateKnobs(m_styledKnobs); } } } delete dlg; } void KMetronome::updateDisplay(int bar, int beat) { m_view->display(bar, beat); } void KMetronome::tempoChanged(int newTempo) { m_seq->setBpm(newTempo); m_seq->metronome_set_tempo(); } void KMetronome::beatsBarChanged(int beats) { m_seq->setRhythmNumerator(beats); } void KMetronome::rhythmFigureChanged(int figure) { m_seq->setRhythmDenominator((int)pow(2, figure)); } void KMetronome::weakVeloChanged(int vel) { m_seq->setWeakVelocity(vel); } void KMetronome::strongVeloChanged(int vel) { m_seq->setStrongVelocity(vel); } void KMetronome::volumeChanged(int vol) { m_seq->setVolume(vol); m_seq->sendControlChange(VOLUME_CC, vol); } void KMetronome::balanceChanged(int bal) { m_seq->setBalance(bal); m_seq->sendControlChange(PAN_CC, bal); } void KMetronome::toggle(bool checked) { if (checked) play(); else stop(); } /** * Public D-Bus Interface Slots */ void KMetronome::play() { m_view->enableControls(false); m_prefs->setEnabled(false); m_playStop->setChecked(true); m_seq->metronome_start(); updateDisplay(1, 0); } void KMetronome::stop() { m_seq->metronome_stop(); m_view->enableControls(true); m_prefs->setEnabled(true); m_playStop->setChecked(false); } void KMetronome::cont() { m_view->enableControls(false); m_prefs->setEnabled(false); m_seq->metronome_continue(); } void KMetronome::setTempo(int newTempo) { if (newTempo < TEMPO_MIN || newTempo > TEMPO_MAX) return; m_view->setTempo(newTempo); } void KMetronome::setTimeSignature(int numerator, int denominator) { static const int valids[] = {1, 2, 4, 8, 16, 32, 64}; bool invalid = true; for(int i=0; i<7; ++i) { if (denominator == valids[i]) { invalid = false; break; } } if (m_seq->isPlaying() || numerator < 1 || numerator > 32 || invalid) return; m_view->setBeatsBar(numerator); m_view->setFigure(denominator); m_seq->setRhythmDenominator(denominator); } /** * Patterns stuff */ void KMetronome::updatePatterns() { const int n(QSTR_PATTERN.size()); QStringList lst; KGlobal::config()->reparseConfiguration(); foreach(const QString& name, KGlobal::config()->groupList()) { if (name.startsWith(QSTR_PATTERN)) lst += name.mid(n); } m_view->setPatterns(lst); } void KMetronome::readDrumGridPattern() { if (m_drumgrid == NULL) { m_drumgrid = new DrumGrid(this); m_drumgrid->setModel(m_model); m_drumgrid->setSequencer(m_seq); } m_drumgrid->setInstrument(m_instrument); if (m_view->patternMode()) m_drumgrid->readPattern(m_view->getSelectedPattern()); } void KMetronome::editPatterns() { int res; QString tmpPattern; readDrumGridPattern(); res = m_drumgrid->exec(); updatePatterns(); if (res == QDialog::Accepted && m_drumgrid != NULL) tmpPattern = m_drumgrid->currentPattern(); tempoChanged(m_view->getTempo()); m_view->setSelectedPattern(tmpPattern); m_seq->setPatternMode(m_view->patternMode()); } void KMetronome::patternChanged(int /*idx*/) { if (m_view->patternMode()) readDrumGridPattern(); m_seq->setPatternMode(m_view->patternMode()); if (m_view->patternMode()) { m_view->setBeatsBar(m_model->columnCount()); m_view->setFigure(m_model->patternFigure()); } } void KMetronome::importPatterns(const QString& path) { KConfig cfg(path, KConfig::SimpleConfig); foreach(const QString& name, cfg.groupList()) { KConfigGroup input = cfg.group(name); KConfigGroup output = KGlobal::config()->group(QSTR_PATTERN+name); output.deleteGroup(); input.copyTo(&output); } updatePatterns(); } void KMetronome::exportPatterns(const QString& path) { const int n(QSTR_PATTERN.size()); QStringList lst; KGlobal::config()->reparseConfiguration(); foreach(const QString& name, KGlobal::config()->groupList()) { if (name.startsWith(QSTR_PATTERN)) lst += name.mid(n); } if (!lst.isEmpty()) { KConfig cfg(path, KConfig::SimpleConfig); foreach(const QString& name, lst) { KConfigGroup input = KGlobal::config()->group(QSTR_PATTERN+name); KConfigGroup output = cfg.group(name); input.copyTo(&output); } cfg.sync(); } } void KMetronome::importPatterns() { KUrl u = KFileDialog::getOpenUrl( KUrl("kfiledialog:///KMetronome"), i18n("*.pat|Pattern Files (*.pat)"), this, i18n("Import Patterns")); if (!u.isEmpty()) { QString path = u.toLocalFile(); if (!path.isNull()) importPatterns(path); } } void KMetronome::exportPatterns() { KUrl u = KFileDialog::getSaveUrl( KUrl("kfiledialog:///KMetronome"), i18n("*.pat|Pattern Files (*.pat)"), this, i18n("Export Patterns")); if (!u.isEmpty()) { QString path = u.toLocalFile(); if (!path.isNull()) exportPatterns(path); } } void KMetronome::setupPlaces() { KFilePlacesModel *placesModel = new KFilePlacesModel; QString drums = KStandardDirs::locate("appdata", "drums.ins"); if (!drums.isEmpty()) { QFileInfo info(drums); KUrl samples(info.absolutePath()); if (placesModel->url(placesModel->closestItem(samples)) != samples) { placesModel->addPlace(i18n("Patterns"), samples, KApplication::applicationName(), KApplication::applicationName()); } } delete placesModel; } kmetronome-0.10.1/src/drumgrid.ui0000644000175000001440000003057711760763113015765 0ustar pedrousers Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012 Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA DrumGrid 0 0 700 400 QFrame::StyledPanel QFrame::Raised Pattern: patternCombo 0 0 Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. true This button stores the current pattern definition with the name given Save This button deletes the current pattern definition Delete QFrame::StyledPanel QFrame::Raised Rows: Use this button to add new rows (sounds) to the current pattern definition Add Use this button to remove the selected row (sound) from the pattern definition Remove Qt::Vertical 20 155 Beats: Highligh the grid columns while playing Highlight Columns 0 80 This is the current beat number 2 QLCDNumber::Flat Qt::CustomContextMenu This is the pattern table, beats as columns and sounds as rows QFrame::StyledPanel QFrame::Raised Number of beats per measure (bar) 1 99 16 This is the beat length for the pattern column. 4 0 Whole :/icons/1.png:/icons/1.png Half :/icons/2.png:/icons/2.png Quarter :/icons/4.png:/icons/4.png Eighth :/icons/8.png:/icons/8.png Sixteenth :/icons/16.png:/icons/16.png Thirty-Second :/icons/32.png:/icons/32.png Sixty-Fourth :/icons/64.png:/icons/64.png This button starts playing the current pattern Play true true This button stops the playback Stop true true true QPM: quarters per minute QPM: tempoSlider This is the current tempo in quarters per minute 100 Drag the slider handle to change the tempo, in quarters per minute 10 250 100 Qt::Horizontal QSlider::TicksAbove KComboBox QComboBox
kcombobox.h
KIntSpinBox QSpinBox
knuminput.h
KPushButton QPushButton
kpushbutton.h
patternCombo saveButton deleteButton tableView addButton removeButton chkselbeat gridColumns figureCombo startButton stopButton tempoSlider
kmetronome-0.10.1/src/kmetronome.h0000644000175000001440000000630011760763113016125 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #ifndef KMETRONOME_H #define KMETRONOME_H #include #include class KAction; class KToggleAction; class KmetronomeView; class SequencerAdapter; class DrumGrid; class DrumGridModel; class Instrument; class InstrumentList; class KMetronome : public KXmlGuiWindow { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "net.sourceforge.kmetronome") public: KMetronome(QWidget* parent=0); virtual ~KMetronome(); bool queryExit(); public Q_SLOTS: void play(); void stop(); void cont(); void setTempo(int newTempo); void setTimeSignature(int numerator, int denominator); protected Q_SLOTS: void optionsPreferences(); void tempoChanged(int); void beatsBarChanged(int); void rhythmFigureChanged(int); void weakVeloChanged(int); void strongVeloChanged(int); void volumeChanged(int); void balanceChanged(int); void toggle(bool checked); void updateDisplay(int, int); void editPatterns(); void patternChanged(int); void updatePatterns(); void exportPatterns(); void importPatterns(); private: void setupAccel(); void setupActions(); void setupPlaces(); void saveConfiguration(); void readConfiguration(); void readDrumGridPattern(); void applyInstrumentSettings(); void exportPatterns(const QString& path); void importPatterns(const QString& path); bool m_styledKnobs; KmetronomeView* m_view; SequencerAdapter* m_seq; QPointer m_drumgrid; InstrumentList* m_instrumentList; DrumGridModel* m_model; KAction* m_prefs; KToggleAction* m_playStop; KAction* m_editPatterns; KToggleAction* m_fakeToolbar; QString m_instrument; QString m_bank; QString m_program; }; #endif // KMETRONOME_H kmetronome-0.10.1/src/qt_kde.h0000644000175000001440000000550111760763113015216 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * plcl@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #ifndef QT_KDE_H #define QT_KDE_H // ALSA library #include // Standard C++ library #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Qt4 headers #include #include #include #include // KDE4 headers #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /*QT_KDE_H*/ kmetronome-0.10.1/src/kmetronomeui.rc0000644000175000001440000000113311760763113016637 0ustar pedrousers kmetronome-0.10.1/src/main.cpp0000644000175000001440000000543411760763113015233 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #include #include #include #include #include #include "kmetronome.h" static const char description[] = I18N_NOOP("KDE MIDI metronome using ALSA sequencer"); static const char version[] = VERSION; /*static KCmdLineOptions options[] = { // { "+[URL]", I18N_NOOP( "Document to open." ), 0 }, KCmdLineLastOption };*/ int main (int argc, char **argv) { KAboutData about("kmetronome", 0, ki18n("KMetronome"), version, ki18n( description), KAboutData::License_GPL, ki18n( "(C) 2005-2012 Pedro Lopez-Cabanillas"), KLocalizedString(), "http://kmetronome.sourceforge.net", "plcl@users.sourceforge.net"); about.addAuthor(ki18n("Pedro Lopez-Cabanillas"), KLocalizedString(), "plcl@users.sourceforge.net"); KCmdLineArgs::init(argc, argv, &about); //KCmdLineOptions options; //options.add("+[URL]", ki18n( "Document to open" )); //KCmdLineArgs::addCmdLineOptions( options ); KApplication app; KMetronome *mainWin = 0; if (app.isSessionRestored()) { RESTORE(KMetronome); } else { // no session.. just start up normally //KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); mainWin = new KMetronome; mainWin->show(); //args->clear(); } return app.exec(); } kmetronome-0.10.1/src/kmetronome.qrc0000644000175000001440000000040411760763113016462 0ustar pedrousers icons/1.png icons/2.png icons/4.png icons/8.png icons/16.png icons/32.png icons/64.png kmetronome-0.10.1/src/knob.cpp0000644000175000001440000001036011760763113015232 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012, Pedro Lopez-Cabanillas For this file, the following copyright notice is also applicable: Copyright (C) 2005-2012, rncbc aka Rui Nuno Capela. All rights reserved. See http://qsynth.sourceforge.net This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; If not, see . */ #include "knob.h" #include #include #include #include #include #include #include #include #include //------------------------------------------------------------------------- // Knob - Instance knob widget class. // // Constructor. Knob::Knob ( QWidget *pParent ) : QDial(pParent), m_iDefaultValue(-1), m_dialMode(AngularMode), m_bMousePressed(false), m_lastDragValue(0.0) { } // Destructor. Knob::~Knob (void) { } void Knob::setDefaultValue ( int iDefaultValue ) { m_iDefaultValue = iDefaultValue; } void Knob::setDialMode ( Knob::DialMode dialMode ) { m_dialMode = dialMode; } // Mouse angle determination. double Knob::mouseAngle ( const QPoint& pos ) { double dx = pos.x() - (width() / 2); double dy = (height() / 2) - pos.y(); return 180.0 * atan2(dx, dy) / M_PI; } // Alternate mouse behavior event handlers. void Knob::mousePressEvent ( QMouseEvent *pMouseEvent ) { if (m_dialMode == QDialMode) { QDial::mousePressEvent(pMouseEvent); } else if (pMouseEvent->button() == Qt::LeftButton) { m_bMousePressed = true; m_posMouse = pMouseEvent->pos(); m_lastDragValue = double(value()); emit sliderPressed(); } else if (pMouseEvent->button() == Qt::MidButton) { // Reset to default value... if (m_iDefaultValue < minimum() || m_iDefaultValue > maximum()) m_iDefaultValue = (maximum() + minimum()) / 2; setValue(m_iDefaultValue); } } void Knob::mouseMoveEvent ( QMouseEvent *pMouseEvent ) { if (m_dialMode == QDialMode) { QDial::mouseMoveEvent(pMouseEvent); return; } if (!m_bMousePressed) return; const QPoint& posMouse = pMouseEvent->pos(); int xdelta = posMouse.x() - m_posMouse.x(); int ydelta = posMouse.y() - m_posMouse.y(); double angleDelta = mouseAngle(posMouse) - mouseAngle(m_posMouse); int iNewValue = value(); switch (m_dialMode) { case LinearMode: iNewValue = int(m_lastDragValue + xdelta - ydelta); break; case AngularMode: default: // Forget about the drag origin to be robust on full rotations if (angleDelta > +180.0) angleDelta = angleDelta - 360.0; if (angleDelta < -180.0) angleDelta = angleDelta + 360.0; m_lastDragValue += double(maximum() - minimum()) * angleDelta / 270.0; if (m_lastDragValue > double(maximum())) m_lastDragValue = double(maximum()); if (m_lastDragValue < double(minimum())) m_lastDragValue = double(minimum()); m_posMouse = posMouse; iNewValue = int(m_lastDragValue + 0.5); break; } setValue(iNewValue); update(); emit sliderMoved(value()); } void Knob::mouseReleaseEvent ( QMouseEvent *pMouseEvent ) { if (m_dialMode == QDialMode) { QDial::mouseReleaseEvent(pMouseEvent); } else if (m_bMousePressed) { m_bMousePressed = false; } } void Knob::wheelEvent ( QWheelEvent *pWheelEvent ) { if (m_dialMode == QDialMode) { QDial::wheelEvent(pWheelEvent); } else { int iValue = value(); if (pWheelEvent->delta() > 0) iValue -= pageStep(); else iValue += pageStep(); if (iValue > maximum()) iValue = maximum(); else if (iValue < minimum()) iValue = minimum(); setValue(iValue); } } void Knob::setValue(int val) { QDial::setValue(val); QString tip = QString::number(value()); setToolTip(tip); QToolTip::showText(QCursor::pos(), tip, this); } // end of knob.cpp kmetronome-0.10.1/src/CMakeLists.txt0000644000175000001440000000471511760763113016344 0ustar pedrousers# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2012 Pedro Lopez-Cabanillas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA IF(NOT KMETRONOME_SOURCE_DIR) MESSAGE(FATAL_ERROR "You need to run cmake or ccmake at the root directory") ENDIF(NOT KMETRONOME_SOURCE_DIR) IF(USE_PCH) ADD_PRECOMPILED_HEADER(precompiled_headers qt_kde.h) ENDIF(USE_PCH) INCLUDE_DIRECTORIES( ${ALSA_INC_DIR} ${DRUMSTICK_INC_DIR} ) LINK_DIRECTORIES( ${ALSA_LIB_DIR} ${DRUMSTICK_LIB_DIR} ) SET(kmetronome_SRCS classicstyle.h classicstyle.cpp defs.h drumgrid.h drumgrid.cpp drumgridmodel.h drumgridmodel.cpp instrument.h instrument.cpp knob.h knob.cpp kmetronome.h kmetronome.cpp kmetronomeview.h kmetronomeview.cpp kmetropreferences.h kmetropreferences.cpp main.cpp qt_kde.h sequenceradapter.h sequenceradapter.cpp ) SET(kmetronome_UI drumgrid.ui kmetronomeviewbase.ui kmetropreferencesbase.ui ) QT4_ADD_RESOURCES(kmetronome_SRCS kmetronome.qrc) KDE4_ADD_UI_FILES(kmetronome_SRCS ${kmetronome_UI}) QT4_ADD_DBUS_ADAPTOR(kmetronome_SRCS net.sourceforge.kmetronome.xml kmetronome.h KMetronome) KDE4_ADD_EXECUTABLE(kmetronome ${kmetronome_SRCS}) IF(USE_PCH) ADD_DEPENDENCIES(kmetronome precompiled_headers) ENDIF(USE_PCH) TARGET_LINK_LIBRARIES(kmetronome ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDE4_KFILE_LIBS} ${ALSA_LIBS} ${DRUMSTICK_LIBS} ) # Install targets INSTALL( TARGETS kmetronome RUNTIME DESTINATION ${BIN_INSTALL_DIR}) INSTALL( FILES net.sourceforge.kmetronome.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR} ) INSTALL( FILES kmetronomeui.rc DESTINATION ${DATA_INSTALL_DIR}/kmetronome ) kmetronome-0.10.1/src/drumgridmodel.h0000644000175000001440000000471311760763113016611 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2012, Pedro Lopez-Cabanillas This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef DRUMGRIDMODEL_H #define DRUMGRIDMODEL_H #include "defs.h" #include #include class InstrumentList; class DrumGridModel : public QAbstractTableModel { Q_OBJECT public: DrumGridModel(QObject *parent = 0); int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; void setInstrumentList(InstrumentList* instruments); void loadKeyNames(const QString& ins, int bank, int patch); void fillSampleData(); void clearPattern(); void addPatternData(int key, const QStringList& row); void endOfPattern(); QStringList patternData(int row); QString patternKey(int row); QString patternHit(int row, int col); void updatePatternColumns(int columns); void setPatternFigure(int figure) { m_figure = figure; } int patternFigure() { return m_figure; } void insertPatternRow(const QString& name); void removePatternRow(int row); QStringList keyNames(); public slots: void changeCell(const QModelIndex &index); void changeCell(const QModelIndex &index, const QString& newValue); private: int m_columns; int m_figure; QString m_lastValue; InstrumentList* m_insList; QMap m_keyNames; QList m_modelData; QList m_tempData; QList m_keys; QList m_tempKeys; }; #endif /* DRUMGRIDMODEL_H */ kmetronome-0.10.1/src/drumgrid.h0000644000175000001440000000572411760763113015573 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2012, Pedro Lopez-Cabanillas This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef DRUMGRID_H #define DRUMGRID_H #include "defs.h" #include #include #include #include #include namespace Ui { class DrumGrid; } namespace drumstick { class MidiClient; class MidiPort; class MidiQueue; class SequencerEvent; } class SequencerAdapter; class DrumGridModel; using namespace drumstick; class DrumGrid : public KDialog { Q_OBJECT public: DrumGrid(QWidget *parent = 0); virtual ~DrumGrid(); void setSequencer(SequencerAdapter* seq); void setModel(DrumGridModel* model); void subscribe(const QString& portName); void addShortcut(const QKeySequence& key, const QString& value); void addEditAction(const QString& name, const char* slot, const QKeySequence& key); void readPattern(); void readPattern(const QString& name); void writePattern(); void writePattern(const QString& name); void removePattern(const QString& name); void updateTempo(int newTempo); void showEvent(QShowEvent* event); void done(int r); QStringList patterns(); QString currentPattern() { return m_currentPattern; } void setFigure(int figure); void setInstrument(const QString& instrument); void enableWidgets(bool enable); public slots: void updateView(); void play(); void stop(); void slotTempoChanged(int newTempo); void slotColumnsChanged(int columns); void slotFigureChanged(int idx); void shortcutPressed(const QString& value); void updateDisplay(int bar, int beat); void patternChanged(int idx); void savePattern(); void removePattern(); void addRow(); void removeRow(); void gridContextMenu( const QPoint& ); void slotCut(); void slotCopy(); void slotPaste(); signals: void signalUpdate(int bar, int beat); private: Ui::DrumGrid *m_ui; SequencerAdapter *m_seq; DrumGridModel* m_model; int m_figure; int m_columns; unsigned long m_tick; QSignalMapper* m_mapper; QVector m_shortcuts; QString m_currentPattern; QMenu* m_popup; }; #endif // DRUMGRID_H kmetronome-0.10.1/src/kmetropreferencesbase.ui0000644000175000001440000003632511760763113020523 0ustar pedrousers Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012 Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA KMetroPreferencesBase 0 0 378 310 If this checkbox is activated, the the program will remember the connections for the input and output ports, and try to reconnect them at program startup. Automatic ports connection on startup 0 0 160 22 Optional input port conn: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_in_connection 0 0 This is the optional connection for the MIDI IN port. 0 0 160 22 Output port connection: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_out_connection 0 0 This is the mandatory connection for the MIDI OUT port Output instrument: m_instrument 0 0 This is the definition of the instrument connected to the MIDI OUT port Bank: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter m_bank This is the Bank of the selected MIDI program 0 0 75 17 Channel: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_channel This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. 1 16 10 0 0 75 17 Program: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_program 0 0 This is the MIDI program 75 17 Resolution: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_resolution This is the MIDI time resolution (number of ticks in a quarter note) 48 960 90 17 Weak note: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_weak_note 0 0 This is the sound of the weak notes for the automatic patterns 90 17 Note duration: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_duration This is the note duration in ticks, when using NOTE OFF events 1 960 10 90 17 Strong note: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false m_strong_note 0 0 This is the sound of the strong notes for the automatic patterns Optional setting to send NOTE OFF events Send NOTE OFF events true Qt::Horizontal QSizePolicy::Expanding 88 33 If this option is activated, the knobs are drawn using a custom style Styled Knobs true qPixmapFromMimeSource KComboBox QComboBox
kcombobox.h
KIntSpinBox QSpinBox
knuminput.h
m_autoconn m_in_connection m_out_connection m_instrument m_bank m_channel m_program m_resolution m_weak_note m_duration m_strong_note m_use_noteoff m_styledknobs kcombobox.h knuminput.h m_use_noteoff toggled(bool) m_duration setEnabled(bool) 129 296 158 259
kmetronome-0.10.1/src/defs.h0000644000175000001440000000454011760763113014672 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software); you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation); either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY); without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program); if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #ifndef DEFS_H #define DEFS_H #include const int TEMPO_MIN(25); const int TEMPO_MAX(250); const int TEMPO_DEFAULT(100); const int NOTE_DURATION(10); const int RHYTHM_TS_NUM(4); const int RHYTHM_TS_DEN(4); const int METRONOME_INSTRUMENT(0); const int METRONOME_BANK(0); const int METRONOME_PROGRAM(0); const int METRONOME_STRONG_NOTE(34); const int METRONOME_WEAK_NOTE(33); const int METRONOME_CHANNEL(9); const int METRONOME_VELOCITY(100); const int METRONOME_RESOLUTION(120); const int METRONOME_VOLUME(100); const int METRONOME_PAN(64); const int TRANSPORT_PLAY(0); const int TRANSPORT_STOP(1); const int TRANSPORT_CONT(2); const int VOLUME_CC(7); const int PAN_CC(10); const int MSB_CC(0); const int LSB_CC(0x20); const int PATTERN_FIGURE(16); const int PATTERN_COLUMNS(16); const QString QSTR_PATTERN("Pattern_"); const QString QSTR_FIGURE("Figure"); const QString QSTR_BEATS("Beats"); #endif /*DEFS_H*/ kmetronome-0.10.1/src/classicstyle.cpp0000644000175000001440000001341311760763113017005 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012, Pedro Lopez-Cabanillas Based on an original design by Thorsten Wilms. Implemented as a widget for the Rosegarden MIDI and audio sequencer and notation editor by Chris Cannam. Extracted into a standalone Qt3 widget by Pedro Lopez-Cabanillas and adapted for use in QSynth. Ported to Qt4 by Chris Cannam. Adapted as a QStyle by Pedro Lopez-Cabanillas. For this file, the following copyright notices are also applicable: This file copyright 2003-2006 Chris Cannam, copyright 2005,2008 Pedro Lopez-Cabanillas, copyright 2006 Queen Mary, University of London. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; If not, see . */ #include "classicstyle.h" #include #include #include #define DIAL_MIN (0.25 * M_PI) #define DIAL_MAX (1.75 * M_PI) #define DIAL_RANGE (DIAL_MAX - DIAL_MIN) static void drawTick(QPainter *p, float angle, int size, bool internal) { float hyp = float(size) / 2.0; float x0 = hyp - (hyp - 1) * sin(angle); float y0 = hyp + (hyp - 1) * cos(angle); if (internal) { float len = hyp / 4; float x1 = hyp - (hyp - len) * sin(angle); float y1 = hyp + (hyp - len) * cos(angle); p->drawLine(int(x0), int(y0), int(x1), int(y1)); } else { float len = hyp / 4; float x1 = hyp - (hyp + len) * sin(angle); float y1 = hyp + (hyp + len) * cos(angle); p->drawLine(int(x0), int(y0), int(x1), int(y1)); } } void ClassicStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const { if (cc != QStyle::CC_Dial) { QCommonStyle::drawComplexControl(cc, opt, p, widget); return; } const QStyleOptionSlider *dial = qstyleoption_cast(opt); if (dial == NULL) return; float angle = DIAL_MIN + (DIAL_RANGE * (float(dial->sliderValue - dial->minimum) / (float(dial->maximum - dial->minimum)))); int degrees = int(angle * 180.0 / M_PI); int ns = dial->tickInterval; int numTicks = 1 + (dial->maximum + ns - dial->minimum) / ns; int size = dial->rect.width() < dial->rect.height() ? dial->rect.width() : dial->rect.height(); int scale = 1; int width = size * scale; int indent = (int)(width * 0.15 + 1); QPalette pal = opt->palette; QColor knobColor = pal.mid().color(); //pal.background().color(); QColor meterColor = (dial->state & State_Enabled) ? pal.highlight().color() : pal.mid().color(); QPen pen; QColor c; p->save(); p->setRenderHint(QPainter::Antialiasing, true); p->translate(1+(dial->rect.width()-size)/2, 1+(dial->rect.height()-size)/2); // Knob body and face... pen.setColor(knobColor); pen.setWidth(scale * 2); pen.setCapStyle(Qt::FlatCap); p->setPen(pen); QRadialGradient gradient(size/2, size/2, size-indent, size/2-indent, size/2-indent); gradient.setColorAt(0, knobColor.light()); gradient.setColorAt(1, knobColor.dark()); p->setBrush(gradient); p->drawEllipse(indent, indent, width-2*indent, width-2*indent); // The bright metering bit... c = meterColor; pen.setColor(c); pen.setWidth(indent); p->setPen(pen); int arcLen = -(degrees - 45) * 16; if (arcLen == 0) arcLen = -16; p->drawArc(indent/2, indent/2, width-indent, width-indent, (180 + 45) * 16, arcLen); p->setBrush(Qt::NoBrush); // Tick notches... if (dial->subControls & QStyle::SC_DialTickmarks) { pen.setColor(pal.dark().color()); pen.setWidth(scale); p->setPen(pen); for (int i = 0; i < numTicks; ++i) { int div = numTicks; if (div > 1) --div; drawTick(p, DIAL_MIN + (DIAL_MAX - DIAL_MIN) * i / div, width, true); } } // Shadowing... pen.setWidth(scale); p->setPen(pen); // Knob shadow... int shadowAngle = -720; c = knobColor.dark(); for (int arc = 120; arc < 2880; arc += 240) { pen.setColor(c); p->setPen(pen); p->drawArc(indent, indent, width-2*indent, width-2*indent, shadowAngle + arc, 240); p->drawArc(indent, indent, width-2*indent, width-2*indent, shadowAngle - arc, 240); c = c.light(110); } // Scale shadow... shadowAngle = 2160; c = pal.dark().color(); for (int arc = 120; arc < 2880; arc += 240) { pen.setColor(c); p->setPen(pen); p->drawArc(scale/2, scale/2, width-scale, width-scale, shadowAngle + arc, 240); p->drawArc(scale/2, scale/2, width-scale, width-scale, shadowAngle - arc, 240); c = c.light(108); } // Undraw the bottom part... pen.setColor(pal.background().color()); pen.setWidth(scale * 4); p->setPen(pen); p->drawArc(scale/2, scale/2, width-scale, width-scale, -45 * 16, -90 * 16); // Pointer notch... float hyp = float(width) / 2.0; float len = hyp - indent; --len; float x0 = hyp; float y0 = hyp; float x = hyp - len * sin(angle); float y = hyp + len * cos(angle); c = pal.dark().color(); pen.setColor((dial->state & State_Enabled) ? c.dark(130) : c); pen.setWidth(scale * 2); p->setPen(pen); p->drawLine(int(x0), int(y0), int(x), int(y)); // done p->restore(); } kmetronome-0.10.1/src/sequenceradapter.h0000644000175000001440000001456411760763113017313 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #ifndef SEQUENCERADAPTER_H #define SEQUENCERADAPTER_H namespace drumstick { class MidiPort; class MidiQueue; class SequencerEvent; }; #include class DrumGridModel; using namespace drumstick; const int TAG_FIXED(0); const int TAG_WEAK(1); const int TAG_STRONG(2); class SequencerAdapter : public QObject, public SequencerEventHandler { Q_OBJECT public: SequencerAdapter(QObject *parent); virtual ~SequencerAdapter(); void setBank(int newValue) { m_bank = newValue; } void setProgram(int newValue) { m_program = newValue; } void setWeakNote(int newValue) { m_weak_note = newValue; } void setStrongNote(int newValue) { m_strong_note = newValue; } void setWeakVelocity(int newValue) { m_weak_velocity = newValue; } void setStrongVelocity(int newValue) { m_strong_velocity = newValue; } void setVolume(int newValue) { m_volume = newValue; } void setBalance(int newValue) { m_balance = newValue; } void setChannel(int newValue) { m_channel = newValue; } void setResolution(int newValue) { m_resolution = newValue; } void setBpm(int newValue) { m_bpm = newValue; } void setRhythmNumerator(int newValue) { m_ts_num = newValue; } void setRhythmDenominator(int newValue) { m_ts_div = newValue; } void setAutoConnect(bool newValue) { m_autoconnect = newValue; } void setOutputConn(QString newValue) { m_outputConn = newValue; } void setInputConn(QString newValue) { m_inputConn = newValue; } void setNoteDuration(int newValue) { m_noteDuration = newValue; } void setSendNoteOff(bool newValue) { m_useNoteOff = newValue; } void setPatternMode(bool newValue) { m_patternMode = newValue; } void setBankSelMethod(int newValue) { m_bankSelMethod = newValue; } void setModel(DrumGridModel* model) { m_model = model; } int getBank() { return m_bank; } int getProgram() { return m_program; } int getWeakNote() { return m_weak_note; } int getStrongNote() { return m_strong_note; } int getWeakVelocity() { return m_weak_velocity; } int getStrongVelocity() { return m_strong_velocity; } int getVolume() { return m_volume; } int getBalance() { return m_balance; } int getChannel() { return m_channel; } int getResolution() { return m_resolution; } int getBpm() { return m_bpm; } int getRhythmNumerator() { return m_ts_num; } int getRhythmDenominator() { return m_ts_div; } bool getAutoConnect() { return m_autoconnect; } bool isPlaying() { return m_playing; } QString getOutputConn() { return m_outputConn; } QString getInputConn() { return m_inputConn; } int getNoteDuration() { return m_noteDuration; } bool getSendNoteOff() { return m_useNoteOff; } bool getPatternMode() { return m_patternMode; } int getBankSelMethod() { return m_bankSelMethod; } void sendControlChange( int cc, int value ); void sendInitialControls(); void metronome_start(); void metronome_stop(); void metronome_continue(); void metronome_set_bank(); void metronome_set_program(); void metronome_set_tempo(); void metronome_set_rhythm(); void metronome_set_controls(); void connect_output(); void disconnect_output(); void connect_input(); void disconnect_input(); QStringList inputConnections(); QStringList outputConnections(); int decodeVelocity(const QString drumVel); int decodeTag(const QString drumVel); void parse_sysex(SequencerEvent *ev); void metronome_note(int note, int vel, int tick, int tag); void metronome_echo(int tick, int ev_type); void metronome_simple_pattern(int tick); void metronome_grid_pattern(int tick); void metronome_event_output(SequencerEvent* ev); void metronome_note_output(SequencerEvent* ev); void metronome_schedule_event(SequencerEvent* ev, int tick); int calc_lsb(int x); int calc_msb(int x); //public Q_SLOTS: // void sequencerEvent(SequencerEvent *ev); // SequencerEventHandler method void handleSequencerEvent(SequencerEvent *ev); signals: void signalUpdate(int,int); void signalPlay(); void signalStop(); void signalCont(); void signalNotation(int,int); private: MidiClient* m_Client; MidiPort* m_Port; MidiQueue* m_Queue; DrumGridModel* m_model; int m_clientId; int m_inputPortId; int m_outputPortId; int m_queueId; int m_bar; int m_beat; int m_instrument; int m_bank; int m_program; int m_weak_note; int m_strong_note; int m_weak_velocity; int m_strong_velocity; int m_channel; int m_volume; int m_balance; int m_resolution; int m_bpm; int m_ts_num; /* time signature: numerator */ int m_ts_div; /* time signature: denominator */ int m_noteDuration; int m_bankSelMethod; int m_patternDuration; bool m_autoconnect; bool m_playing; bool m_useNoteOff; bool m_patternMode; QString m_outputConn; QString m_inputConn; QString NO_CONNECTION; }; #endif kmetronome-0.10.1/src/kmetropreferences.cpp0000644000175000001440000001271411760763113020031 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #include "kmetropreferences.h" KMetroPreferences::KMetroPreferences(QWidget *parent) : KDialog(parent) { QWidget* widget = new QWidget(this); m_ui.setupUi(widget); setMainWidget(widget); setCaption(i18n("Preferences")); connect( m_ui.m_instrument, SIGNAL(currentIndexChanged(int)), SLOT(slotInstrumentChanged(int))); connect( m_ui.m_bank, SIGNAL(currentIndexChanged(int)), SLOT(slotBankChanged(int))); connect( m_ui.m_program, SIGNAL(currentIndexChanged(int)), SLOT(slotProgramChanged(int))); } KMetroPreferences::~KMetroPreferences() {} void KMetroPreferences::setOutputConnection(QString newValue) { int index = m_ui.m_out_connection->findText(newValue); if (index >= 0) { m_ui.m_out_connection->setCurrentIndex(index); } } void KMetroPreferences::setInputConnection(QString newValue) { int index = m_ui.m_in_connection->findText(newValue); if (index >= 0) { m_ui.m_in_connection->setCurrentIndex(index); } } void KMetroPreferences::fillInstruments(InstrumentList* instruments) { m_insList = instruments; InstrumentList::ConstIterator it; for(it = m_insList->constBegin(); it != m_insList->constEnd(); ++it) { //kDebug() << it.key(); m_ui.m_instrument->addItem(it.key()); } } void KMetroPreferences::slotInstrumentChanged(int /*idx*/) { QString name = m_ui.m_instrument->currentText(); m_ins = m_insList->value(name); const InstrumentPatches& patches = m_ins.patches(); InstrumentPatches::ConstIterator j; m_ui.m_bank->clear(); m_ui.m_program->clear(); m_ui.m_weak_note->clear(); m_ui.m_strong_note->clear(); for( j = patches.constBegin(); j != patches.constEnd(); ++j ) { InstrumentData patch = j.value(); m_ui.m_bank->addItem(patch.name(), j.key()); } } void KMetroPreferences::slotBankChanged(int idx) { m_ui.m_program->clear(); m_ui.m_weak_note->clear(); m_ui.m_strong_note->clear(); if (idx < 0) return; int bank = m_ui.m_bank->itemData(idx).toInt(); const InstrumentData& patch = m_ins.patch(bank); InstrumentData::ConstIterator k; for( k = patch.constBegin(); k != patch.constEnd(); ++k ) { m_ui.m_program->addItem(k.value(), k.key()); } } void KMetroPreferences::slotProgramChanged(int idx) { if (idx < 0) return; int bank = m_ui.m_bank->itemData(m_ui.m_bank->currentIndex()).toInt(); int patch = m_ui.m_program->itemData(idx).toInt(); m_ui.m_weak_note->clear(); m_ui.m_strong_note->clear(); const InstrumentData& notes = m_ins.notes(bank, patch); InstrumentData::ConstIterator k; for( k = notes.constBegin(); k != notes.constEnd(); ++k ) { m_ui.m_weak_note->addItem(k.value(), k.key()); m_ui.m_strong_note->addItem(k.value(), k.key()); } } int KMetroPreferences::getWeakNote() { return m_ui.m_weak_note->itemData( m_ui.m_weak_note->currentIndex() ).toInt(); } int KMetroPreferences::getStrongNote() { return m_ui.m_strong_note->itemData( m_ui.m_strong_note->currentIndex() ).toInt(); } void KMetroPreferences::setWeakNote(int newValue) { QString test = QString::number(newValue); int idx = m_ui.m_weak_note->findData(test); m_ui.m_weak_note->setCurrentIndex(idx); } void KMetroPreferences::setStrongNote(int newValue) { QString test = QString::number(newValue); int idx = m_ui.m_strong_note->findData(test); m_ui.m_strong_note->setCurrentIndex(idx); } QString KMetroPreferences::getInstrumentName() { return m_ui.m_instrument->currentText(); } QString KMetroPreferences::getProgramName() { return m_ui.m_program->currentText(); } QString KMetroPreferences::getBankName() { return m_ui.m_bank->currentText(); } void KMetroPreferences::setInstrumentName(QString name) { m_ui.m_instrument->setCurrentItem(name, false); } void KMetroPreferences::setProgramName(QString name) { m_ui.m_program->setCurrentItem(name, false); } void KMetroPreferences::setBankName(QString name) { m_ui.m_bank->setCurrentItem(name, false); } kmetronome-0.10.1/src/instrument.h0000644000175000001440000002234511760763113016164 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012 Pedro Lopez-Cabanillas For this file, the following copyright notice is also applicable: Copyright (C) 2005-2012, rncbc aka Rui Nuno Capela. All rights reserved. See http://qtractor.sourceforge.net This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* Library of compatible instrument definitions: ftp://ftp.cakewalk.com/pub/InstrumentDefinitions/ */ #ifndef INSTRUMENT_H #define INSTRUMENT_H #include #include // Forward declarations. class QTextStream; //---------------------------------------------------------------------- // class InstrumentData -- instrument definition data classes. // class InstrumentData { public: typedef QMap DataMap; // Constructor. InstrumentData() : m_pData(new DataRef()) {} // Copy constructor. InstrumentData(const InstrumentData& data) { attach(data); } // Destructor. ~InstrumentData() { detach(); } // Assignment operator. InstrumentData& operator= (const InstrumentData& data) { if (m_pData != data.m_pData) { detach(); attach(data); } return *this; } // Accessor operator. QString& operator[] (int iIndex) const { return m_pData->map[iIndex]; } // Property accessors. void setName(const QString& sName) { m_pData->name = sName; } const QString& name() const { return m_pData->name; } void setBasedOn(const QString& sBasedOn) { m_pData->basedOn = sBasedOn; } const QString& basedOn() const { return m_pData->basedOn; } // Indirect iterator stuff. typedef DataMap::Iterator Iterator; Iterator begin() { return m_pData->map.begin(); } Iterator end() { return m_pData->map.end(); } typedef DataMap::ConstIterator ConstIterator; ConstIterator constBegin() const { return m_pData->map.constBegin(); } ConstIterator constEnd() const { return m_pData->map.constEnd(); } unsigned int count() const { return m_pData->map.count(); } bool contains(int iKey) const { return m_pData->map.contains(iKey); } protected: // Copy/clone method. void attach(const InstrumentData& data) { m_pData = data.m_pData; m_pData->refCount++; } // Destroy method. void detach() { if (--(m_pData->refCount) == 0) delete m_pData; } private: // The ref-counted data. struct DataRef { // Default payload constructor. DataRef() : refCount(1) {}; // Payload members. int refCount; QString name; QString basedOn; DataMap map; } * m_pData; }; class InstrumentDataList : public QMap {}; class InstrumentPatches : public QMap {}; class InstrumentNotes : public QMap {}; class InstrumentKeys : public QMap {}; class InstrumentDrumFlags : public QMap {}; class InstrumentDrums : public QMap {}; //---------------------------------------------------------------------- // class Instrument -- instrument definition instance class. // class Instrument { public: // Constructor. Instrument() : m_pData(new DataRef()) {} // Copy constructor. Instrument(const Instrument& instr) { attach(instr); } // Destructor. ~Instrument() { detach(); } // Assignment operator. Instrument& operator= (const Instrument& instr) { if (m_pData != instr.m_pData) { detach(); attach(instr); } return *this; } // Instrument title property accessors. void setInstrumentName(const QString& sInstrumentName) { m_pData->instrumentName = sInstrumentName; } const QString& instrumentName() const { return m_pData->instrumentName; } // BankSelMethod accessors. void setBankSelMethod(int iBankSelMethod) { m_pData->bankSelMethod = iBankSelMethod; } int bankSelMethod() const { return m_pData->bankSelMethod; } void setUsesNotesAsControllers(bool bUsesNotesAsControllers) { m_pData->usesNotesAsControllers = bUsesNotesAsControllers; } bool usesNotesAsControllers() const { return m_pData->usesNotesAsControllers; } // Patch banks accessors. const InstrumentPatches& patches() const { return m_pData->patches; } const InstrumentData& patch(int iBank) const; void setPatch(int iBank, const InstrumentData& patch) { m_pData->patches[iBank] = patch; } // Control names accessors. void setControlName(const QString& sControlName) { m_pData->control.setName(sControlName); } const QString& controlName() const { return m_pData->control.name(); } void setControl(const InstrumentData& control) { m_pData->control = control; } const InstrumentData& control() const { return m_pData->control; } // RPN names accessors. void setRpnName(const QString& sRpnName) { m_pData->rpn.setName(sRpnName); } const QString& rpnName() const { return m_pData->rpn.name(); } void setRpn(const InstrumentData& rpn) { m_pData->rpn = rpn; } const InstrumentData& rpn() const { return m_pData->rpn; } // NRPN names accessors. void setNrpnName(const QString& sNrpnName) { m_pData->nrpn.setName(sNrpnName); } const QString& nrpnName() const { return m_pData->nrpn.name(); } void setNrpn(const InstrumentData& nrpn) { m_pData->nrpn = nrpn; } const InstrumentData& nrpn() const { return m_pData->nrpn; } // Keys banks accessors. const InstrumentData& notes(int iBank, int iProg) const; void setNotes(int iBank, int iProg, const InstrumentData& notes) { m_pData->keys[iBank][iProg] = notes; } const InstrumentKeys& keys() const { return m_pData->keys; } // Drumflags banks accessors. bool isDrum(int iBank, int iProg) const; void setDrum(int iBank, int iProg, bool bDrum) { m_pData->drums[iBank][iProg] = (int) bDrum; } const InstrumentDrums& drums() const { return m_pData->drums; } protected: // Copy/clone method. void attach(const Instrument& instr) { m_pData = instr.m_pData; m_pData->refCount++; } // Destroy method. void detach() { if (--(m_pData->refCount) == 0) delete m_pData; } private: // The ref-counted data. struct DataRef { // Default payload constructor. DataRef() : refCount(1), bankSelMethod(0), usesNotesAsControllers(false) {}; // Payload members. int refCount; int bankSelMethod; bool usesNotesAsControllers; QString instrumentName; InstrumentPatches patches; InstrumentData control; InstrumentData rpn; InstrumentData nrpn; InstrumentKeys keys; InstrumentDrums drums; } * m_pData; }; //---------------------------------------------------------------------- // class InstrumentList -- A Cakewalk .ins file container class. // class InstrumentList : public QMap { public: // Open file methods. bool load(const QString& sFilename); bool save(const QString& sFilename); // The official loaded file list. const QStringList& files() const; // Manage a file list (out of sync) void appendFile(const QString& sFilename) { m_files.append(sFilename); } void removeFile(const QString& sFilename) { int iFile = m_files.indexOf(sFilename); if (iFile >= 0) m_files.removeAt(iFile); } // Patch Names definition accessors. const InstrumentDataList& patches() const { return m_patches; } const InstrumentData& patch(const QString& sName) { return m_patches[sName]; } // Note Names definition accessors. const InstrumentDataList& notes() const { return m_notes; } InstrumentData& note(const QString& sName) { return m_notes[sName]; } // Controller Names definition accessors. const InstrumentDataList& controllers() const { return m_controllers; } InstrumentData& controller(const QString& sName) { return m_controllers[sName]; } // RPN Names definition accessors. const InstrumentDataList& rpns() const { return m_rpns; } InstrumentData& rpn(const QString& sName) { return m_rpns[sName]; } // NRPN Names definition accessors. const InstrumentDataList& nrpns() const { return m_nrpns; } InstrumentData& nrpn(const QString& sName) { return m_nrpns[sName]; } // Clear all contents. void clearAll(); // Special instrument list merge method. void merge(const InstrumentList& instruments); protected: // Internal instrument data list save method helpers. void saveDataList(QTextStream& ts, const InstrumentDataList& list); void saveData(QTextStream& ts, const InstrumentData& data); // Special instrument data list merge method. void mergeDataList(InstrumentDataList& dst, const InstrumentDataList& src); private: // To hold the names definition lists. InstrumentDataList m_patches; InstrumentDataList m_notes; InstrumentDataList m_controllers; InstrumentDataList m_rpns; InstrumentDataList m_nrpns; // To old the official file list. QStringList m_files; }; #endif // INSTRUMENT_H kmetronome-0.10.1/src/knob.h0000644000175000001440000000507611760763113014707 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012, Pedro Lopez-Cabanillas For this file, the following copyright notice is also applicable: Copyright (C) 2005-2012, rncbc aka Rui Nuno Capela. All rights reserved. See http://qsynth.sourceforge.net This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; If not, see . */ #ifndef KNOB_H #define KNOB_H #include #include //------------------------------------------------------------------------- // Knob - A better QDial for QSynth. class Knob : public QDial { Q_OBJECT Q_PROPERTY( int defaultValue READ getDefaultValue WRITE setDefaultValue ) Q_PROPERTY( DialMode dialMode READ getDialMode WRITE setDialMode ) Q_ENUMS(DialMode) public: // Constructor. Knob(QWidget *pParent = 0); // Destructor. ~Knob(); int getDefaultValue() const { return m_iDefaultValue; } // Knob dial mode behavior: // QDialMode - Old QDial BEHAVIOUR. // AngularMode - Angularly relative to widget center. // LinearMode - Proportionally to distance in one ortogonal axis. enum DialMode { QDialMode, AngularMode, LinearMode }; DialMode getDialMode() const { return m_dialMode; } public slots: // Set default (mid) value. void setDefaultValue(int iDefaultValue); // Set knob dial mode behavior. void setDialMode(DialMode dialMode); void setValue(int val); protected: // Mouse angle determination. double mouseAngle(const QPoint& pos); // Alternate mouse behavior event handlers. virtual void mousePressEvent(QMouseEvent *pMouseEvent); virtual void mouseMoveEvent(QMouseEvent *pMouseEvent); virtual void mouseReleaseEvent(QMouseEvent *pMouseEvent); virtual void wheelEvent(QWheelEvent *pWheelEvent); private: // Default (mid) value. int m_iDefaultValue; // Knob dial mode behavior. DialMode m_dialMode; // Alternate mouse behavior tracking. bool m_bMousePressed; QPoint m_posMouse; // Just for more precission on the movement double m_lastDragValue; }; #endif // KNOB_H kmetronome-0.10.1/src/drumgridmodel.cpp0000644000175000001440000001461311760763113017144 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2012, Pedro Lopez-Cabanillas This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "drumgridmodel.h" #include "instrument.h" #include const QString DEFVAL("f"); DrumGridModel::DrumGridModel(QObject *parent) : QAbstractTableModel(parent), m_columns(PATTERN_COLUMNS), m_figure(PATTERN_FIGURE), m_lastValue(DEFVAL), m_insList(NULL) { m_modelData.clear(); m_keys.clear(); } void DrumGridModel::setInstrumentList(InstrumentList* instruments) { m_insList = instruments; } void DrumGridModel::loadKeyNames(const QString& instrument, int bank, int patch) { if (m_insList != NULL) { Instrument ins = m_insList->value(instrument); const InstrumentData& notes = ins.notes(bank, patch); InstrumentData::ConstIterator k; m_keyNames.clear(); for( k = notes.constBegin(); k != notes.constEnd(); ++k ) m_keyNames[k.key()] = k.value(); } } void DrumGridModel::fillSampleData() { beginInsertRows(QModelIndex(), 0, 4); m_modelData.insert(0, QString(",p,,,,p,,,,p,,,,p,,").split(',')); m_modelData.insert(1, QString("f,,,p,f,,,p,f,,,p,f,,,p").split(',')); m_modelData.insert(2, QString(",,,,,,,,,,,,,4,4,").split(',')); m_modelData.insert(3, QString(",,,,f,,,,,,,,f,,,").split(',')); m_modelData.insert(4, QString("f,,,,p,,,,f,,,,p,,,").split(',')); m_keys.insert(0, 46); m_keys.insert(1, 42); m_keys.insert(2, 39); m_keys.insert(3, 38); m_keys.insert(4, 36); endInsertRows(); setPatternFigure(PATTERN_FIGURE); updatePatternColumns(PATTERN_COLUMNS); } int DrumGridModel::rowCount(const QModelIndex & /* parent */) const { return m_modelData.count(); } int DrumGridModel::columnCount(const QModelIndex & /* parent */) const { return m_columns; } QVariant DrumGridModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || role != Qt::DisplayRole || index.row() > m_modelData.count() || index.column() > m_columns ) return QVariant(); return m_modelData[index.row()][index.column()].trimmed(); } QVariant DrumGridModel::headerData(int section , Qt::Orientation orientation, int role) const { if (role == Qt::DisplayRole) { if ( orientation == Qt::Horizontal ) { int m = section % 10; if (m == 9) m = 0; else m++; return QString::number(m); } else { int k = m_keys.value(section, 0); if (m_keyNames.contains(k)) return m_keyNames[k]; else return QString::number(k); } } return QVariant(); } void DrumGridModel::changeCell(const QModelIndex &index) { QString after, before = m_modelData[index.row()][index.column()]; if (before.isEmpty()) after = m_lastValue; else after.clear(); changeCell(index, after); } void DrumGridModel::changeCell(const QModelIndex &index, const QString& newValue) { const QString validation("fp123456789"); if (index.isValid() && !m_modelData.isEmpty()) { QString cell = newValue; if (cell.length() > 1) cell = cell.left(1); if (cell.isNull() || validation.contains(cell)) { m_lastValue = m_modelData[index.row()][index.column()] = cell; emit dataChanged(index, index); } } } QStringList DrumGridModel::patternData(int row) { return m_modelData.value(row, QStringList()); } QString DrumGridModel::patternKey(int row) { return QString::number(m_keys.value(row, 0)); } void DrumGridModel::clearPattern() { m_modelData.clear(); m_keys.clear(); m_tempData.clear(); m_tempKeys.clear(); reset(); } void DrumGridModel::addPatternData(int key, const QStringList& row) { m_tempKeys.prepend(key); m_tempData.prepend(row); } void DrumGridModel::endOfPattern() { beginInsertRows(QModelIndex(), 0, m_tempData.count()-1); m_keys = m_tempKeys; m_modelData = m_tempData; endInsertRows(); } void DrumGridModel::updatePatternColumns(int columns) { int diff = m_columns - columns; if (diff == 0) return; if (diff > 0) { beginRemoveColumns(QModelIndex(), columns, m_columns-1); for(int i=0; i columns ) m_modelData[i].removeLast(); } else { beginInsertColumns(QModelIndex(), columns, columns-diff-1); for(int i=0; i 0) endRemoveColumns(); else endInsertColumns(); } QString DrumGridModel::patternHit(int row, int col) { if ((col < m_columns) && (row < m_modelData.size())) return m_modelData[row][col].trimmed(); return QString(); } void DrumGridModel::insertPatternRow(const QString& name) { int i = 0, j = 0, key = m_keyNames.key(name); QStringList data; for (i = 0; i < m_columns; ++i) data.append(QString()); while (j < m_keys.count() && m_keys[j] > key) j++; beginInsertRows(QModelIndex(), j, j); m_keys.insert(j, key); m_modelData.insert(j, data); endInsertRows(); } void DrumGridModel::removePatternRow(int row) { beginRemoveRows(QModelIndex(), row, row); m_modelData.removeAt(row); m_keys.removeAt(row); endRemoveRows(); } QStringList DrumGridModel::keyNames() { QStringList tmp = m_keyNames.values(); foreach(int key, m_keys) tmp.removeOne(m_keyNames[key]); return tmp; } kmetronome-0.10.1/src/instrument.cpp0000644000175000001440000003545011760763113016520 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012 Pedro Lopez-Cabanillas For this file, the following copyright notice is also applicable: Copyright (C) 2005-2012, rncbc aka Rui Nuno Capela. All rights reserved. See http://qtractor.sourceforge.net This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include "instrument.h" #include #include #include #include #include //---------------------------------------------------------------------- // class Instrument -- instrument definition instance class. // // Retrieve patch/program list for given bank address. const InstrumentData& Instrument::patch ( int iBank ) const { if (m_pData->patches.contains(iBank)) return m_pData->patches[iBank]; return m_pData->patches[-1]; } // Retrieve key/notes list for given (bank, prog) pair. const InstrumentData& Instrument::notes ( int iBank, int iProg ) const { if (m_pData->keys.contains(iBank)) { if (m_pData->keys[iBank].contains(iProg)) { return m_pData->keys[iBank][iProg]; } else { return m_pData->keys[iBank][-1]; } } else if (iBank >= 0) return notes(-1, iProg); return m_pData->keys[-1][-1]; } // Check if given (bank, prog) pair is a drum patch. bool Instrument::isDrum ( int iBank, int iProg ) const { if (m_pData->drums.contains(iBank)) { if (m_pData->drums[iBank].contains(iProg)) { return (bool) m_pData->drums[iBank][iProg]; } else { return (bool) m_pData->drums[iBank][-1]; } } else if (iBank >= 0) return isDrum(-1, iProg); return false; return isDrum(-1, iProg); } //---------------------------------------------------------------------- // class InstrumentList -- A Cakewalk .ins file container class. // // Clear all contents. void InstrumentList::clearAll (void) { clear(); m_patches.clear(); m_notes.clear(); m_controllers.clear(); m_rpns.clear(); m_nrpns.clear(); m_files.clear(); } // Special list merge method. void InstrumentList::merge ( const InstrumentList& instruments ) { // Maybe its better not merging to itself. if (this == &instruments) return; // Names data lists merge... mergeDataList(m_patches, instruments.patches()); mergeDataList(m_notes, instruments.notes()); mergeDataList(m_controllers, instruments.controllers()); mergeDataList(m_rpns, instruments.rpns()); mergeDataList(m_nrpns, instruments.nrpns()); // Instrument merge... InstrumentList::ConstIterator it; for (it = instruments.begin(); it != instruments.end(); ++it) { Instrument& instr = (*this)[it.key()]; instr = it.value(); } } // Special instrument data list merge method. void InstrumentList::mergeDataList ( InstrumentDataList& dst, const InstrumentDataList& src ) { InstrumentDataList::ConstIterator it; for (it = src.begin(); it != src.end(); ++it) dst[it.key()] = it.value(); } // The official loaded file list. const QStringList& InstrumentList::files (void) const { return m_files; } // File load method. bool InstrumentList::load ( const QString& sFilename ) { // Open and read from real file. QFile file(sFilename); if (!file.open(QIODevice::ReadOnly)) return false; enum FileSection { None = 0, PatchNames = 1, NoteNames = 2, ControlNames = 3, RpnNames = 4, NrpnNames = 5, InstrDefs = 6 } sect = None; Instrument *pInstrument = NULL; InstrumentData *pData = NULL; QRegExp rxTitle ("^\\[([^\\]]+)\\]$"); QRegExp rxData ("^([0-9]+)=(.*)$"); QRegExp rxBasedOn ("^BasedOn=(.+)$"); QRegExp rxBankSel ("^BankSelMethod=(0|1|2|3)$"); QRegExp rxUseNotes("^UsesNotesAsControllers=(0|1)$"); QRegExp rxControl ("^Control=(.+)$"); QRegExp rxRpn ("^RPN=(.+)$"); QRegExp rxNrpn ("^NRPN=(.+)$"); QRegExp rxPatch ("^Patch\\[([0-9]+|\\*)\\]=(.+)$"); QRegExp rxKey ("^Key\\[([0-9]+|\\*),([0-9]+|\\*)\\]=(.+)$"); QRegExp rxDrum ("^Drum\\[([0-9]+|\\*),([0-9]+|\\*)\\]=(0|1)$"); const QString s0_127("0..127"); const QString s1_128("1..128"); const QString s0_16383("0..16383"); const QString sAsterisk('*'); // Read the file. unsigned int iLine = 0; QTextStream ts(&file); while (!ts.atEnd()) { // Read the line. iLine++; QString sLine = ts.readLine().simplified(); // If not empty, nor a comment, call the server... if (sLine.isEmpty() || sLine[0] == ';') continue; // Check for section intro line... if (sLine[0] == '.') { if (sLine == ".Patch Names") { sect = PatchNames; // m_patches.clear(); m_patches[s0_127].setName(s0_127); m_patches[s1_128].setName(s1_128); } else if (sLine == ".Note Names") { sect = NoteNames; // m_notes.clear(); m_notes[s0_127].setName(s0_127); } else if (sLine == ".Controller Names") { sect = ControlNames; // m_controllers.clear(); m_controllers[s0_127].setName(s0_127); } else if (sLine == ".RPN Names") { sect = RpnNames; // m_rpns.clear(); m_rpns[s0_16383].setName(s0_16383); } else if (sLine == ".NRPN Names") { sect = NrpnNames; // m_nrpns.clear(); m_nrpns[s0_16383].setName(s0_16383); } else if (sLine == ".Instrument Definitions") { sect = InstrDefs; // clear(); } else { // Unknown section found... qWarning("%s(%d): %s: Unknown section.", sFilename.toUtf8().constData(), iLine, sLine.toUtf8().constData()); } // Go on... continue; } // Now it depends on the section... switch (sect) { case PatchNames: { if (rxTitle.exactMatch(sLine)) { // New patch name... const QString& sTitle = rxTitle.cap(1); pData = &(m_patches[sTitle]); pData->setName(sTitle); } else if (rxBasedOn.exactMatch(sLine)) { pData->setBasedOn(rxBasedOn.cap(1)); } else if (rxData.exactMatch(sLine)) { (*pData)[rxData.cap(1).toInt()] = rxData.cap(2); } else { qWarning("%s(%d): %s: Unknown .Patch Names entry.", sFilename.toUtf8().constData(), iLine, sLine.toUtf8().constData()); } break; } case NoteNames: { if (rxTitle.exactMatch(sLine)) { // New note name... const QString& sTitle = rxTitle.cap(1); pData = &(m_notes[sTitle]); pData->setName(sTitle); } else if (rxBasedOn.exactMatch(sLine)) { pData->setBasedOn(rxBasedOn.cap(1)); } else if (rxData.exactMatch(sLine)) { (*pData)[rxData.cap(1).toInt()] = rxData.cap(2); } else { qWarning("%s(%d): %s: Unknown .Note Names entry.", sFilename.toUtf8().constData(), iLine, sLine.toUtf8().constData()); } break; } case ControlNames: { if (rxTitle.exactMatch(sLine)) { // New controller name... const QString& sTitle = rxTitle.cap(1); pData = &(m_controllers[sTitle]); pData->setName(sTitle); } else if (rxBasedOn.exactMatch(sLine)) { pData->setBasedOn(rxBasedOn.cap(1)); } else if (rxData.exactMatch(sLine)) { (*pData)[rxData.cap(1).toInt()] = rxData.cap(2); } else { qWarning("%s(%d): %s: Unknown .Controller Names entry.", sFilename.toUtf8().constData(), iLine, sLine.toUtf8().constData()); } break; } case RpnNames: { if (rxTitle.exactMatch(sLine)) { // New RPN name... const QString& sTitle = rxTitle.cap(1); pData = &(m_rpns[sTitle]); pData->setName(sTitle); } else if (rxBasedOn.exactMatch(sLine)) { pData->setBasedOn(rxBasedOn.cap(1)); } else if (rxData.exactMatch(sLine)) { (*pData)[rxData.cap(1).toInt()] = rxData.cap(2); } else { qWarning("%s(%d): %s: Unknown .RPN Names entry.", sFilename.toUtf8().constData(), iLine, sLine.toUtf8().constData()); } break; } case NrpnNames: { if (rxTitle.exactMatch(sLine)) { // New NRPN name... const QString& sTitle = rxTitle.cap(1); pData = &(m_nrpns[sTitle]); pData->setName(sTitle); } else if (rxBasedOn.exactMatch(sLine)) { pData->setBasedOn(rxBasedOn.cap(1)); } else if (rxData.exactMatch(sLine)) { (*pData)[rxData.cap(1).toInt()] = rxData.cap(2); } else { qWarning("%s(%d): %s: Unknown .NRPN Names entry.", sFilename.toUtf8().constData(), iLine, sLine.toUtf8().constData()); } break; } case InstrDefs: { if (rxTitle.exactMatch(sLine)) { // New instrument definition... const QString& sTitle = rxTitle.cap(1); pInstrument = &((*this)[sTitle]); pInstrument->setInstrumentName(sTitle); } else if (rxBankSel.exactMatch(sLine)) { pInstrument->setBankSelMethod( rxBankSel.cap(1).toInt()); } else if (rxUseNotes.exactMatch(sLine)) { pInstrument->setUsesNotesAsControllers( (bool) rxBankSel.cap(1).toInt()); } else if (rxPatch.exactMatch(sLine)) { int iBank = (rxPatch.cap(1) == sAsterisk ? -1 : rxPatch.cap(1).toInt()); pInstrument->setPatch(iBank, m_patches[rxPatch.cap(2)]); } else if (rxControl.exactMatch(sLine)) { pInstrument->setControl(m_controllers[rxControl.cap(1)]); } else if (rxRpn.exactMatch(sLine)) { pInstrument->setRpn(m_rpns[rxRpn.cap(1)]); } else if (rxNrpn.exactMatch(sLine)) { pInstrument->setNrpn(m_nrpns[rxNrpn.cap(1)]); } else if (rxKey.exactMatch(sLine)) { int iBank = (rxKey.cap(1) == sAsterisk ? -1 : rxKey.cap(1).toInt()); int iProg = (rxKey.cap(2) == sAsterisk ? -1 : rxKey.cap(2).toInt()); pInstrument->setNotes(iBank, iProg, m_notes[rxKey.cap(3)]); } else if (rxDrum.exactMatch(sLine)) { int iBank = (rxDrum.cap(1) == sAsterisk ? -1 : rxDrum.cap(1).toInt()); int iProg = (rxDrum.cap(2) == sAsterisk ? -1 : rxKey.cap(2).toInt()); pInstrument->setDrum(iBank, iProg, (bool) rxDrum.cap(3).toInt()); } else { qWarning("%s(%d): %s: Unknown .Instrument Definitions entry.", sFilename.toUtf8().constData(), iLine, sLine.toUtf8().constData()); } break; } default: break; } } // Ok. We've read it all. file.close(); // We're in business... appendFile(sFilename); return true; } // File save method. bool InstrumentList::save ( const QString& sFilename ) { // Open and write into real file. QFile file(sFilename); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return false; // A visula separator line. const QString sepl = "; -----------------------------" "------------------------------------------------"; // Write the file. QTextStream ts(&file); ts << sepl << endl; ts << "; " << QObject::tr("Cakewalk Instrument Definition File") << endl; /* ts << ";" << endl; ts << "; " << _TITLE " - " << QObject::tr(_SUBTITLE) << endl; ts << "; " << QObject::tr("Version") << ": " _VERSION << endl; ts << "; " << QObject::tr("Build") << ": " __DATE__ " " __TIME__ << endl; */ ts << ";" << endl; ts << "; " << QObject::tr("File") << ": " << QFileInfo(sFilename).fileName() << endl; ts << "; " << QObject::tr("Date") << ": " << QDate::currentDate().toString("MMM dd yyyy") << " " << QTime::currentTime().toString("hh:mm:ss") << endl; ts << ";" << endl; // - Patch Names... ts << sepl << endl << endl; ts << ".Patch Names" << endl; saveDataList(ts, m_patches); // - Note Names... ts << sepl << endl << endl; ts << ".Note Names" << endl; saveDataList(ts, m_notes); // - Controller Names... ts << sepl << endl << endl; ts << ".Controller Names" << endl; saveDataList(ts, m_controllers); // - RPN Names... ts << sepl << endl << endl; ts << ".RPN Names" << endl; saveDataList(ts, m_rpns); // - NRPN Names... ts << sepl << endl << endl; ts << ".NRPN Names" << endl; saveDataList(ts, m_nrpns); // - Instrument Definitions... ts << sepl << endl << endl; ts << ".Instrument Definitions" << endl; ts << endl; InstrumentList::Iterator iter; for (iter = begin(); iter != end(); ++iter) { Instrument& instr = *iter; ts << "[" << instr.instrumentName() << "]" << endl; if (instr.bankSelMethod() > 0) ts << "BankSelMethod=" << instr.bankSelMethod() << endl; if (!instr.control().name().isEmpty()) ts << "Control=" << instr.control().name() << endl; if (!instr.rpn().name().isEmpty()) ts << "RPN=" << instr.rpn().name() << endl; if (!instr.nrpn().name().isEmpty()) ts << "NRPN=" << instr.nrpn().name() << endl; // - Patches... InstrumentPatches::ConstIterator pit; for (pit = instr.patches().begin(); pit != instr.patches().end(); ++pit) { int iBank = pit.key(); const QString sBank = (iBank < 0 ? QString("*") : QString::number(iBank)); ts << "Patch[" << sBank << "]=" << pit.value().name() << endl; } // - Keys... InstrumentKeys::ConstIterator kit; for (kit = instr.keys().begin(); kit != instr.keys().end(); ++kit) { int iBank = kit.key(); const QString sBank = (iBank < 0 ? QString("*") : QString::number(iBank)); const InstrumentNotes& notes = kit.value(); InstrumentNotes::ConstIterator nit; for (nit = notes.begin(); nit != notes.end(); ++nit) { int iProg = nit.key(); const QString sProg = (iProg < 0 ? QString("*") : QString::number(iProg)); ts << "Key[" << sBank << "," << sProg << "]=" << nit.value().name() << endl; } } // - Drums... InstrumentDrums::ConstIterator dit; for (dit = instr.drums().begin(); dit != instr.drums().end(); ++dit) { int iBank = dit.key(); const QString sBank = (iBank < 0 ? QString("*") : QString::number(iBank)); const InstrumentDrumFlags& flags = dit.value(); InstrumentDrumFlags::ConstIterator fit; for (fit = flags.begin(); fit != flags.end(); ++fit) { int iProg = fit.key(); const QString sProg = (iProg < 0 ? QString("*") : QString::number(iProg)); ts << "Drum[" << sBank << "," << sProg << "]=" << fit.value() << endl; } } ts << endl; } // Done. file.close(); return true; } void InstrumentList::saveDataList ( QTextStream& ts, const InstrumentDataList& list ) { ts << endl; InstrumentDataList::ConstIterator it; for (it = list.begin(); it != list.end(); ++it) { ts << "[" << it.value().name() << "]" << endl; saveData(ts, it.value()); } } void InstrumentList::saveData ( QTextStream& ts, const InstrumentData& data ) { if (!data.basedOn().isEmpty()) ts << "BasedOn=" << data.basedOn() << endl; InstrumentData::ConstIterator it; for (it = data.constBegin(); it != data.constEnd(); ++it) ts << it.key() << "=" << it.value() << endl; ts << endl; } kmetronome-0.10.1/src/kmetronomeview.cpp0000644000175000001440000001547711760763113017372 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #include "kmetronomeview.h" #include "kmetronome.h" #include "classicstyle.h" #include "knob.h" #include "defs.h" #include #include #include #include #include KmetronomeView::KmetronomeView(QWidget *parent) : QWidget(parent), Ui::KmetronomeViewBase(), m_dialStyle(0), m_patternMode(false) { setupUi(this); m_exitbtn->setIcon(KIcon("application-exit")); m_exitbtn->setFocusPolicy(Qt::NoFocus); m_configbtn->setIcon(KIcon("configure")); m_playbtn->setIcon(KIcon("media-playback-start")); m_playbtn->setShortcut( Qt::Key_MediaPlay ); m_stopbtn->setIcon(KIcon("media-playback-stop")); m_stopbtn->setShortcut( Qt::Key_MediaStop ); m_patternbtn->setIcon(KIcon("document-edit")); m_dialStyle = new ClassicStyle(); m_dialStyle->setParent(this); m_dial1->setDialMode(Knob::LinearMode); m_dial2->setDialMode(Knob::LinearMode); m_dial3->setDialMode(Knob::LinearMode); m_dial4->setDialMode(Knob::LinearMode); /** * Tempo reference: * http://www.music.vt.edu/musicdictionary/appendix/tempo/tempo1.html */ m_air->addItem("Larghissimo", 20); m_air->addItem("Largo", 40); m_air->addItem("Larghetto", 60); m_air->addItem("Adagio", 70); m_air->addItem("Andante", 90); m_air->addItem("Moderato", 110); m_air->addItem("Allegro", 120); m_air->addItem("Vivace", 160); m_air->addItem("Presto", 170); m_air->addItem("Prestissimo",200); m_air->setCurrentIndex(4); connect( m_exitbtn, SIGNAL(clicked()), kapp, SLOT(quit()) ); connect( m_configbtn, SIGNAL(clicked()), parent, SLOT(optionsPreferences()) ); connect( m_patternbtn, SIGNAL(clicked()), parent, SLOT(editPatterns()) ); connect( m_playbtn, SIGNAL(clicked()), parent, SLOT(play()) ); connect( m_stopbtn, SIGNAL(clicked()), parent, SLOT(stop()) ); connect( m_playbtn, SIGNAL(clicked()), SLOT(play()) ); connect( m_stopbtn, SIGNAL(clicked()), SLOT(stop()) ); connect( m_beatsBar, SIGNAL(valueChanged(int)), parent, SLOT(beatsBarChanged(int)) ); connect( m_figure, SIGNAL(activated(int)), parent, SLOT(rhythmFigureChanged(int)) ); connect( m_tempo, SIGNAL(valueChanged(int)), parent, SLOT(tempoChanged(int)) ); connect( m_dial1, SIGNAL(valueChanged(int)), parent, SLOT(weakVeloChanged(int)) ); connect( m_dial2, SIGNAL(valueChanged(int)), parent, SLOT(strongVeloChanged(int)) ); connect( m_dial3, SIGNAL(valueChanged(int)), parent, SLOT(volumeChanged(int)) ); connect( m_dial4, SIGNAL(valueChanged(int)), parent, SLOT(balanceChanged(int)) ); connect( m_air, SIGNAL(activated(int)), SLOT(tempoComboChanged(int)) ); connect( m_tempo, SIGNAL(valueChanged(int)), SLOT(displayTempo(int)) ); connect( m_pattern, SIGNAL(activated(int)), SLOT(patternChanged(int)) ); connect( m_pattern, SIGNAL(activated(int)), parent, SLOT(patternChanged(int)) ); } void KmetronomeView::display(int bar, int beat) { m_measureLCD->display(QString("%1:%2").arg(bar, 6, 10, QChar(' ')) .arg(beat, 2, 10, QChar('0'))); } void KmetronomeView::setFigure(int newValue) { int ts_dd; int x = newValue; for(ts_dd = 0; x > 1; x /= 2) ++ts_dd; m_figure->setCurrentIndex(ts_dd); } void KmetronomeView::displayTempo(int newTempo) { int i, j = 0; m_tempoLCD->display(newTempo); for(i = 0; i < m_air->count(); ++i) { if (m_air->itemData(i).toInt() > newTempo) break; j = i; } m_air->setCurrentIndex(j); } void KmetronomeView::enableControls(bool e) { m_playbtn->setEnabled(e); m_stopbtn->setEnabled(!e); m_configbtn->setEnabled(e); m_patternbtn->setEnabled(e); m_beatsBar->setEnabled(e & !m_patternMode); m_figure->setEnabled(e & !m_patternMode); m_pattern->setEnabled(e); } void KmetronomeView::mouseDoubleClickEvent(QMouseEvent *) { bool ok = false; int newTempo = KInputDialog::getInteger( i18n("Tempo"), i18n("Enter new Tempo:"), m_tempo->value(), TEMPO_MIN, TEMPO_MAX, 1, 10, &ok, this ); if (ok) { m_tempo->setValue(newTempo); } } void KmetronomeView::tempoComboChanged(int v) { m_tempo->setValue(m_air->itemData(v).toInt()); } void KmetronomeView::updateKnobs(bool styled) { QList allKnobs = findChildren (); foreach(Knob* knob, allKnobs) { knob->setStyle(styled ? m_dialStyle : NULL); } } void KmetronomeView::play() { m_stopbtn->setFocus(); } void KmetronomeView::stop() { m_playbtn->setFocus(); } void KmetronomeView::setPatterns(const QStringList& patterns) { m_pattern->clear(); m_pattern->addItem(i18nc("the pattern is created automatically", "Automatic")); m_pattern->addItems(patterns); } void KmetronomeView::patternChanged(int idx) { m_patternMode = (idx > 0); m_beatsBar->setEnabled(!m_patternMode); m_figure->setEnabled(!m_patternMode); } QString KmetronomeView::getSelectedPattern() { return m_pattern->currentText(); } void KmetronomeView::setSelectedPattern(const QString& pattern) { if (pattern.isEmpty()) { patternChanged(0); } else { m_pattern->setCurrentItem(pattern); patternChanged(m_pattern->currentIndex()); } } kmetronome-0.10.1/src/sequenceradapter.cpp0000644000175000001440000002720511760763113017642 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #include "sequenceradapter.h" #include "defs.h" #include "drumgridmodel.h" #include #include #include #include #include #include SequencerAdapter::SequencerAdapter(QObject *parent) : QObject(parent), m_Client(0), m_Port(0), m_Queue(0), m_model(0), m_clientId(-1), m_inputPortId(-1), m_outputPortId(-1), m_queueId(-1), m_bar(0), m_beat(0), m_instrument(METRONOME_INSTRUMENT), m_bank(METRONOME_BANK), m_program(METRONOME_PROGRAM), m_weak_note(METRONOME_WEAK_NOTE), m_strong_note(METRONOME_STRONG_NOTE), m_weak_velocity(METRONOME_VELOCITY), m_strong_velocity(METRONOME_VELOCITY), m_channel(METRONOME_CHANNEL), m_volume(METRONOME_VOLUME), m_balance(METRONOME_PAN), m_resolution(METRONOME_RESOLUTION), m_bpm(TEMPO_DEFAULT), m_ts_num(RHYTHM_TS_NUM), m_ts_div(RHYTHM_TS_DEN), m_noteDuration(NOTE_DURATION), m_bankSelMethod(3), m_autoconnect(false), m_playing(false), m_useNoteOff(true), m_patternMode(false), m_outputConn(""), m_inputConn(""), NO_CONNECTION(i18n("No connection")) { m_Client = new MidiClient(this); m_Client->open(); m_Client->setClientName("KMetronome"); m_clientId = m_Client->getClientId(); //connect(m_Client, SIGNAL(eventReceived(SequencerEvent*)), // SLOT(sequencerEvent(SequencerEvent*)), Qt::DirectConnection); m_Client->setHandler(this); m_Port = new MidiPort(this); m_Port->attach( m_Client ); m_Port->setPortName("KMetronome"); m_Port->setCapability(SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE | SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ); m_Port->setPortType(SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION); m_inputPortId = m_outputPortId = m_Port->getPortId(); m_Port->subscribeFromAnnounce(); m_Queue = m_Client->createQueue("KMetronome"); m_queueId = m_Queue->getId(); m_Client->setRealTimeInput(true); m_Client->startSequencerInput(); } SequencerAdapter::~SequencerAdapter() { m_Client->stopSequencerInput(); m_Port->detach(); m_Client->close(); } QStringList SequencerAdapter::inputConnections() { QStringList list; list += NO_CONNECTION; QListIterator it(m_Client->getAvailableInputs()); while(it.hasNext()) { PortInfo p = it.next(); list << QString("%1:%2").arg(p.getClientName()).arg(p.getPort()); } return list; } QStringList SequencerAdapter::outputConnections() { QStringList list; list += NO_CONNECTION; QListIterator it(m_Client->getAvailableOutputs()); while(it.hasNext()) { PortInfo p = it.next(); list << QString("%1:%2").arg(p.getClientName()).arg(p.getPort()); } return list; } void SequencerAdapter::connect_output() { if (m_outputConn.isEmpty() || m_outputConn == NO_CONNECTION) return; m_Port->subscribeTo(m_outputConn); } void SequencerAdapter::disconnect_output() { if (m_outputConn.isEmpty() || m_outputConn == NO_CONNECTION) return; m_Port->unsubscribeTo(m_outputConn); } void SequencerAdapter::connect_input() { if (m_inputConn.isEmpty() || m_inputConn == NO_CONNECTION) return; m_Port->subscribeFrom(m_inputConn); } void SequencerAdapter::disconnect_input() { if (m_inputConn.isEmpty() || m_inputConn == NO_CONNECTION) return; m_Port->unsubscribeFrom(m_inputConn); } void SequencerAdapter::metronome_event_output(SequencerEvent* ev) { ev->setSource(m_outputPortId); ev->setSubscribers(); ev->setDirect(); m_Client->outputDirect(ev); } void SequencerAdapter::sendControlChange(int cc, int value) { ControllerEvent ev(m_channel, cc, value); metronome_event_output(&ev); } void SequencerAdapter::sendInitialControls() { metronome_set_bank(); metronome_set_program(); metronome_set_controls(); metronome_set_tempo(); } inline int SequencerAdapter::calc_lsb(int x) { return (x % 0x80); } inline int SequencerAdapter::calc_msb(int x) { return (x / 0x80); } void SequencerAdapter::metronome_set_bank() { int lsb, msb; switch (m_bankSelMethod) { case 0: lsb = calc_lsb(m_bank); msb = calc_msb(m_bank); sendControlChange(MSB_CC, msb); sendControlChange(LSB_CC, lsb); break; case 1: sendControlChange(MSB_CC, m_bank); break; case 2: sendControlChange(LSB_CC, m_bank); break; default: /* if method is 3 or above, do nothing */ break; } } void SequencerAdapter::metronome_set_program() { ProgramChangeEvent ev(m_channel, m_program); metronome_event_output(&ev); } void SequencerAdapter::metronome_note_output(SequencerEvent* ev) { NoteOnEvent* note = static_cast(ev); if (note->getTag() == TAG_WEAK) note->setVelocity(m_weak_velocity); else if (note->getTag() == TAG_STRONG) note->setVelocity(m_strong_velocity); metronome_event_output(note); } void SequencerAdapter::metronome_schedule_event(SequencerEvent* ev, int tick) { ev->setSource(m_outputPortId); ev->setDestination(m_clientId, m_inputPortId); ev->scheduleTick(m_queueId, tick, false); m_Client->outputDirect(ev); } void SequencerAdapter::metronome_note(int note, int vel, int tick, int tag) { SequencerEvent* ev; if (m_useNoteOff) ev = new NoteEvent(m_channel, note, vel, m_noteDuration); else ev = new NoteOnEvent(m_channel, note, vel); ev->setTag(tag); metronome_schedule_event(ev, tick); delete ev; } void SequencerAdapter::metronome_echo(int tick, int ev_type) { SystemEvent ev(ev_type); metronome_schedule_event(&ev, tick); } void SequencerAdapter::metronome_simple_pattern(int tick) { int j, t, duration, tag, note; t = tick; duration = m_resolution * 4 / m_ts_div; for (j = 0; j < m_ts_num; j++) { note= ( j ? m_weak_note : m_strong_note ); tag = ( j ? TAG_WEAK : TAG_STRONG ); metronome_note(note, METRONOME_VELOCITY, t, tag); metronome_echo(t, SND_SEQ_EVENT_USR1); t += duration; } metronome_echo(t, SND_SEQ_EVENT_USR0); } int SequencerAdapter::decodeVelocity(const QString drumVel) { const qreal f = 127.0 / 9.0; int num = 0; bool isNum = false; if (drumVel.isEmpty()) return 0; if (drumVel == "f") return m_strong_velocity; else if (drumVel == "p") return m_weak_velocity; num = drumVel.toInt(&isNum); if (isNum) return qRound(f * num); return 0; } int SequencerAdapter::decodeTag(const QString drumVel) { if (drumVel == "f") return TAG_STRONG; else if (drumVel == "p") return TAG_WEAK; return TAG_FIXED; } void SequencerAdapter::metronome_grid_pattern(int tick) { int i, j, t, duration, key, vel, tag; t = tick; duration = m_resolution * 4 / m_model->patternFigure(); for(i=0; icolumnCount(); ++i) { for(j=0; jrowCount(); ++j) { QString n = m_model->patternHit(j, i); if (!n.isEmpty()) { key = m_model->patternKey(j).toInt(); vel = decodeVelocity(n); tag = decodeTag(n); metronome_note(key, vel, t, tag); } } metronome_echo(t, SND_SEQ_EVENT_USR1); t += duration; } metronome_echo(t, SND_SEQ_EVENT_USR0); } void SequencerAdapter::metronome_set_tempo() { QueueTempo t = m_Queue->getTempo(); t.setPPQ(m_resolution); t.setNominalBPM(m_bpm); m_Queue->setTempo(t); m_Client->drainOutput(); } void SequencerAdapter::metronome_set_controls() { sendControlChange(VOLUME_CC, m_volume); sendControlChange(PAN_CC, m_balance); } void SequencerAdapter::parse_sysex(SequencerEvent *ev) { int num, den; SysExEvent* syx = static_cast(ev); if (syx == NULL) return; unsigned char *ptr =(unsigned char *) syx->getData(); if (syx->getLength() < 6) return; if (*ptr++ != 0xf0) return; int msgId = *ptr++; if (msgId != 0x7f) return; // Universal Real Time int deviceId = *ptr++; if (deviceId != 0x7f) return; // broadcast int subId1 = *ptr++; int subId2 = *ptr++; switch (subId1) { case 0x03: // Notation switch (subId2) { case 0x02: case 0x42: if (syx->getLength() < 9) return; (void) *ptr++; num = *ptr++; den = *ptr++; emit signalNotation(num, den); break; } break; case 0x06: // MMC switch (subId2) { case 0x01: // Stop emit signalStop(); break; case 0x02: // Play case 0x03: // Deferred Play emit signalPlay(); break; } break; } } void SequencerAdapter::handleSequencerEvent(SequencerEvent *ev) { int when = 0; switch (ev->getSequencerType()) { case SND_SEQ_EVENT_USR0: when = ev->getTick() + m_patternDuration; if (m_patternMode) metronome_grid_pattern(when); else metronome_simple_pattern(when); m_bar++; m_beat = 0; break; case SND_SEQ_EVENT_USR1: m_beat++; emit signalUpdate(m_bar, m_beat); break; case SND_SEQ_EVENT_START: emit signalPlay(); break; case SND_SEQ_EVENT_CONTINUE: emit signalCont(); break; case SND_SEQ_EVENT_STOP: emit signalStop(); break; case SND_SEQ_EVENT_SYSEX: parse_sysex(ev); break; case SND_SEQ_EVENT_NOTEON: metronome_note_output(ev); break; case SND_SEQ_EVENT_NOTEOFF: metronome_event_output(ev); break; } delete ev; } void SequencerAdapter::metronome_start() { m_Queue->start(); if (m_patternMode) { m_patternDuration = m_resolution * 4 / m_model->patternFigure() * m_model->columnCount(); metronome_grid_pattern(0); metronome_grid_pattern(m_patternDuration); } else { m_patternDuration = m_resolution * 4 / m_ts_div * m_ts_num; metronome_simple_pattern(0); metronome_simple_pattern(m_patternDuration); } m_bar = 1; m_beat = 0; m_playing = true; } void SequencerAdapter::metronome_stop() { m_Queue->stop(); m_playing = false; } void SequencerAdapter::metronome_continue() { m_Queue->continueRunning(); m_playing = true; } kmetronome-0.10.1/src/net.sourceforge.kmetronome.xml0000644000175000001440000000112311760763113021603 0ustar pedrousers kmetronome-0.10.1/src/icons/0000755000175000001440000000000011760763113014710 5ustar pedrouserskmetronome-0.10.1/src/icons/8.png0000644000175000001440000000070011760763113015562 0ustar pedrousersPNG  IHDR+[#bKGD pHYs.#.#x?vtIME 'N&VtEXtCommentCreated with The GIMPd%n$IDATXW[ := =l-EQ0ğ20n$<9Hyw9iE D'm"}'ُ\]u.Ӧ @&]QD8!Y#~WpuY|7PW-5)Hј #qR6i>9՜'"f Yߊ摤clQp<֘cէ*IvR@RګXМYŧ<:+nmgWVu\ArcC;[ͮS!` w kpIENDB`kmetronome-0.10.1/src/icons/32.png0000644000175000001440000000104511760763113015642 0ustar pedrousersPNG  IHDR5@.bKGD pHYs.#.#x?vtIME  ޑz#tEXtCommentCreated with The GIMPd%nIDATXݘQr D^d'=UL=xHVx@w_ G x+H(9~ C; !HuWe5Wp0m#[Д|HڲwMr9g&q=!Yw36bҖ!ڍQw-4dyeG2v"'g8jh Mף^}"wi&Hz*߮]M3ZX6.kqAvzp+Ц2wW߂D_K{L4qn:2NwBlkFld cE>p:ׯe{#~ęPjpi5 7|\U-@D#viS0IENDB`kmetronome-0.10.1/src/icons/4.png0000644000175000001440000000045011760763113015560 0ustar pedrousersPNG  IHDR*lbKGD pHYs.#.#x?vtIME M:tEXtCommentCreated with The GIMPd%nIDATHQ 0DKOzͦ?1X4U؁f,5*JҤJ8N8῅T 7P"?T$$ Xϭ2za0<[fZA}r~پU=$B06YuIHG/:j_"IENDB`kmetronome-0.10.1/src/icons/64.png0000644000175000001440000000113311760763113015645 0ustar pedrousersPNG  IHDR;!^bKGD pHYs.#.#x?vtIME *bgF$tEXtCommentCreated with The GIMPd%nIDATXX[ ldeڕθ? ;3|sD~j"]Ͽ8C6U {]9G8sT?Ln~ED .vžse@h :bdCK 3#ycݴP>Jm%}\~ċwT+a:$|`^ IENDB`kmetronome-0.10.1/src/icons/1.png0000644000175000001440000000044411760763113015560 0ustar pedrousersPNG  IHDR bKGD pHYs.#.#x?vtIMEutEXtCommentCreated with The GIMPd%nIDAT(ϵSQ0+dlMOVeLM$il Id!"Ͷjغ\/$Xr@%-8,I=~ElgSECaXi|":{?DRL~GTDU I_A=ʍAiia[SoZ'EFIENDB`kmetronome-0.10.1/src/classicstyle.h0000644000175000001440000000330611760763113016452 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2012, Pedro Lopez-Cabanillas Based on an original design by Thorsten Wilms. Implemented as a widget for the Rosegarden MIDI and audio sequencer and notation editor by Chris Cannam. Extracted into a standalone Qt3 widget by Pedro Lopez-Cabanillas and adapted for use in QSynth. Ported to Qt4 by Chris Cannam. Adapted as a QStyle by Pedro Lopez-Cabanillas. For this file, the following copyright notices are also applicable: This file copyright 2003-2006 Chris Cannam, copyright 2005,2008 Pedro Lopez-Cabanillas, copyright 2006 Queen Mary, University of London. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; If not, see . */ #ifndef CLASSICSTYLE_H #define CLASSICSTYLE_H #include class ClassicStyle : public QCommonStyle { public: ClassicStyle() {}; virtual ~ClassicStyle() {}; virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const; }; #endif /*CLASSICSTYLE_H*/ kmetronome-0.10.1/src/kmetronomeview.h0000644000175000001440000000567411760763113017035 0ustar pedrousers/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2012 Pedro Lopez-Cabanillas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * * MA 02110-1301, USA * ***************************************************************************/ #ifndef KMETRONOMEVIEW_H #define KMETRONOMEVIEW_H #include #include #include #include #include "ui_kmetronomeviewbase.h" class KmetronomeView : public QWidget, Ui::KmetronomeViewBase { Q_OBJECT public: KmetronomeView(QWidget *parent = 0); virtual ~KmetronomeView() {} void display(int, int); int getTempo() { return m_tempo->value(); } int getBeatsBar() { return m_beatsBar->value(); } int getFigure() { return m_figure->currentIndex(); } void setTempo(int newValue) { m_tempo->setValue(newValue); } void setBeatsBar(int newValue) { m_beatsBar->setValue(newValue); } void setFigure(int newValue); void enableControls(bool e); void updateKnobs(bool styled); void setPatterns(const QStringList& patterns); bool patternMode() { return m_patternMode; } QString getSelectedPattern(); void setSelectedPattern(const QString& pattern); protected: virtual void mouseDoubleClickEvent ( QMouseEvent * e ); public Q_SLOTS: void displayTempo(int); void displayWeakVelocity(int v) { m_dial1->setValue(v); } void displayStrongVelocity(int v) { m_dial2->setValue(v); } void displayVolume(int v) { m_dial3->setValue(v); } void displayBalance(int v) { m_dial4->setValue(v); } void displayFakeToolbar(bool b) { m_fakeToolbar->setVisible(b); } void tempoComboChanged(int); void patternChanged(int); void play(); void stop(); private: QStyle* m_dialStyle; bool m_patternMode; }; #endif kmetronome-0.10.1/src/drumgrid.cpp0000644000175000001440000003410411760763113016120 0ustar pedrousers/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2012, Pedro Lopez-Cabanillas This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "defs.h" #include "drumgrid.h" #include "drumgridmodel.h" #include "sequenceradapter.h" #include "ui_drumgrid.h" #include #include #include #include #include #include #include #include #include #include #include #include #include DrumGrid::DrumGrid(QWidget *parent) : KDialog(parent), m_ui(new Ui::DrumGrid), m_seq(NULL), m_model(NULL), m_figure(PATTERN_FIGURE), m_columns(PATTERN_COLUMNS) { QWidget *widget = new QWidget(this); m_ui->setupUi(widget); setMainWidget( widget ); setCaption( i18n("Pattern Editor") ); setInitialSize( QSize(700,400) ); m_ui->tableView->setSelectionMode(QTableView::ContiguousSelection); m_ui->startButton->setIcon(KIcon("media-playback-start")); m_ui->startButton->setShortcut( Qt::Key_MediaPlay ); m_ui->stopButton->setIcon(KIcon("media-playback-stop")); m_ui->stopButton->setShortcut( Qt::Key_MediaStop ); m_ui->saveButton->setIcon(KIcon("document-save")); m_ui->deleteButton->setIcon(KIcon("edit-delete")); m_ui->addButton->setIcon(KIcon("list-add")); m_ui->removeButton->setIcon(KIcon("list-remove")); m_ui->tempoSlider->setMaximum(TEMPO_MAX); m_ui->tempoSlider->setMinimum(TEMPO_MIN); m_popup = new QMenu(this); addEditAction(i18n("Cut"), SLOT(slotCut()), QKeySequence::Cut); addEditAction(i18n("Copy"), SLOT(slotCopy()), QKeySequence::Copy); addEditAction(i18n("Paste"), SLOT(slotPaste()), QKeySequence::Paste); m_popup->addSeparator(); m_mapper = new QSignalMapper(this); addShortcut(QKeySequence("f"), "f"); addShortcut(QKeySequence("p"), "p"); addShortcut(QKeySequence("1"), "1"); addShortcut(QKeySequence("2"), "2"); addShortcut(QKeySequence("3"), "3"); addShortcut(QKeySequence("4"), "4"); addShortcut(QKeySequence("5"), "5"); addShortcut(QKeySequence("6"), "6"); addShortcut(QKeySequence("7"), "7"); addShortcut(QKeySequence("8"), "8"); addShortcut(QKeySequence("9"), "9"); addShortcut(QKeySequence("0"), QString()); addShortcut(QKeySequence::Delete, QString()); connect( m_ui->startButton, SIGNAL(clicked()), SLOT(play())); connect( m_ui->stopButton, SIGNAL(clicked()), SLOT(stop())); connect( m_ui->tempoSlider, SIGNAL(valueChanged(int)), SLOT(slotTempoChanged(int))); connect( m_ui->gridColumns, SIGNAL(valueChanged(int)), SLOT(slotColumnsChanged(int))); connect( m_ui->figureCombo, SIGNAL(activated(int)), SLOT(slotFigureChanged(int))); connect( m_ui->patternCombo, SIGNAL(activated(int)), SLOT(patternChanged(int))); connect( m_ui->saveButton, SIGNAL(clicked()), SLOT(savePattern())); connect( m_ui->deleteButton, SIGNAL(clicked()), SLOT(removePattern())); connect( m_ui->addButton, SIGNAL(clicked()), SLOT(addRow())); connect( m_ui->removeButton, SIGNAL(clicked()), SLOT(removeRow())); connect( m_ui->tableView, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(gridContextMenu(const QPoint&)) ); connect( m_mapper, SIGNAL(mapped(QString)), SLOT(shortcutPressed(QString))); connect( this, SIGNAL(signalUpdate(int,int)), SLOT(updateDisplay(int,int))); } DrumGrid::~DrumGrid() { foreach(QShortcut* s, m_shortcuts) delete s; delete m_ui; } void DrumGrid::setModel(DrumGridModel* model) { m_model = model; m_ui->tableView->setModel(m_model); connect ( m_ui->tableView, SIGNAL(doubleClicked(const QModelIndex&)), m_model, SLOT(changeCell(const QModelIndex &)) ); } void DrumGrid::setSequencer(SequencerAdapter* seq) { m_seq = seq; connect( m_seq, SIGNAL(signalUpdate(int,int)), SLOT(updateDisplay(int,int)), Qt::QueuedConnection); } void DrumGrid::setInstrument(const QString& instrument) { int bank = m_seq->getBank(); int patch = m_seq->getProgram(); m_model->loadKeyNames(instrument, bank, patch); } void DrumGrid::updateView() { m_ui->tableView->resizeColumnsToContents(); m_ui->tableView->resizeRowsToContents(); } void DrumGrid::enableWidgets(bool enable) { m_ui->gridColumns->setEnabled(enable); m_ui->figureCombo->setEnabled(enable); m_ui->addButton->setEnabled(enable); m_ui->removeButton->setEnabled(enable); m_ui->saveButton->setEnabled(enable); m_ui->deleteButton->setEnabled(enable); m_ui->patternCombo->setEnabled(enable); } void DrumGrid::play() { enableWidgets(false); m_seq->metronome_set_tempo(); m_seq->metronome_start(); } void DrumGrid::stop() { m_seq->metronome_stop(); enableWidgets(true); } void DrumGrid::slotTempoChanged(int newTempo) { m_seq->setBpm(newTempo); m_seq->metronome_set_tempo(); updateTempo(newTempo); } void DrumGrid::updateTempo(int newTempo) { m_ui->tempoLabel->setNum(newTempo); } void DrumGrid::slotFigureChanged(int idx) { m_figure = (int)pow(2, idx); m_model->setPatternFigure(m_figure); } void DrumGrid::setFigure(int newValue) { int ts_dd; int x = m_figure = newValue; for (ts_dd = 0; x > 1; x /= 2) ++ts_dd; m_ui->figureCombo->setCurrentIndex(ts_dd); m_model->setPatternFigure(newValue); } void DrumGrid::slotColumnsChanged(int columns) { m_columns = columns; m_model->updatePatternColumns(columns); updateView(); } void DrumGrid::shortcutPressed(const QString& value) { QModelIndex index = m_ui->tableView->currentIndex(); m_model->changeCell(index, value); } void DrumGrid::addShortcut(const QKeySequence& key, const QString& value) { QShortcut* shortcut = new QShortcut(key, m_ui->tableView); connect (shortcut, SIGNAL(activated()), m_mapper, SLOT(map())); m_mapper->setMapping(shortcut, value); m_shortcuts.append(shortcut); QAction* action; if (value.isEmpty()) action = m_popup->addAction(key.toString(), m_mapper, SLOT(map())); else action = m_popup->addAction(value, m_mapper, SLOT(map())); m_mapper->setMapping(action, value); } void DrumGrid::addEditAction(const QString& name, const char* slot, const QKeySequence& key) { QShortcut* shortcut = new QShortcut(key, m_ui->tableView); connect (shortcut, SIGNAL(activated()), this, slot); m_shortcuts.append(shortcut); m_popup->addAction(name, this, slot, key); } void DrumGrid::readPattern() { KConfigGroup config = KGlobal::config()->group(QSTR_PATTERN+m_currentPattern); QStringList keys = config.keyList(); if (!keys.empty()) { setFigure(config.readEntry(QSTR_FIGURE, PATTERN_FIGURE)); int cols = config.readEntry(QSTR_BEATS, PATTERN_COLUMNS); m_ui->gridColumns->setValue(cols); slotColumnsChanged(cols); keys.removeOne(QSTR_FIGURE); keys.removeOne(QSTR_BEATS); keys.sort(); m_model->clearPattern(); foreach(const QString& key, keys) { bool isNumber; int k = key.toInt(&isNumber); if (isNumber) { QStringList row = config.readEntry(key, QStringList()); m_model->addPatternData(k, row); } } m_model->endOfPattern(); } } void DrumGrid::readPattern(const QString& name) { m_currentPattern = name; readPattern(); } void DrumGrid::writePattern() { KConfigGroup config = KGlobal::config()->group(QSTR_PATTERN+m_currentPattern); config.deleteGroup(); config.writeEntry( QSTR_FIGURE, m_figure ); config.writeEntry( QSTR_BEATS, m_columns ); for(int r = 0; r < m_model->rowCount(); ++r) { config.writeEntry( m_model->patternKey(r), m_model->patternData(r) ); } config.sync(); } void DrumGrid::writePattern(const QString& name) { m_currentPattern = name; writePattern(); } void DrumGrid::removePattern(const QString& name) { if ( KMessageBox::questionYesNo (this, i18n("Do you want to remove the current pattern?"), i18n("Remove Pattern"), KStandardGuiItem::yes(), KStandardGuiItem::no(), "removepattern") == KMessageBox::Yes) { KGlobal::config()->deleteGroup(QSTR_PATTERN+name); KGlobal::config()->sync(); } } QStringList DrumGrid::patterns() { QStringList lst; int n = QSTR_PATTERN.size(); foreach(const QString& name, KGlobal::config()->groupList()) { if (name.startsWith(QSTR_PATTERN)) lst += name.mid(n); } return lst; } void DrumGrid::patternChanged(int /*idx*/) { readPattern(m_ui->patternCombo->currentText()); } void DrumGrid::savePattern() { QString newName = m_ui->patternCombo->currentText(); writePattern(newName); m_ui->patternCombo->setCurrentItem(newName, true); } void DrumGrid::removePattern() { int idx = m_ui->patternCombo->currentIndex(); QString tmpPattern = m_ui->patternCombo->currentText(); m_ui->patternCombo->removeItem(idx); removePattern(tmpPattern); m_currentPattern.clear(); m_model->clearPattern(); if (m_ui->patternCombo->count() > 0) m_ui->patternCombo->setCurrentItem(0); } void DrumGrid::showEvent(QShowEvent* /*event*/) { m_ui->tempoSlider->setValue(m_seq->getBpm()); updateTempo(m_seq->getBpm()); m_seq->setPatternMode(true); m_ui->patternCombo->clear(); m_ui->patternCombo->addItems(patterns()); if (m_currentPattern.isEmpty()) if (m_ui->patternCombo->count() == 0) { m_currentPattern = i18nc("name of an automatically created pattern", "Sample Pattern"); m_model->fillSampleData(); m_ui->patternCombo->setCurrentItem(m_currentPattern, true); } else { m_currentPattern = m_ui->patternCombo->currentText(); readPattern(); } else m_ui->patternCombo->setCurrentItem(m_currentPattern); updateView(); } void DrumGrid::done(int r) { stop(); m_seq->setPatternMode(false); if (r == KDialog::Accepted && !m_currentPattern.isEmpty()) writePattern(); KDialog::done(r); } void DrumGrid::updateDisplay(int /*bar*/, int beat) { if (m_ui->chkselbeat->isChecked()) m_ui->tableView->selectColumn(beat-1); m_ui->beatNumber->display(beat); } void DrumGrid::addRow() { QStringList keys = m_model->keyNames(); QString name = KInputDialog::getItem(i18n("Insert Pattern Row"), i18n("Drum Key:"), keys, 0, false, 0, this); if (!name.isEmpty()) m_model->insertPatternRow(name); } void DrumGrid::removeRow() { int row = -1; const QModelIndexList indexlist = m_ui->tableView->selectionModel()->selectedIndexes(); if (indexlist.count() == m_columns) { foreach (const QModelIndex& idx, indexlist) { if (row < 0) row = idx.row(); else if (row != idx.row()) { row = -1; break; } } } if (row < 0) KMessageBox::sorry(this, i18n("Please select one, and only one row")); else if ( KMessageBox::questionYesNo (this, i18n("Do you want to remove the selected pattern row?"), i18n("Remove Row"), KStandardGuiItem::yes(), KStandardGuiItem::no(), "removepatternrow") == KMessageBox::Yes) m_model->removePatternRow(row); } void DrumGrid::gridContextMenu(const QPoint&) { if (m_popup != NULL) m_popup->exec(QCursor::pos()); } void DrumGrid::slotCut() { QStringList list; QItemSelectionModel* selModel = m_ui->tableView->selectionModel(); QItemSelectionRange range = selModel->selection().first(); QModelIndexList indexes = selModel->selectedIndexes(); for (int row=range.top(); row<=range.bottom(); ++row) { QStringList rowList; foreach ( const QModelIndex& idx, indexes ) { if (idx.row() == row) { rowList << idx.data().toString(); m_model->changeCell(idx, QString()); } } list << rowList.join(QString(',')); } kapp->clipboard()->setText( list.join(QString('\n')) ) ; } void DrumGrid::slotCopy() { QStringList list; QItemSelectionModel* selModel = m_ui->tableView->selectionModel(); QItemSelectionRange range = selModel->selection().first(); QModelIndexList indexes = selModel->selectedIndexes(); for (int row=range.top(); row<=range.bottom(); ++row) { QStringList rowList; foreach ( const QModelIndex& idx, indexes ) { if (idx.row() == row) rowList << idx.data().toString(); } list << rowList.join(QString(',')); } kapp->clipboard()->setText( list.join(QString('\n')) ) ; } void DrumGrid::slotPaste() { QString clbrdText = kapp->clipboard()->text(); if (!clbrdText.isEmpty()) { int x, y=0; QItemSelectionModel* selModel = m_ui->tableView->selectionModel(); QItemSelectionRange range = selModel->selection().first(); QStringList rows = clbrdText.split('\n'); foreach( const QString& r, rows ) { QStringList list = r.split(','); for(x=0; xindex(range.top()+y, range.left()+x); m_model->changeCell(idx, list.at(x)); } y++; } } } kmetronome-0.10.1/data/0000755000175000001440000000000011760763113013717 5ustar pedrouserskmetronome-0.10.1/data/CMakeLists.txt0000644000175000001440000000016611760763113016462 0ustar pedrousersFILE( GLOB SAMPLES *.pat ) INSTALL( FILES drums.ins ${SAMPLES} DESTINATION ${DATA_INSTALL_DIR}/kmetronome ) kmetronome-0.10.1/data/samples.pat0000644000175000001440000000410611760763113016072 0ustar pedrousers[bossa1] 36=8,,,5,8,,,6,8,,,6,8,,,8 37=6,,7,,,6,,,,7,,,,6,, 42=7,6,6,6,6,6,5,6,5,6,5,6,5,6,6,6 67=,,,5,5,,,,,,,5,6,,, 68=6,,,,,,5,5,,,,,,,4,4 Beats=16 Figure=16 [bossa2] 36=,,,6,8,,,6,8,,,6,8,,,6 37=,,7,,,6,,,,6,,7,,7,, 42=6,5,6,6,5,5,6,6,6,6,5,6,5,6,5,5 67=,,6,,,,,,,5,,5,,,, 68=5,,,,,5,,5,,,,,5,,5, Beats=16 Figure=16 [calypso] 36=8,,,,,,,,8,,,,8,,, 42=,,7,,7,,,,,,7,,7,,7, 43=,,,,,,,,,,,,7,,, 44=7,,,,,,7,,7,,,,,,, 56=,,,,8,,,8,,,,,8,,,8 60=,,,8,8,,,,,,,8,,,, 62=8,,,,,,8,,8,,,,8,,, 64=,,,,,,,,,,,,,,8, 75=6,,,,,,,6,,,,,6,,, Beats=16 Figure=16 [salsa1] 35=7,,,5,7,,,5,7,,,5,7,,,5 38=,,,,,,,,,,,,,,6, 42=7,4,5,6,7,4,5,6,7,4,5,6,7,7,5,6 70=8,5,5,6,8,5,5,6,8,5,5,6,8,5,5,6 Beats=16 Figure=16 [salsa2] 35=7,,,5,7,,,5,7,,,5,7,,,5 38=,,,,,,,,,,,,,,6, 41=,,,,,,3,,,,,,,,3, 42=7,7,5,6,7,4,5,6,7,4,5,6,7,4,5,6 45=3,,,,2,,,,3,,,,2,,, 48=,,,4,,,,,,,,4,,,, 56=3,,5,,3,,5,,,3,,5,4,,5, 62=7,3,,,7,,,,,8,,6,7,,, 63=,,,6,,,8,,,,,,,,8, 69=3,6,7,2,3,6,7,2,3,6,7,2,3,6,7,2 70=8,5,5,6,8,5,5,6,8,5,5,6,8,5,5,6 Beats=16 Figure=16 [jamaican] Beats=16 Figure=16 36=,,,,,,,,9,,,,,,, 37=,,,5,,,,,9,,,,,,, 42=6,,,,6,,,6,9,,,6,8,,, 46=,,,,,,,,,,,,,,,5 62=,,,,,,,,,,,6,,,, 64=,,,,,,,,,,,,5,,,5 69=,,,,2,,,2,,,,,2,,,2 [waltz 3/4] 36=f,, 38=,p,p 59=f,, Beats=3 Figure=4 [7/4 2-2-3] 34=f,,p,,p,, 33=,p,,p,,p,p Beats=7 Figure=4 [7/4 3-2-2] 34=f,,,p,,p, 33=,p,p,,p,,p Beats=7 Figure=4 [rock1] 36=f,,p,,,,p,,f,,p,,,,p, 38=,,,,f,,,,,,,,f,,, 42=f,,,,f,,p,,f,,,,f,,p, 46=,,p,,,,,,,,p,,,p,, Beats=16 Figure=16 [rock2] 36=f,,p,,,,p,,f,,p,,,,p, 38=,,,,f,,,,,,,,f,,, 42=f,p,p,p,f,p,p,p,f,p,p,p,f,p,p,p Beats=16 Figure=16 [rock3] 36=f,,p,,,,p,,f,,p,,,,p, 38=,,,,f,,,,,,,,f,,, 42=f,p,p,p,f,p,p,p,f,p,p,p,f,p,p,p 51=f,,p,,f,,p,,f,,p,,f,,p, Beats=16 Figure=16 [rock4] 36=f,,,,,,f,,,,p,,,,p, 37=,,,,f,,,,,,,,f,,, 42=f,,p,,f,,p,,f,,p,,f,,p, Beats=16 Figure=16 [ballad] 36=p,,,,,,,p,p,,,,,,, 38=,,,,p,,,,,,,,p,,, 42=p,,p,,p,,p,,p,,p,,p,,p, Beats=16 Figure=16 [pop1] 36=p,,,,,,,,p,,,,,,p, 38=,,,,f,,p,,,,,,f,,, 42=p,,p,,f,,p,,p,,p,,f,,p, Beats=16 Figure=16 [pop2] 36=f,,,,,,,,f,,f,,,,, 38=,,,,f,,,f,,,,,f,,, 42=f,,,,f,,,,f,,,,f,,, Beats=16 Figure=16 kmetronome-0.10.1/data/drums.ins0000644000175000001440000005110311760763113015564 0ustar pedrousers; ---------------------------------------------------------------------- .Patch Names [General MIDI Drums] 0=General MIDI Drums [Roland GS Drumsets] 0=Standard 8=Room 16=Power 24=Electronic 25=TR-808 32=Jazz 40=Brush 48=Orchestra 56=SFX [XG Drum Kits] 0=1 Standard Kit 1=2 Standard Kit2 8=9 Room Kit 16=17 Rock Kit 24=25 Electro Kit 25=26 Analog Kit 32=33 Jazz Kit 40=41 Brush Kit 48=49 Classic Kit [XG SFX Kits] 0=1 SFX 1 1=2 SFX 2 [XG Set channel to rhythm part] 0=XG ; ---------------------------------------------------------------------- .Note Names [General MIDI Drums] 35=Acoustic Bass Drum 36=Bass Drum 1 37=Side Stick 38=Acoustic Snare 39=Hand Clap 40=Electric Snare 41=Low Floor Tom 42=Close Hi-Hat 43=High Floor Tom 44=Pedal Hi-Hat 45=Low Tom 46=Open Hi-Hat 47=Low-Mid Tom 48=Hi-Mid Tom 49=Crash Cymbal 1 50=High Tom 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Hi Bongo 61=Low Bongo 62=Mute Hi Conga 63=Open Hi Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Whistle 72=Long Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=Hi Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle [Roland GS Brush Set] BasedOn=Roland GS Standard Set 27=High Q 28=Slap 29=Scratch Push 30=Scratch Pull 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Jazz BD 2 36=Jazz BD 1 37=Side Stick 38=Brush Tap 39=Brush Slap 40=Brush Swirl 41=Low Tom 2 42=Closed Hi-Hat 43=Low Tom 1 44=Pedal Hi-Hat 45=Mid Tom 2 46=Open Hi-Hat 47=Mid Tom 1 48=High Tom 2 49=Crash Cymbal 1 50=High Tom 1 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibra-slap 59=Ride Cymbal 2 60=High Bongo 61=Low Bongo 62=Mute High Conga 63=Open High Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo [Roland GS Electronic Set] BasedOn=Roland GS Standard Set 27=High Q 28=Slap 29=Scratch Push 30=Scratch Pull 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Kick Drum 2 36=Elec BD 37=Side Stick 38=Elec SD 39=Hand Clap 40=Gated SD 41=Elec Low Tom 2 42=Closed Hi-Hat 43=Elec Low Tom 1 44=Pedal Hi-Hat 45=Elec Mid Tom 2 46=Open Hi-Hat 47=Elec Mid Tom 1 48=Elec Hi Tom 2 49=Crash Cymbal 1 50=Elec Hi Tom 1 51=Ride Cymbal 1 52=Reverse Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibra-slap 59=Ride Cymbal 2 60=High Bongo 61=Low Bongo 62=Mute High Conga 63=Open High Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo [Roland GS Jazz Set] BasedOn=Roland GS Standard Set 27=High Q 28=Slap 29=Scratch Push 30=Scratch Pull 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Jazz BD 2 36=Jazz BD 1 37=Side Stick 38=Snare Drum 1 39=Hand Clap 40=Snare Drum 2 41=Low Tom 2 42=Closed Hi-Hat 43=Low Tom 1 44=Pedal Hi-Hat 45=Mid Tom 2 46=Open Hi-Hat 47=Mid Tom 1 48=High Tom 2 49=Crash Cymbal 1 50=High Tom 1 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibra-slap 59=Ride Cymbal 2 60=High Bongo 61=Low Bongo 62=Mute High Conga 63=Open High Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo [Roland GS Orchestra Set] BasedOn=Roland GS Standard Set 27=Closed Hi-Hat 28=Pedal Hi-Hat 29=Open Hi-Hat 30=Ride Cymbal 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Concert BD 2 36=Concert BD 1 37=Side Stick 38=Concert SD 39=Castanets 40=Concert SD 41=Timpani F 42=Timpani F# 43=Timpani G 44=Timpani G# 45=Timpani A 46=Timpani A# 47=Timpani B 48=Timpani c 49=Timpani c# 50=Timpani d 51=Timpani d# 52=Timpani e 53=Timpani f 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Concert Cymbal 2 58=Vibra-slap 59=Concert Cymbal 1 60=High Bongo 61=Low Bongo 62=Mute High Conga 63=Open High Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo 88=Applause [Roland GS Power Set] BasedOn=Roland GS Standard Set 27=High Q 28=Slap 29=Scratch Push 30=Scratch Pull 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Kick Drum 2 36=MONDO Kick 37=Side Stick 38=Gated SD 39=Hand Clap 40=Snare Drum 2 41=Room Low Tom 2 42=Closed Hi-Hat 43=Room Low Tom 1 44=Pedal Hi-Hat 45=Room Mid Tom 2 46=Open Hi-Hat 47=Room Mid Tom 1 48=Room Hi Tom 2 49=Crash Cymbal 1 50=Room Hi Tom 1 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibra-slap 59=Ride Cymbal 2 60=High Bongo 61=Low Bongo 62=Mute High Conga 63=Open High Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo [Roland GS Room Set] BasedOn=Roland GS Standard Set 27=High Q 28=Slap 29=Scratch Push 30=Scratch Pull 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Kick Drum 2 36=Kick Drum 1 37=Side Stick 38=Snare Drum 1 39=Hand Clap 40=Snare Drum 2 41=Room Low Tom 2 42=Closed Hi-Hat 43=Room Low Tom 1 44=Pedal Hi-Hat 45=Room Mid Tom 2 46=Open Hi-Hat 47=Room Mid Tom 1 48=Room Hi Tom 2 49=Crash Cymbal 1 50=Room Hi Tom 1 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibra-slap 59=Ride Cymbal 2 60=High Bongo 61=Low Bongo 62=Mute High Conga 63=Open High Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo [Roland GS SFX Set] 39=High Q 40=Slap 41=Scratch Push 42=Scratch Pull 43=Sticks 44=Square Click 45=Metronome Click 46=Metronome Bell 47=Guitar Sliding Finger 48=Guitar Cutting Noise (Down) 49=Guitar Cutting Noise (Up) 50=String Slap of Double Bass 51=Flute Key click 52=Laughing 53=Screaming 54=Punch 55=Heart Beat 56=Footsteps 1 57=Footsteps 2 58=Applause 59=Door Creaking 60=Door 61=Scratch 62=Windchime 63=Car-Engine 64=Car-Stop 65=Car-Pass 66=Car-Crash 67=Siren 68=Train 69=Jetplane 70=Helicopter 71=Starship 72=Gunshot 73=Machine Gun 74=Lasergun 75=Explosion 76=Dog 77=Horse-Gallop 78=Birds 79=Rain 80=Thunder 81=Wind 82=Seashore 83=Stream 84=Bubble [Roland GS Standard Set] 27=High Q 28=Slap 29=Scratch Push 30=Scratch Pull 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Kick Drum 2 36=Kick Drum 1 37=Side Stick 38=Snare Drum 1 39=Hand Clap 40=Snare Drum 2 41=Low Tom 2 42=Closed Hi-Hat 43=Low Tom 1 44=Pedal Hi-Hat 45=Mid Tom 2 46=Open Hi-Hat 47=Mid Tom 1 48=High Tom 2 49=Crash Cymbal 1 50=High Tom 1 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibra-slap 59=Ride Cymbal 2 60=High Bongo 61=Low Bongo 62=Mute High Conga 63=Open High Conga 64=Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo [Roland GS TR-808 Set] BasedOn=Roland GS Standard Set 27=High Q 28=Slap 29=Scratch Push 30=Scratch Pull 31=Sticks 32=Square Click 33=Metronome Click 34=Metronome Bell 35=Kick Drum 2 36=808 Bass Drum 37=808 Rim Shot 38=808 Snare Drum 39=Hand Clap 40=Snare Drum 2 41=808 Low Tom 2 42=808 CHH 43=808 Low Tom 1 44=808 CHH 45=808 Mid Tom 2 46=808 OHH 47=808 Mid Tom 1 48=808 Hi Tom 2 49=808 Cymbal 50=808 Hi Tom 1 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Bell 54=Tambourine 55=Splash Cymbal 56=808 Cowbell 57=Crash Cymbal 2 58=Vibra-slap 59=Ride Cymbal 2 60=High Bongo 61=Low Bongo 62=808 High Conga 63=808 Mid Conga 64=808 Low Conga 65=High Timbale 66=Low Timbale 67=High Agogo 68=Low Agogo 69=Cabasa 70=808 Maracas 71=Short Hi Whistle 72=Long Low Whistle 73=Short Guiro 74=Long Guiro 75=808 Claves 76=High Wood Block 77=Low Wood Block 78=Mute Cuica 79=Open Cuica 80=Mute Triangle 81=Open Triangle 82=Shaker 83=Jingle Bell 84=Belltree 85=Castanets 86=Mute Surdo 87=Open Surdo [XG Analog Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Reverse Cymbal 29=Snare Roll 30=Hi Q 31=SD Rock H 32=Sticks 33=Bass Drum M 34=Open Rim Shot 35=BD Analog L 36=BD Analog H 37=Analog Side Stick 38=Analog Snare L 39=Hand Clap 40=Analog Snare H 41=Analog Tom 1 42=Analog HH Closed 1 43=Analog Tom 2 44=Analog HH Closed 2 45=Analog Tom 3 46=Analog HH Open 47=Analog Tom 4 48=Analog Tom 5 49=Analog Cymbal 50=Analog Tom 6 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Analog Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Analog Conga H 63=Analog Conga M 64=Analog Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Analog Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Analog Claves 76=Wood Block H 77=Wood Block L 78=Scratch Push 79=Scratch Pull 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG Brush Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Brush Swirl H 29=Snare Roll 30=Castanet 31=Brush Slap L 32=Sticks 33=Bass Drum L 34=Open Rim Shot 35=Bass Drum M 36=BD Soft 37=Side Stick 38=Brush Slap 39=Hand Clap 40=Brush Tap 41=Brush Tom 1 42=Hi-Hat Closed 43=Brush Tom 2 44=Hi-Hat Pedal 45=Brush Tom 3 46=Hi-Hat Open 47=Brush Tom 4 48=Brush Tom 5 49=Crash Cymbal 1 50=Brush Tom 6 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Cuica Mute 79=Cuica Open 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG Classic Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Brush Swirl H 29=Snare Roll 30=Castanet 31=Snare L 32=Sticks 33=Bass Drum L 34=Open Rim Shot 35=Bass Drum M 36=Gran Casa 37=Side Stick 38=Snare M 39=Hand Clap 40=Snare H 41=Jazz Tom 1 42=Hi-Hat Closed 43=Jazz Tom 2 44=Hi-Hat Pedal 45=Jazz Tom 3 46=Hi-Hat Open 47=Jazz Tom 4 48=Jazz Tom 5 49=Hand Cym.Open L 50=Jazz Tom 6 51=Hand Cym.Closed L 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Hand Cym.Open H 58=Vibraslap 59=Hand Cym.Closed H 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Cuica Mute 79=Cuica Open 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG Electro Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Reverse Cymbal 29=Snare Roll 30=Hi Q 31=Snare M 32=Sticks 33=Bass Drum H 4 34=Open Rim Shot 35=BD Rock 36=BD Gate 37=Side Stick 38=SD Rock L 39=Hand Clap 40=SD Rock H 41=E Tom 1 42=Hi-Hat Closed 43=E Tom 2 44=Hi-Hat Pedal 45=E Tom 3 46=Hi-Hat Open 47=E Tom 4 48=E Tom 5 49=Crash Cymbal 1 50=E Tom 6 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Scratch Push 79=Scratch Pull 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG Jazz Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Brush Swirl H 29=Snare Roll 30=Castanet 31=Snare L 32=Sticks 33=Bass Drum L 34=Open Rim Shot 35=Bass Drum M 36=BD Jazz 37=Side Stick 38=Snare M 39=Hand Clap 40=Snare H 41=Jazz Tom 1 42=Hi-Hat Closed 43=Jazz Tom 2 44=Hi-Hat Pedal 45=Jazz Tom 3 46=Hi-Hat Open 47=Jazz Tom 4 48=Jazz Tom 5 49=Crash Cymbal 1 50=Jazz Tom 6 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Cuica Mute 79=Cuica Open 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG Rock Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Brush Swirl H 29=Snare Roll 30=Castanet 31=SD Rock M 32=Sticks 33=Bass Drum M 34=Open Rim Shot 35=Bass Drum H 3 36=BD Rock 37=Side Stick 38=SD Rock 39=Hand Clap 40=SD Rock Rim 41=Rock Tom 1 42=Hi-Hat Closed 43=Rock Tom 2 44=Hi-Hat Pedal 45=Rock Tom 3 46=Hi-Hat Open 47=Rock Tom 4 48=Rock Tom 5 49=Crash Cymbal 1 50=Rock Tom 6 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Cuica Mute 79=Cuica Open 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG Room Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Brush Swirl H 29=Snare Roll 30=Castanet 31=Snare L 32=Sticks 33=Bass Drum L 34=Open Rim Shot 35=Bass Drum M 36=BD Room 37=Side Stick 38=Snare M 39=Hand Clap 40=Snare H 41=Room Tom 1 42=Hi-Hat Closed 43=Room Tom 2 44=Hi-Hat Pedal 45=Room Tom 3 46=Hi-Hat Open 47=Room Tom 4 48=Room Tom 5 49=Crash Cymbal 1 50=Room Tom 6 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Cuica Mute 79=Cuica Open 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG SFX 1] 36=Guitar Cutting Noise 37=Guitar Cutting Noise 2 38=Dist. Cut Noise 39=String Slap 40=Bass Slide 41=Pick Scrape 52=FL.Key Click 68=Rain 69=Thunder 70=Wind 71=Stream 72=Bubble 73=Feed 84=Dog 85=Horse Gallop 86=Bird 2 87=Kitty 88=Growl 89=Haunted 90=Ghost 91=Maou [XG SFX 2] 36=Dial Tone 37=Door Creaking 38=Door Slam 39=Scratch 40=Scratch 2 41=Windchime 42=Telephone Ring2 52=Engine Start 53=Tire Screech 54=Car Passing 55=Crash 56=Siren 57=Train 58=Jetplane 59=Starship 60=Burst Noise 61=Coaster 62=SbMarine [XG Standard Kit] 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Brush Swirl H 29=Snare Roll 30=Castanet 31=Snare L 32=Sticks 33=Bass Drum L 34=Open Rim Shot 35=Bass Drum M 36=Bass Drum H 37=Side Stick 38=Snare M 39=Hand Clap 40=Snare H 41=Floor Tom L 42=Hi-Hat Closed 43=Floor Tom H 44=Hi-Hat Pedal 45=Low Tom 46=Hi-Hat Open 47=Mid Tom L 48=Mid Tom H 49=Crash Cymbal 1 50=High Tom 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Cuica Mute 79=Cuica Open 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree [XG Standard2 Kit] BasedOn=XG Standard Kit 13=Surdo Mute 14=Surdo Open 15=Hi Q 16=Whip Slap 17=Scratch Push 18=Scratch Pull 19=Finger Snap 20=Click Noise 21=Metronome Click 22=Metronome Bell 23=Seq Click L 24=Seq Click H 25=Brush Tap 26=Brush Swirl L 27=Brush Slap 28=Brush Swirl H 29=Snare Roll 30=Castanet 31=Snare L 32=Sticks 33=Bass Drum L 34=Open Rim Shot 2 35=Bass Drum M 2 36=Bass Drum H 2 37=Side Stick 38=Snare M 2 39=Hand Clap 40=Snare H 2 41=Floor Tom L 42=Hi-Hat Closed 43=Floor Tom H 44=Hi-Hat Pedal 45=Low Tom 46=Hi-Hat Open 47=Mid Tom L 48=Mid Tom H 49=Crash Cymbal 1 50=High Tom 51=Ride Cymbal 1 52=Chinese Cymbal 53=Ride Cymbal Cup 54=Tambourine 55=Splash Cymbal 56=Cowbell 57=Crash Cymbal 2 58=Vibraslap 59=Ride Cymbal 2 60=Bongo H 61=Bongo L 62=Conga H Mute 63=Conga H Open 64=Conga L 65=Timbale H 66=Timbale L 67=Agogo H 68=Agogo L 69=Cabasa 70=Maracas 71=Samba Whistle H 72=Samba Whistle L 73=Guiro Short 74=Guiro Long 75=Claves 76=Wood Block H 77=Wood Block L 78=Cuica Mute 79=Cuica Open 80=Triangle Mute 81=Triangle Open 82=Shaker 83=Jingle Bell 84=Bell Tree .Instrument Definitions [General MIDI] Patch[*]=General MIDI Drums Key[*,*]=General MIDI Drums Drum[*,*]=1 [Roland GS] BankSelMethod=1 NRPN=Roland GS NRPN Patch[0]=Roland GS Drumsets Key[*,*]=0..127 Key[0,0]=Roland GS Standard Set Key[0,8]=Roland GS Room Set Key[0,16]=Roland GS Power Set Key[0,24]=Roland GS Electronic Set Key[0,25]=Roland GS TR-808 Set Key[0,32]=Roland GS Jazz Set Key[0,40]=Roland GS Brush Set Key[0,48]=Roland GS Orchestra Set Key[0,56]=Roland GS SFX Set Drum[*,*]=1 [Yamaha XG] Patch[896]=XG Set channel to rhythm part Patch[16128]=XG SFX Kits Patch[16256]=XG Drum Kits Patch[*]=No Drums Key[16128,0]=XG SFX 1 Key[16256,0]=XG Standard Kit Key[*,0]=XG Standard Kit Key[16128,1]=XG SFX 2 Key[16256,1]=XG Standard2 Kit Key[*,1]=XG Standard2 Kit Key[16256,8]=XG Room Kit Key[*,8]=XG Room Kit Key[16256,16]=XG Rock Kit Key[*,16]=XG Rock Kit Key[16256,24]=XG Electro Kit Key[*,24]=XG Electro Kit Key[16256,25]=XG Analog Kit Key[*,25]=XG Analog Kit Key[16256,32]=XG Jazz Kit Key[*,32]=XG Jazz Kit Key[16256,40]=XG Brush Kit Key[*,40]=XG Brush Kit Key[16256,48]=XG Classic Kit Key[*,48]=XG Classic Kit Drum[*,*]=1 Drum[*,0]=1 Drum[*,1]=1 Drum[*,8]=1 kmetronome-0.10.1/doc/0000755000175000001440000000000011760763113013553 5ustar pedrouserskmetronome-0.10.1/doc/kmetronome_2.png0000644000175000001440000011550611760763113016672 0ustar pedrousersPNG  IHDR_R[ pHYs;(tEXtDescriptionClase de ventana: kmetronome?tEXtTtuloPreferences ? KMetronome*\ IDATxw@Igwi4ņzCEO{ذbÊ,{ $G) x+ݗiA @|H$@ D$I)OSRRP( !䧦O(J.bEj~~~RRRQQQ @ ?)yyy%%%2LU$$I(6*IAQvB O E1<(LVkK$R&`0PEQ@\^ݩh槢)Ze(P`0tT*J&&&l6A]u :UZU:Efddo^, mmm6`jjWk$q}9 2>ؼxG]".Fa% *f%IaLEY,V*hLU¨P(LOO766hS/Y,aiii4MKKfs6m Wn1n^<:B&Ȏqٻ)T(dssmfd%ex(s,~ۢ K0Nn:k^<e!0_ 2.RE3|ƒ' A~It邢hjjjFFԩ񤯯 H@@@"[\\\Ξ=+˫4UVWԓ$pIOOoҤ 411H$Lp233-,,j'm֬qqq*ۭyIBGgҡ8SvΒ7Jh+Mϐis Q AQJN*ͪŸ2PXTJo>f?iP鈵"ҡ$qpm="bQ pEb)W 31~$$$$$$gddܸq+T__…|}}7lPV\.yҥKϜ9s}@׮]G~zX\=XڧZ\^XXHQ0 377h\.͛74s[haA*-x[i6qC5S6hy.mg\:gGDԊeu:v`W:4qGCO8Ldl?)K;dmlim(P 9W.6q\~~nҥݰQ4ca·۶I;<1F)1w}W{EDse7wkzU[0T Fuj~";-yH$^ݪް;>|HSZvGGg: ;}c.&-L}uxDtFJEl-/~µG3fǓZN@wsDu~$IAśIĿ4}x7o?~1c,^xuSnбcǐTE)CWY֩W|*OC $IfeeQtA  F87o޼e˖(Ο?ݻwo߾T*'!((HPB;QHiAAA>XF@7uN{zslF/g[g/;{w7 A|nj|T 4qqɸ~.\G[kVѣGݻ#xS޽ AAAmڴ4i֭[WеkWӧOϝ;*gIIIYFPPPP*.--H$ApꙋH$L&U:nll,H(*cii@ ϗH$r3$@sʒH3o2 2 Jr̈́WI3p&t:}gyhMvC[&Ի>vzzλTfCUD~d##ѢZ3ĉ숹[B G(NeJB@IIbOaatԡeߤTZ9(yc3Cshɘ v`6(B\TP(ĪR[db@W3 pYٳ㥺֝z;֩ aJ?sLE),T$ʋ>{] #K ܹtg ܍)"PCh&z8VBM".i^|QFQ5dBENYL1@") JGhYdTB(Jp&JzϮj3PdisM-"t㞃F}-r<(+z_haoͮ3w=+"^0ą{t7{.H(BU5o APDgtq sfXF<U3ls"|H4_BJ RB\\Yp8?~*_0L6`0( [ VX|]vf̘{yyeeeSt9zRvm/^Tz*~a$IbjܓN+fj]+ j( .P@ RJ*" !L(_p@1TNҮlvj+T |5"|)]-PZP`XQKkK2fIxPnT):rk Fê:Gyc6bLvϬ/+ J>~ҖoV!eRPU0y(id$;GDTzFr!%+_\ 2Tگ_?WWלw5jt+W,5cƌ={oE1o6lx"EQ 6m˗/SRRWS_ALfII<%%%,;::Aub }~{O$,ZdjeS_aeH~LHTV+FB#_fsTy|7MR2cY'ST`5<}mߪv7s"{sٜF|ڑr[^].Tw{l \h{OTrhة*"Uչu13f$+W=%%E/^#Fl߾]ͥZJbgSŰiͦ֒5J>7 P_/c?(aAQ٥$UQl+jE=$!i1Yr=2LڐÝhrAګagҥԼ#ˋaVH,ڭ.Yy&EQZ5y#[spxqu+@gTPE*?5YKQ Q>_nݥK=VT&== P `۷oWų<1999((HKKW^/$%%Ŋ O\(TZRRB9H$G áߩEIRF) ^(") EQzVWX)g(Q(*AP ET)&E䵪Q|+KFK$@PQ( Ob IRe3TD\2!ߛR H[%q.+rrr!-))L&7.b@>Wr(R\Ui6VY"eTMת;PVXe HEQ TbejL"4d~Q}*SN}hbqbo'A?OQ=`*ѨaDA ϊZ 俀҈WS`@XnTS_P(@ @Nƍ]`F5j>p93h 0B F0 @ (h 0B F0 @ (h ϬWW#VMQ{_QRP&50 @jQqhl.($ Fddw5BG. qJBϣ(BP$*C,u2rٌ-%roxοKԚS2Lv4c=L iu>>...4M.ر֭[[nmڴ)㑑JF}lulҔ 䃳W$޽ʁ gjmy|Βٴcz }ytҧyv?<2r6w z3?zAe]ٿƋ|ðEa&X0V{U*%hTSJtW|cls_pt|wiJQ)y hP"Fv&i+fgӎ?9{} ʿ4JAUuٳLjDtKgO] hGuj ߴISlP%zuxY N=o$x{7wTvdglq4âH݇HLL}vqq 铟ڵk#""̙ӬY3$ke߽^`:S&mͶa̲[ek}7mEO6>̌;64CS#\5n[_tڏ[6zyk3mh$A;Or2&^uUK!MJ_e3/jg|WR?IZDTWu,KӶ0Dt*S%JG.ʻ|QyDͿ|fkZ)QHIVjYTCYioXr/+%۴V-=r_Rlj=dBwnܪeIW]QB59p+TRY"ޫf'+{? $V*N_F#""]43ֺj@Mx'7XY=mL8 ms3"U1pzq01~q<>ʳY.6-"x6c:^ˑT"ɏ{$w3kp{Kcc>mtM m9(ۍkwj&SQv9ɬyR%Dx :9;WSj,LCpcAXt6{lSC&OM+"rI=AVj|TޗQrM hK.w^QQҥKi4ZmMQPvv6Ӽ_WK[9/!+zG Gc`\[;ҏbt!ckDe2i#c"1DFP@ Ti<`4 F efgd>]"ܸso9ulԵKKcFS[hMeM#K#e{$]Z*Grlƈcf% zg5ܗQr%!:ur|͚5EEE\.h͚5۶mCњEɗ?,ؗJg9S*[՟ϲ (RU*ٹBIyoĥK{RO(yYavBMfCtxE3NlZj*Rų_/WOf u*)+NۣR1+ePy_jz>U}:wwqܸqc/_ޱcG"TIb+qA/lY>L7%e!\$ER3H%(́Qy3TL+Su?Zr( J>֩XJEzx ~ƗCZZ|(bYs4Z(yЄ+6?Q RI9}; *=E*٩RT>@݇M&u nݚ3g֭[5ju9sܺu+!!AUbuo V-{vd$[3.?HP4щie#xF?&.PP\RJp;Y9)/8ig9Su8MyH|PҌ{$R*4ݶc:ӞmyeRN~v{7c;÷>dg>i۵1[MS+]]ZnaavǙvR{fn;z)Sg˔;A0 DV{U!U@U;*N Pv PSH$ l֬ $I(:{D"$7AM*NF]\v/ϰ]/t5a}z! ' M;fv^6>d؊Yrm?wz:E:|m8=:ĝ+)%hWrʪY'޾(pmOlUM1lHޓ>I}{Y~Cpt3R5??dza)11ŷq[TͲjrfnȩg%4k#X 'v&h ʼU~xPS|w_DuSNt:Ǖ<+JӣTՐgF m}F EQ4M_H( ? ¨P(l{@ ȿFb==:)Ot!u;0,B *!"0B F0 @ (h 0B F0 @ (M@~ pp85a6gB[?am Ebb"!b_P\.(D%,f0 5`2J7b: `h"diX8~EQ#(D%xDSTm\AO@G.wY,ȯ<@'ép+37f$6-0j1'9J7|<_r'ĩkG:Z-eUNݡwGn?fk1:^'ܝ2&ʲާzGZC Q+MXWX,9ooe ]MbTn #})KNy2 h䃳W$޽ʁ gjmyruvlZ~*U5V36qGO+TtT3,ӑضIu:yOW ̠ݛ#nM84mjW_etuƻqAUJvcg#.پU*(K98`ȹ!KƄ~\²$W] : ;|r1%6mK%f:ƺz!Ӝ"5 ihK.yxxtEL&;s挻;˭$d0ōREDi{ >urg.vKLm:}ٴd7X;`fkΧ+]r#Piot"1ċJwR[ +_ o-y9G߾؜I{$EC?yfQ̚ 3'}"k~QtRteO}7ھ^ vymKú II 7dYU@\.b=zTI&o@0*+QR&LɑPz-~cn^M _}uԸ0&97#Rji=(GgGF<rQ:]#JTj&n G}1*oɏ{$w3kp{Kcc>mtA*uZ4o̬&~%\ɬ8!#Ϲ?`ɰV涽f̷L; (IEm*0m@M4K&8E)WĪ҉{o7/y47ȕZCcƊpvvNII9zH$ MJJrvv6Ue]jY3ܲw|piƵ*!&-4ܲV/Х286k/sKdET@_NUf7kU*)>67yhHv{OU:{eo-a&vr&H"fihNN:B]G(MѮX#-GLCDѾV.y^1g-RJJ()HÃ9::l޼Y*iӆ}[vs.|Wz^d7r- #(9*E7gR.KVP1;\ms.[MR%:ej"4=Ps7Bk|@)8uǙeÛ;!T$9?60GkS.DYl סI,Y_PYU8zjVSf^+ȹ,{[_Nu02n$/*>a Φ 5RGPFS)bd@Jh) Z7zn~lŦb??}z1e#!o}x|2Ӱkclc %lLV;܉IyqnljL>̫|iCf =&N1Cٸ~k{Ff>:q6ltQeuTbYM՚Qݶc:ӞmyeRN~v{7cS c库ueͤݠg|E(:,䴏}$܌]}|>-3z.yhk23>w&h]XTir1wYBNAaQeu*epvv0L(Psla>xsa_ȓ`\F/ρ@fFlٗMۻb@?vseSШPƇ[1+_ո5PTL7͞Oc`ۣC܉gfMyn ^:4k>v2YTTᴜj։/ -c[{d㥥ܴײ6e-:eS歹\d\czY3*:<ǂ!|5o;ȯJA6iىA.7q:؛*/hZ8U;ʍ=.^UxG֤) @7*gF mP)z;@=P#l6nM5C]wx644aĸ88@ (hFi P j@Vm@4(Rk55F!*a+A[QJr\.WZgQȏF(&$$ԷHQpwsso+  %p8Z@ 'F!D#`@ a@4Q8SQBaaa}8pj(D9mRB77Z0 Q q7 HLL0($I\8~V`blF!L&60 EC~ pW?(0 Q ^~ED s2s\} ߀ad< ۴k¨#LJwȽ9z7׋H#QS׎f?zwd+KSn0fVv#NnaeqeYrL n 4K"i7x4Kmy['ZaZ;nkRrD QS~h(Q`n lY?Tܕ HE0Ju:tܦ8X4inۘaOKE+g^񇍳6<( aM[Hwן-'ـ&IVKpeD(!O1ogH'}"dmzV(@f(YΓ!#_% m7:ꢪv1⟸,gbWt,ѩyZ78p7-TI^/TQI}{nfXM~ AWo7GݚphQ#d۰{ʔ46ww/㪃$ƎGp \}iTPrpsC 9$e?tI * ItA<3v3ybJ ]/lrIfKts?u?0B9MUEj(.]Lvwww.[Wmh$o'#=~! /nd*b-2Z.^<_$iQlY(2Ud7X;`fkΧ IٓP*yHwǒjVv6c=N{| 8Z@LW{k:tq]w,qBRYgTuȽ>-b5nvP.޲7NXk ϛ9rELړ ,z?2`{7֎e,(N8t99^* U/{bﻑgw5PVk[=LHJJx%K͊r,ѣ%M2,44NC QYqpmpݖ4aJ]dz-~cn^M.*Qዳo.<{ژ7q=$fD"Σ& rԧ!$?:iά-yƖ5:yq17vd%?ʑJ'1aOhn154jn!Ĉ"BY5,&lZhޘzЛx\Xs%ℌ<ήGX%Z02dHyQ[J{Ligabne

"1S_U=;=*ZBieZ}JtVk[3.?HP4щieÃF?&.PP\RZ6_9ÃOfvm̨xEbJp;Y9)/8igyɩ4mt=۾ˤnjkm?;mgf|2lc库Һfon3" gt_]Ur[FMnƮ(~YOj`yۯJޙua)RiZh޽g 9EŠթ0M@ñQe υE[!OqMZtlL?. `6-xӸY'wnY8Y@l:٠'}e.j2YTNGeC/jsTÊjUN?}Qh1t j DaҚ!BV͗tL{` bdШzl%/-hOt~f)wq.Y2uEPVc>EZBTTڠUcwe8tA [-~ {ixѣGk ɉ{U7>QzyS066ÃfíI >|Oن57| D#`@ u4AGl Է-PEQj-PF!AhبaD.r7@~f`hBaBBB}[4`(q77i0 Qéln.x@ a@4QF!D#`@ 3%ַ O<0B[&@ P(tssu X,~_D Sk/bHkQJX,͆akd2m3 MQP=q(( < o[ MhQA .xR"?rܿ(s\~? _ze OF)IðM&>b̤{ jcD s1 2Lv4}wd+KKKKK++k6 SPҌ;wڮYsv=`Tj)ȠY9X7mu̼ϊӐOکE+,nxi򜷷N_8wôvݨ)vY)%툌uqt=KVMsY8nT_GJ>:|CYm`;׵iܞiwoڶ&4a' $Ot4T~0Ju:tܦ8X4inۘaOKE+g^񇍳6<( aM[Hwן-'ـ&IVK9D~"cpΞ>F%[:{Lj@$9{} л{%&Ev&:nIjI p;.ӻ8uye4lLgs[ ?ҁ,ѩyZ78p7-Tu+XPV5{GyRw#F۰{ʔ46ww/*é+݉#e?}d)݇oL'%,KLpHL=NZ\y%& /dP$:}d9yܾ}Fk6=K!"ҥKt:]"Μ9rge&o'#=~7&" /nd*b-2Z.^<_#$iQlY骖/(W$m{ @p"n;;صnv4ԤԈjGLq*6`{[nzgR$J{p德Cٵ~zǒ >*$UXXDc&nt/TBMoِNZ8is\}acѱ9$H D^sZi[De 3'}"k~Q$ n,+7[_5ybɨ|!`,3CZq\O1r,ѣ%M2,44NC ?g ƈYNjԧ Sr$@'rP1,outbn4K~#!YBXOܮ궛4Q`Lf ]ac?ճM}Q-͚w6ulH~L=lL "p]{rab+~TP!II -|#H96cıRt,`J-V{e[!yˡ ǣb4RT#,$l* O8~m_BP 0WiHPgY_ -E2ۼ2{FC$Qs(n_?}*aĊ1{O9udmݧ !"<1&&fRM6<Tanw?d)3/)k1PPi9HAQ)R^QmqTQ 1Ϭ;}ײ:(@h_UH`/ |Umh:Â<[ cƖlm$]Ga^ٮ@_佧AugYgJWJR^RFqZk먏\NQ adˆȍgVȉji֦OACBLQ[C~!_~-JQ(9;n˾d黙_G2؋0\$Ee4B_G1J.iAt,Gژ/^Wf΃&^Ǧ I-:UVD-zxTbe4`eh}}z_`DeH. ^slj c库:VDqHygt_]>&9`-If&7cWKmiGȓsD@PBi]km\JQ+&Wwt9#'퇏^9r*UJc`se%y>!+~0a-aRggg 4iS`^\Xı$פEsfqޮۂN:ur>m=~搅˦` {g_6o2ox!4-' KQ})i`LYä5 tCN8/X;wJ?KK5fXzL9iW-!kVwɔqu-˚@&fgy+c4bng[k3ci1uLm |Q}X4#^'Iv?uls&dY>Kp;[9NAP54ohXoyƉ 4;gTgT+ _َ9vzW*{8eγqݨΣ|>:u84 Qwk.=nOmMhHj ?Y7ҝw4WFdav! edbffffimt'%$@ueʹnj6b)eyn8ƌdi1ym֜r[Y[7m{QfGyRE#;hfסߔ%G߯sl>rB d)ܶn]ڵt:rߙ aRrLv-ZvrYAKM>rmm>Oh ofp٭eskOkZ_jԪCs96sʨRa[]yЪ̀]7pLLҫs%"E6{gwrk̃%/ܹMiczm̶mAsҤ Ǥ] ѾYV]wyK4le[ YRWLmG0 iPب" i|f:˞Xyn䙵}{]euymKú II 7 ɪ eXGU,idt:5e0 i@~1bĈSF \0)8;Z5LmLuS:yq17vd%?̈g!˶E7fzWE uZ4o̬[,9u3n v3rzX2m-N$* N4}vCw O+ 4K&8E)WgA>fm]s3J (69mmʼnN+ٱCV>|uu%MGJ_$['R'gn9+]%ڞ9& ++Z2{gk ٹOҘ1qZI/$/m)`|k[<|yV}얾kҾeqO)E] K^EKNHiGP}̼̌ĸ'aGWN{9lpѯP+J5Vy?=63pݸL8d׭8Uy6KkcӋ1*LAyqp8qBQF!= ~ՇC 8%gGSOI(rL"WB8! n:~lc2<35]+FtJҙtCAkwyc[ȑ6"=)޷)zŶ1mp\>*H 8e4IR7-SI {֫ޥ,TVM hȰNdWf#מY7W /g0 Ap$9%MA6L^x~g %G|vDB Ǿ>%,k9\-@\1ۿmrOtW1DRt^cnTd ҕmLJJ;B7*]bݨ$o]]5:@2PEQ8(]bݨ$!4k[ZaO>>|xl0 CnM$&]bXCbnez$pEWxE]}_񈍍}alllw w~^=!mE(ƕO +yDF_ˑiJn:nɃû.<!99+sj󎳏+VVY3^$b #22O:IUߴ`{ zZO_z~p)|||o"kdekt/κycگ ׊Fٹv9t7ۖN2}y6k`\Pt\aԤq oz.>mσgrףɢaXxx8p8;բ٩]Қ=#;Dݗ.AÁ;w)қWkǝt  cHXw}^{U+?eռx)syBW[-)pnZepjģBQǦ>NqLșGV &JwKk &C^8/=vF4wϋ}^0dbbtڵ8KKN|{ihPũ1Ŕ{"W}M]Va4{J5PJ`Y4) m5I%2X%KSRRX,VJPl>u_#HM~҅cIov^Ht{|uûr3b|_/5_IQ~8FсP{`EosRst9[{/PxXhNP1JzRd\&tc&>?uk୨Aˌ/<]+5gI~ݭuJ7=g{g"\y[-'ewfI=ҀLpB&L$;C/Fi@@Yp"oἱV1uO1U mf-0{^op.$#\}z_=gam>m\FDRESCR"-8=]'6e!ixs'rxpJvL8fLkR"raDcteh-Jd[?쐟tSS QN- R܏WjXUC׫V`*Gdgnk k:(Bmzg^YE,p YW=1s@FKRUAe/?])$KWI$Xjdo *1`ƀS\?%ǹ5'3^8QSZ RWvih|`(v8T'o:FU+!t|[0LM^ufC+.ca!ͨHE/F>|cͻu覍Wr-x#/yc?ɭPd3OHLZAiIG!5_m W[9-`}a۾T%FmOS($$$~QhsJ+,yw@yM)$ÚG!JJsbNF1x4-=[ż; 6z{'`ӎ$,^ZK-}^QDMԐ\fFMmU0UDdbX]/Z9²CZbcc E/թ!iNڼ_5G#x$F_QZR@pY|99('ˤ+ 6vݵZ>($hղ:<fSƮ\Snו]&{M`iIG6m:LQjڞ Ͼd 477ShhhLLLnnPӗ--JrT f|M7TÑs /.Dl{hQYza6*IuF=n`,cW)}WlV9j/ bNic8 =@e?4ZrdNϜ9SPdgggddTVVJJ& #11ɉBt)))>8zh]]DRiMQQRo[p}Me.C$E" KFFFRRүԩH*jggC{>+aT|vieeYPrqi]C!V:`nnd2{XwM>>|C [pDFHk@7*I;b&aÆ,}@(vbt!BtoocnTt}x"cEwhϥ trܮ.U ЍLfzzzwKD!nT2{{҉@Cݨd+1!mU \7 @ b(t"ЍB X@7 @ bg%n@i{SHcz!BݨHLLnDdõ;")Dl,ЍJ[[[2L l3ʌ N0 \.DYHzC$E5F% LP(]Ƥڻ-t*Hk,ЍJՕ[-EQb*Hk,ЍJB#xODC^nvH Gdpe&׵A8aUKGJuyw_V:n rgwGB-D?"\&׈v' p8'<rvJHNS-35:w:Ⰰբ)...77i3gˋKV!&db^EJq煵.}V "P׀Sx,tANm ϯtq_|N ב A (t@k9ugĝ$dNj.7rY1?tʠMLN]Q[B;¨XĪK'11?/7pw ݴབྷ2yo;`R9t$Xf :bY!W2kE8U#_f׽q1'[B<}k ;:=++=z Pxbt»kQk\/;}v\O7Ԥ&5?w)En M_%7mn^`m5go{XvZB6qܒWqWLm܎^FYJW>kU2a\=oclHAVFg ''G&/\PD99n_fÜSN`}5+˯0TSR66E.#"[SDfz*4f6 xcge^":$ vOT,&c@RWW@lcVa8i-iPSfDLP\hs̡P(DFw";MGJ CWM.>F൭,I}S]U:]fcλ?iLxMs3[U+F7@юAO^Cw٣_8f_3Sh=W7,{ɹp ʲXQ] lt̯1OGR=?P\sqşɈZ5[G=?hjf1Dp*>#Jpr}IצKhZloŢ$y.Q$RC/rkH8ʟ 5Pko^|QRa@i57;'N_ޠӄ4:TB̏ hV1Yo8sYj>S]˼oG\ H-!*R.-A=t|^‚z4cZCJ)_VVjQ &MVIAGQ eVT'J+ e[x޺/']VrF}R,馦d ++%jhiSJ _c{PW',?y}?a#/@?4"fuXM%~\ GѐEyU?f9L %k.%) ƿ|ULeҧJ?@*e^Rj-}YVw][oqG_G5H~RQ*B!:jT 1#8&]qG.7Çl6E׍~mO*ONJU O(Ef\m{WV̯#PѰW ɫL̔Ukh !Pa&O&$R Vqso3NY_AHnݯN}T)hHA ,))qٳ86 }蛬4Aq6?E+ &Xį<5fjrD3s?PiY[W =-e; i3&x5&:)~y6w&)QrƗ0C'X "R˿ݠ;q#]ia-!\ȟ0d[]\+,IyȽҲQ9玌M=gSS#>Sm*73OHLZAiIG!q7/G|-a0^dd8 c sކ])P=A ( oZa삘+WZT\FeUueTlE3+9))76 -)sZ~-prCc(IIII_8 hLZ8ym̴ *9,6j{_; 2p@BBB@@Y'PYAq "Pe@ 5N7)}\;ypHn]烓3wr7Ŕ괩!"bAsnhۇ-`q'D[q42!+??ӳP_9lRAKǦcT0=#^f{g> X{(Kc>BU*d{o3{_y>959㫜}҅TWIxj܂7~c`9xM;Z."lllp88(A FOֺ}14k]B]-S{HFZRy\ȡnkTZylq:}y2+O zNF9O{0hJ?sBOSƮmug_I2kZaEg>hHG6pBꤣEovi5mOg_^)444&&&77ܼLcoj]rV.}Ny?%-h42J) Ywӑg˴Qff.P$qT /M$-Ww_TKP6:C@FE1Y-)S/s},l,52!RgS1UkM֍kLeܮW%}j+jUIgΜ)N( @322:Z DPrߊf WTT=zD"yzzR?6)**RRRR1DRl,ddd$%%o!Rvvv;;>t/D,͙Lfw!ЍJ~# j~ذa6Kٙ'zC$ݨ$6DpOgўK5F% r]52t]L׫")0҉@Cݨd -*Q ##Wb*@ n@Q F!D,@ 3O0AF L!Y*H Q t#11E &iootb@7*Ilmmd2@(322p8α0se!U X$d2BtejNЍC׫"):@7*I[WWnN D EQN*E׫"):@7*I;aӧOx? [I׫")6IMʾnG38QxeW,]-.66Ç-?0lŸs_wѶ}qyKmMys%v9*J[5%jѥ [`2 {]kd]7K[10y׭ӢE`DFF"##%F[r`َ͂--Γ+6êx1+8eVVGGGGGWWᎫދzQQGd}m\ѶGdpe&kT-=W*5jp oz.>mσgrף5aGWWᄇKN^C%}{`4fMEVMGE-;XEXXf|N]~=|pԧ{k-DQ5J5uɸsݖafc}tzLz)WFlE-؟WdTbn4{o\qLșGV &J7/~< <.C55}d@]vl;)PoaMK*nZxI&:YMuԼrIaTMsI|gdm]usľC*8檵Ol\F/5o{|\\\nnIRRҵk,--%".mj#'y!&ˍVS1=_wn7}hg#)W{"ť7o̮ݹ݄3BS¦njԍ{W,$5'|O?kt? wkՊ?pÊ"\A ʨ3'U,dfEq㆓HpBCCǏ/''DTyb(7~;/$k:m=ݺ]r9~-֓tXxxi$fbשOjS>gU}GbM_WG^`F{ܽOmF< {_uဓ[ftY ZJҦ %zBusi[9kޡ4Ug=.Ӥ+ $Eb,Ybbb022rwwOIIaZTJI|]Du-*Y 4QXv3z}}7O:( ;bY!W2kE8U#_f׽q1'[B<}k ;:=++=z Pxbt»kQk\/;}v\O7k^["ozxeK7/m0yssٚ7=,;p_ZP![k^Hw {7#''G&/\PP AŒ4eY1^^2PMEcf_/{PMIY| IQ%X:{hoe%!3mQTuIIQ4O1U mf-0{^ܪiUxm˸~r8b1S\B5W7,[I~qZҠ:4 쬨 F3gB`y.K !ćyw)QNCt-D`^1 *F5{t!-~z6[FgW}¼'iq۾P7uQ-n*O~q<g@];#_wPz#Jflpr}Iצe3+s..qQ hEʃU:nR*R1m EUW% 60ҬkxoBe{5Ȇ<T~඄7CP]ĤԴ/No {?TzT|.G:D@(A+AvXd}L\gOu/agr)j. (8H*,QЕ>3hƴG/uXt+#IiRQ(HmY-!~9|aj>\x^x.NWZzc{P[!~xhGjx |36A*ءv+m0R#3zx1*|v!8,̫}9L %,E)gʵ3* HozWBN'g:am61>&k~?v-%E MD,hgǾ?G~^@g5![slT@wG̝9w . [/{FQá(h׺Q?IڕhX髂U&fJ骑DZ:V$NH%28Kj1@T"` ([0LM^ufƒ40DFg 7RѐfAX,V```IIɏ+%%%gϞhsrZ('A@'/y[0.}_T+{AD'/O86$!X5KA[*ct6b+t!\ȶ}c:[HEA;`8 c sކ])P=AS T\FeUu-4g1Ғ/B+j*6pl F_]P?IP03"z1W \CMGJ_$[Яk" /~k?/￿9#2 hLZ8ym̴ *9,6j{B 80 !!`ff&Q>#Oޥdf};ТdzɛO2y*4'6d'MlK͹1om*/>bu+F&dg~z}9 Z*ho f͒!;k\M}Pƌ}!Tyi1a>`ЇR%WÉv *;eV'G^(csۖq]|@s`КJZFheҕNqSI|g4#DxS9<35]+ug2kZÃU' (ڴ}DMi{<6dnnӧИ\sssIIP< ?~=OWӷp4w$&|dZlgzBSko#_"yRq RL㥩򂤒1nj &C'{Ƞ_pC\Kփ큠;;p>"=hozQlc(OVjSi9t̙3 EHvvvFFFeeo`0(JW[3ኊGՑH$OOO*ZǦ5EEEJJJ=eQn_L84 v!ec%###))c~SiIDAT. J~z]ZYY:?\c@/;<177g2w5u_ >QT!tڭX8#Q5$Ft1 amRwpގ[ t!BtoocnTt}x"cEwhϥ trܮ.U ЍLfzzzwKD!nT2{{҉@Cݨd)+1!" n@Q F!D,@ n@Q F!D,@ n@Q F!D,@ n@Ģ FJeee;* `6KLL8&ioo@`Quvv&x<pH#a|>D"=~XJMʾ<HO;,U7G;d"ꉮݖE7W}:QqȬn@ 0L@ ZZW+q‚Bg"dCgoZ?N8~idպSQI=dWۍ)DŽ]cvi *nh5qX#YfE>ZHPs8ƿI%Kը~ uB$Z'+vM*c5tJ%v`7-W}}M )aXQ<O ddd~ aXFFFMMM~x!qv ں]l-YI@qDև[_nع7\.7yBYn_ڱ>{^7#=GjK{NO\\!ȫ*sw%BTTDE,y@AZ!!S`Db+n ܹ2mG|(ݍp8 ++j*[[[<r;#G ')cm}Į?`xo☐3!>|Fz[Mtu7FE7W}b285QR!cjPE<3%x@x\j8j8&P(Q'ι7v[њ8;^32X3^Z}lH_@-WV(k6dƪQԵuu)* Lf%kW޶sd0Valϣdv*9{U@F%pJO*ϓX=aXe-KS`[F`Yw66k'~kg&0ǃ>25Mhzo(رz:]˽cK2f,nP|#ۿ<(ⱺ'-xӳ]bEaa+|}}mmm=wNƘ^>M]Va'˽4Ĺ^ x_~{_w=^*Tyb뙵M?FYS䑊o6/t^Bj QRY>+vfh'V6Z'{|οUګiiD-֋uI>MYmpJOly6wڀ@QodM[;Z.{- Y'1<L2uǏ3fLDD=< Ziګf\Q2V'yʱ.Nx{#zC5m D|mh=y*Un^ݙx͛?^QQAR7oތ|~}voK(̹ϔD.-ء$y>>(ڶB)gʵ3F:ab!Ԧsi|_ǭlY{}:rYJQ AY:7r(% +Q!?U/F:NaIAI{k)D)OX~z6PFn?ciIslvk%3ifzk}(zzzٱX%"A1O_-7I!ujmW^z8{v۲5'7]"8'!YIHU qq:\/3X +~AEJ92"-PP2yr-Bs`Кr  Ei]p8ON}FIQ_Wuu"[(>A97 (>t.su@KYwKAD]ψc2ΞHJ"xҽ{\\xbH^= hJJJdj[ DG5ϟg 1c@yy+ҵWzɴ %;Q݈-YKc[vS(dAgBR\jY:]>gc _nm]K)蒋#IJ(f^L룧`ڟw `P!sWMɫu5\Љ~C!@`FHgAIIǚ=ctmu!_6.wmutUUR6xw@_wrն;ҳc"&becD R9rDv:^o|l__%m^7}N>iMԉlhOqڣCMFHp=1}~2;Gjk|MO— +~| 8M-ktzkܶ9k{2hU{6T֖ʨp8 O˹ȖyPQG I(*xz6-zpBގDzF#'񈀝w$8dZNNA%G/;X>cm^dDc>6e4r%4+qC{L5餰FH% qtsc "`/YE W)&&55n-b HFk\QfUxu+ANS/5r#^RT/xE oU8h4~Eg_U.-H|03*/_K˼F$5LKtKW'Q Pv47N-Pxvp\` V\wʹC+1?_든9sK~+ ! FE7 B (}ʚ^~pN|^JUHryo|2/"Zj`aYE5*X=: oEgjNUv6yQMYѼ͛T I_0SBbwࠂj2/"P*)Mi*q]Gn:()&xԆ8zZTMS3 ^zE9VPlƣaʇ딪ni7m*YxVAU$-һ×de\0s{o04!4DL/S#E˦ٵFB䢧=+ 9W(7E@ (njdc3fd6#e>"V!(ic8qLEÆX'"PhDoS}J99 _soϭ[Dp ӛZ`oiO/AjƜѨ?{1r+ʹPMc9+z!d5ЇLwm1ĩ[ݍ9E VkP9j 4 i6|0k7ڻ'u.FU4HO HgT>Cѩvā/Y#D|'5=&eIW8?IJ*)IV1JoH3HJ ==eg~jCSnj噻OW'K_.S;AT)n5~܊y?mN7n*Uh !Zg0t:Dmavu .]=hgo{ɇm2h;u 5Q$"͘_]PkI+j)f&YUF0 c+91|WKl!ݧ+ۻ;9$xs ]#?mޒ_rVpܡm)W7η0&>ܻ+i[|o\\a;Á2{HgQ.:(9{ݾjoEC7nhXVbMG/U7W_>ic(ۮUv1ɯf7OEˆtx5v̟nַv.TĽnu;s򚿊NЀ]MϹBӒ'&]zQ&§~GE/)_nܻ$B6k3L*8d3uJIiN&y/I#i;R,؛wl晼ZYkUbpCbUkVY6'~u~ƧǻC0!ژ᛼~̹aXYjvpSSS]]0^MMM{qw¯>s^O JUPP1bFS[[sׯ8Kh)0f[͊äRq BTGkSWWWUU(1i7~{Q$&-t]|ehK++ Axr:tڀE=`bqT:QL&HjtJj(j9On8gjc/ A$A& Jtf>E777o1V[XX8Q1b{zz',L$HEQTppdG1H@ XxD3YC/77x_IK0. Y Y Y Y Y Y YF3ّ$͕LW6?32HIENDB`kmetronome-0.10.1/doc/man-kmetronome.1.docbook0000644000175000001440000001756011760763113020216 0ustar pedrousers ]> KMetronome User's Manual Pedro Lopez-Cabanillas plcl@users.sourceforge.net 2009-06-27 KMetronome kmetronome 1 kmetronome MIDI metronome using ALSA sequencer and &kde; user interface kmetronome Standard options... Description KMetronome is a MIDI metronome with &kde; interface based on the ALSA sequencer. It is a tool for musicians and music students to keep the rhythm while playing musical instruments. It uses MIDI for sound generation instead of digital audio, allowing low CPU usage, and very accurate timing thanks to the ALSA sequencer. Options Generic options: Show help about options Show &Qt; specific options Show &kde; specific options Show all options Show author information , Show version information Show license information &kde; options: caption Use caption as name in the titlebar. icon Use icon as the application icon. filename Use the alternative configuration filename Disable the crash handler, to get core dumps. Waits for a WM_NET compatible windowmanager. style Sets the application &GUI; style. geometry Sets the client geometry of the main widget. &Qt; options: displayname Use the X-server display displayname. sessionId Restore the application for the given sessionId. Causes the application to install a private color map on an 8-bit display. count Limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. Tells &Qt; to never grab the mouse or the keyboard. Running under a debugger can cause an implicit , use to override. Switches to synchronous mode for debugging. , fontname Defines the application font. , color Sets the default background color and an application palette (light and dark shades are calculated). , color Sets the default foreground color , color Sets the default button color. name Sets the application name. title Sets the application title (caption). TrueColor Forces the application to use a TrueColor visual on an 8-bit display. inputstyle Sets XIM (X Input Method) input style. Possible values are onthespot, overthespot, offthespot and root. XIM server Set XIM server. Disable XIM mirrors the whole layout of widgets file.qss applies the &Qt; stylesheet to the application widgets License This manual page was written by Pedro Lopez-Cabanillas plcl@users.sourceforge.net Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 or any later version published by the Free Software Foundation; considering as source code all the file that enable the production of this manpage. kmetronome-0.10.1/doc/CMakeLists.txt0000644000175000001440000000200211760763113016305 0ustar pedrousers# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2012 Pedro Lopez-Cabanillas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA kde4_create_handbook( index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en SUBDIR kmetronome ) kde4_create_manpage( man-kmetronome.1.docbook 1 INSTALL_DESTINATION ${MAN_INSTALL_DIR}) kmetronome-0.10.1/doc/kmetronome_3.png0000644000175000001440000011427611760763113016676 0ustar pedrousersPNG  IHDRRI pHYs;(tEXtDescriptionClase de ventana: kmetronome?"tEXtTtuloPattern Editor ? KMetronomeo ' IDATxu\wbeUQ@P8;~ƙg݉AHH;cXXE>qggyawy),55吖&(Bud2al۶i:111{RxxxDDT*-TKKzpppJJ ɲ,EQr\35%%%"""==KNNH$jZR&1 C,˲lvai.8Ø_,Kjj|Teju@JB<q@ r52}tsDzT*OIIx\.WRT* ;;;@a@QTxss ڳ,+ccc}}}ryFF@ DVzw,\>>:uٳ'::q#ߞ5hWԴC axe=P(0 i:99zḹyyyyzzzxx8>u߿}ӧO*%'R,B,%Mϐ<8B*555%LdtTX cٺ]Ƨ=xZzqw[M}=G(2҅&mҎ Oqdy6'b5'k"ĵkUczZ) Ò-Ulاfb&''f OqE?A߾}wqMPqy++#Gnݺٳg7nXzCKHHнgzzz!}:9tE^A0 C\.Ws^yA+s<3 j:o|G/2(+gTddm3BK,¢.]}/Us_TlUBaai! }R{Af2,⚸ILLs-D !OmŽAm<8$$RK!6iFy֨c܁kVz5mWf(wà^7( iyɛh\7V1߯hY _t+*?h۶mbbBUVx  ^6>>~ر۷oW˲|>_ooo?a„+W>}eΝ;5*(((***u 0>/HLLL#H =}anNseGTٯ4 5L=}܇{'r?w:t׎.ZUU9v9λ*Q[jǒ+gn| qN}OS_Oҫ9D>O^Cx$vjWF]"GU # <!|kEΥ\<)SX.g {8¤iKȝpɷŰets Xij -x@˗/cǎefa.\pcN>!ty䗸1cl۶ !4z踸8#5 >}3&**JSO>ԳgM6x)`> (##=}=x9l_p޽+dG%\!M;OW2|X,ݶW9gʻG+,L0m㾣ڰ/߸`藺ٱ:!X+kJz-hfzx[XiZ.N4M9vNj΅r&S|chعgmGeqű,F-XNӒ4Z;itڜ-`6"^ eV\5Gu]MKK[|3g0 +}/&&f!@i&-l'FFFnܸ8---"y sffuhhѣGsϲJH$\.W(d4PyP(reaXy{0 Xailڦ hcB8X_wSj"o9Se/a~u!ðHsbV|*Z2\Ie,CLv^$-oN.xF %MS"? R{3 ޾}Oo>155d{J$\MMMu;+ {gK`͆=6ų']wSG/B< :v1~7|+|sErȻx@ 9F*xֱS.aI9ga8Dނ\0 M=g+(YV܃Hs/Es9[AJyoRA{ccUVP ry[[[e>(eŷ2YP2 <PfA,(@ϣkr?!Rikk[|ð ]r1FFF<@o|>_:IJ,M4MZB$ItbYV.+B,yЅ*X5B^qqw0L9E鲯zt{ yFe^sUus-q0!!fJ33ӱҟɀy( ̗߱<*D:7 "N6nڌ:C4=` cǏVQ,tH*kgO>-'&9E>%_0xv~*+y1o`BFpMtg g~{!tҕ3.^5eR؝2LXGSmV:Fش; z|5ۍZ8qIbwt3ɼ/[}8a<>K^{m)0aʛiamJ~thK“ջ=T]BB8wA*B:uB'O\ФqYd|:߬7RaZUӢKNjBPAC tcǜmKG"䖪ez˿::+]@HMQN>udn[Xv.-Mk.X3ɕG)2‚n1/lkhnVLeGJUG9:ᜠѡw_y)&Mͳܠ-˧m ` ~Cl՚\ćGv:Z[4tD{wcJ8;mF}wCYnu?/Vh:x?ˢl jizU3FJU|uA!ܿx[/ÓTvcC쵼Sƀ֯M]WؤOGt6u.";sz׷}N_[E:u]uS,Gm|~s[sqȣ܍2ðTSSӜ)Ȱ(t񌌌3gݛjcǎu2 Ct\]X˲,bXaYa5W m9T!*{>:UmTJ~ǶhD';dC!J_Yg)KA_qyrtȷvTXܪ\'>1L_7BtB.k\zԝ9tٺ|>$]ߧzDڴߺo^‰2pˆ@C߶c>CW@s׍d2&'ftX8;w~cHNC擪>weI+HM^ٷ~Ѯm/2XS Y" #Gk234:; Mu[L|z`Y[=#.:xFL8όg.k{({N&Ņ. &_<8zwn[:m)r}IcJ'6a˼G6OuY66E"ߩ{V5]ml<[~|=^H3n^S!Xi7ȳ[e!Ƥ=s>{xKOr.u{Mc봟0S<>2:RK1 XJFffkQ!uPSi%G#urT阁Ґ( 3O ˲ȣݸ>ƒww<,IYr J*1#؞M:)D 1bi23'5n^wm|O}W/[oIGM{oISR,vҬ Zձ#"VN !S(hNϪ]y I%/U5^2~L* rB9!Ĥ^S !a96\4|b+O}uB\Kro9"ϯ9\*\". TP(ԽSeee˵kתTի[YYFkdG:[~M|W?qʿoZ߅3>%dhEES9aU Q^r潰ǔ# rX9a~C,TjJ,"D\/n?{1p-kDRvlV`xE>3q63hSvSV56MXKGEYoQ !~7L}94:xtYf* xrgmg V#$_Wa۫!1j Qهc֤k,xd7ni8 IDAT";X F|{شӶ:uB>²3V̻CKӦM_~Rp׻+ˎM3?!D'Lꥇ3-ܾOqŠRaFZ=Jܠ~)>݄80"Ƣֱt龃%~Xmg e2 !Q m[Ϣz~LGK¾(NBRIX@yrnމB#9:Tڻh~x{ !Z9JJ[kf$bU^rEլا7C22-"p-+4;:aљ%f²VWm.~ƫ/dB\360/_Gd;77HWZ3!%8,nslE8.q=}AXSGC*t[=8!'4$XK]{hĪb6ok "Ȕ(_"s^Ð׏s9A1i7/^ota'E'^7r>}xzaۼGww9 MLK_"}W@FQT||cbbmiӦA娼.gf)JR)UO>9A>~Ç>$A3.˦^4o݁ˏ߅GE}hPJ6Xwi T17v9K.m9AX4Bz;bcB^ܷl\>kPy0&6)B+ v:jH$INm*0Np@YBLTTз.[6qqYѓ늈.=+<ٛԌ +BtU)θo68lңE5CLJVYgư ڲc9st=G,:$*y7iN)Da6w&*]:0gD ͷ|Y=xDULYԺBS3Z='x0uD;-jJ A#ӧ7;7ӡqѷo;z)Iʆ$0mjfiJ{0 9sWBbbbRb.B"x!4j׀~h^9MksӦiSߙ*ՃmvgJ߱39!ѬxXeY.1eefxU:7_Ao^?(3>6Re^svtag&e(`W(j:::Z3~Q\;A?z=6]RihhhIG0L&]t)v<w<\*}%Fd]wf-k 򠋢<^e^(r/h o+ yP2 <PfA,(@e(eN͇UxW*?!Ve'c@e(eŷ2Yi/B Rvu-dp8Byt=! ).޽i(Ri)*x6ʼ" !7,˲,Y^G666Ak5 T*04MRyPzcccC$XeP_*5h ZJOke(LRP=p\ tܛMh<#I|\.AkZiMӔ+e"$I⫒aY0aA$IZ֠5hF$M4RY7pq|^2O˲iPah Z֠ڏÑ]̂2~'lzmXӻo4dm2S>k5j?x7FQ&vk۷~c\,Jx!d>[޷WGbp*jw_o:a 6o5}i~غ-ɂʩzE_+;tX&u{{6=Ӌ;[jQFZߵ"}XeGvjS^s_e!4.A{;aiR޴م#$EnL#c]?z y/c=#.Mz׵ ^}nrF 3-z7!Q~Z!P.d)6Cڴ1Ao￞wtmco*.]xd,orbR%>N#ф݄֬3k ~Ȥ|bco֏Zp(ЙIwZ3>B6P77gE=UNjFشoWbZ<~4Ufh1gsDB'X8^-r:ELίuɉTFxuYh"4"rBtcƦÚuSi׹V mB/Pu |a3Cƣo͸S,zioDHiTTz=GaOs{.Ũfm's 1γ&fwJwA@_8jrN 508ꃗrկۇBTڍ\3C`|:z_ ԭbS {2?wSfFoTˊYI9ߥ߈jBoe7v(ɺrAb Qh~TFq+Y*ej  z)BnP(FAK\Gߊuz+6^XtEkzMj'JhX*-!A0aް||KW'Mo}a%XͿM=I-¡\t{ڼN#[ pNܰ{ŽIWW[j3kzG"jЖq C8Hݿl5.b.QA{Vb%20 '+4;G"P'X7~AW *1:BΣe)%Pϱ2瀡nwl4| *^64IrT *WTMĹ&pשIM}b>d[u!2-GG}LUسE]¤ >^|F_4]e'̚pL.ªnE={ fPaƳaQ㻐A&ȣe87@(}T /KΤhbWIpqyvU'Dzt5׫"?SU͚Hyyj"Uggcv:w)NX{+Ӷ9*99M䟮P-Eڷg_M3~p3Aͱ9xڸnzۊ{#,lρlsRhY#b8TADG;'Dell/g} ΡU;hӑy >  z)߅i !w0wA//y&ɜbY7;cj=+q `f w;q\X Rtfcj @J.\> eo} LT5V|3.. TN5>u#ZZ[(]X)8嚵tikjxkU!ם!~9O7ut.Ra>Y悀G0ķB âQƒDE_KBu3հ|}liIK#@g>ב[isؗLBtƇR0AzfW\V jWD5\ݸ z".pnݴS'l;M[#=J:RD$2&5h ZJOk)))Ja4n1k3/O[ڽ}^xbn:g~!DWy~"ld,rRCbn]1QmRÄDI{euae˲ 0 ac\6,kll,J:(4M BiNHHeӞcת=iO:U='eSBVR˜D!=;{41]9!ZSJQ'fff<sJJJDBP Ak\]]5==Z<&S+D!vy<Ȟݺdɱi3vI<m;DQEQ$Ib9pd UPfA,(@e(XU9;4So=Ƭ8:/G۫V׽QjU :R^[- RZWD;}kHmjAիYe%/ț~ oy@IwOclčqA.CFXE~J`]?IC4g(=EzBsG+K:_M?7@޾eF"c;φ9cGN\m'Rzdi>gz5k7=hEn޷u>53}d 7nᰶ}}s2Z/# ;wg;I?,fh}}}j5j?H ]߭w5ǫN ߼f"505y/@7@y_B: Xbb=)Cʈcnht&e? O5ߊ w~.}ɍUtvySzƐʂS'h~gai'ț~ oa2g OgDy!V|gZΣ-b$C%(ԯ1hfL qM":^M+c{o CmzT\.IQ:3+MBBB5h Zdkz(eߜ C!/*ީ8ہ+?\ n|tFyyYmK!333p甔2m B!!!Ak5=* u)ݍ%H.Ip\VճS4pZ |V.5Nq.i@J*ՠ<|!ĈZx0ٴyO*oaR9NQEQ$I4@.7¿WnN,`8!DyrfnF;!m_Z)=Qi$J&UJ% T)UK2F\u#<#LV廸2-e>fUҌLèm#{f6#v CZC%4y.jt4ț~ oR:h?°a)B$8 ꕯj>z<4|>> JOMHLv5>2nS"_9L<3*Zm9ظe@yxA]:v~*9|.FJ\:f~< 5XchkK}Ҩۂ=*E]ݘRIP"8Z_1ph`nRҡR oV 3h_,9 8 Sؼl#P^uVrͶ-MKBVyJBH{+d ! #L/I7nǶ IDAT!1=Zmئ-ɗjQpqGM }%M۫V׽QjU x/5*ށ[x!vW?D&U +QlZ7Wf.y_eț~MAk V5G3L$=.3 {=o0%ǶYcӸitGG{_O\!k^KZqaUǏ^ ~gP֡4e,)#\2'-2?Kx'`SB+zGžH_ާD&|ypuݫ1AŵܰDŽHN,rڷSU޻3ش{-u?7)1sl:h^Uz~Q#vNs9gw 0Ky}50õͪCUț~ o)Sr5c-* s犊A3>>NR"{VNOSHAg~I{̴m!Ɩ=Nxz0?nk(Ņ|L`)#5ʱͭ.\eZľVQ;'8ɩct'SHۧR]u^v-ߥpcCf 7".]sbGڶ61dJ+U3]~U]? aRK(y-gAz yM?%Rz ^.Ec[Ɩt"uˑr¦=Uï7ڕ1m\LWqTի~B\sbUx!IJ ~Cf㔸UyK*9B IQݽMqJ?:z'9۬,?!}\/2J,ڮᄂ)(JBL$Ո~~6U4 aaQvx |yM???oDo0hSּg.G3j}0k,B]⃷aȱG[άBu՛Fd<;3< !0B8Oh oи!D*2~nWǻOOW sWzk8k4? ~R ZC2;[QA/2k9AJ7@Sy3LJ,8 ²awxhwyܩ"͓vuϞcӤM-[B-ޣ| |vDKRRPhKrJݡOowRöyӯ5ț~"o,2 V=zdmm]#‚'InݺElw19Zy<J)8UϹD:[!1=Zmئ-ɗjQH]>xe'nkTvh%}ͼZ&T|y봡%dbOެ~sZIeӚqS/K?{дև$ݥPVAD8p{Žu/ ^7'N\( l-3y?TQ} }r5s6w΀zZ"όpFa[oQm:M۸̋9|QbG^lY!Ib e99g|)XUKo2w|Cw`@#?1s1s$V5O%s^L<! ic[~71Q*)wmBײo?|)&nus-RNaϘ:zSۼoM RL]y1V~'w(?%^~}]upD ??B$!{8ݨSR}aۊyK gYZj!degWm Ҕ:.bo¤>N\|z[MoqԳxNsgtٶhpH׭߬j!Buy֠i2mKn mf^?\-!D Ö _*V*Rk؄4H>|p:BHzu㑌{i}\4r+RN8CMAQhB(#(LLʟ#zxwqoa21Y`KX/Rd$BPH0{@;w]}(|ߢy7_TVomU{Էoe/gݾ@o^J”"ĩoo=LY42`°6Ŵt\Y=kVYVaH$I/ݶpknѫc.۰h}ڹ{fvCfmͥkּɁSwR#D c.upRWs B*'F3C.}Yhm0w 4Cxzz̮צ_ϰʼnǸWYW=0!ܝ4òeK#g[;OnBAաRٽؕ+kdD !QfsrR23-C4!x<{;Hp=/l?<9 !d<`ʠ;φ x!vc}\2d9=ݵ1d5xKar,blg'- =ѨgOmtCGZIawyA]F_:jTy#=7̭cS~ 0l: 3;ȥ>BEM={7qm&=؇JX/ՠq'ڣC&/g_Ke´4LFRq $e~t\^DUBvy'rc|yt@wf櫔dX']͈aBT1b¿$)30 -B4 "ȺM{o؁cCEN KeS'ua-g1z|-2e 2/MxׂF-8BC>GnKBnPZ_"$jRXΩ?0YAٯ,?!1[bԋkv^Jc?/oh>aw} u faQ ڵk[f2 dcffVԻ|>?<}xv1։%Goՠ'm}%Fw @łL.L4vCGrC+үg4M޾զӴX0>0ZdrPN9{;g@=-\Y>jwkQN6zos>JFu[4gaa{ k4bJAD8?XXׇ=WIy_5q퐗↯όvK.\y#4n=zUI8m6we3ig D0Kk F7mnѮ%7Eďw!쿦Ne""kٷ>{ݻ7hOnx6ґ7}G ;OiƿrPbqStRx7VH^cN<th"rk m7E]ۺ64r| ={!o޾ :oF!65'ËbBz{X.H&mRX1,m_qD1@Hr`}Xn뀹(n[\PV Z\]{_E;Pߤ<zl BBB$IS[yW2ަTJQ86FL<۽s7>"ZwI?JMQ "'慳u05EǥK'7_^?v/Fl}ۑcw6H57"xs|:v0a?U3z 䚝.tdX86Uuu~HЁ -:m6^ z̞eږ;VqޑU& "x}Ζw8;ZC}-P/UDۮ];.d2AIKKxnϪڠ6VH{@c=:̒BpȮHG@(nΚyڵyEO-qmWclH.L|}vב5[gRJg2217g#M\>ӠAwsq}&=Fq‘,j஛>% d ^}gL6stߝv(C<*BlF}gNlDSK{ZA#IiZ"!Ro&ד?BHvc攓fKv;#33S.tW( jڠ6 D"r4`P[&B!Mi!^ѽιKϬ[w3墆ރDŽl{"RkC;c=,/c4]Ұw_on鈣_Лrޚ7:3)o[HѧY~[+К6L !Bsci2<úh٪ģl % fvtwm6hB^&_^?k8:h$IM]ܼm]שi t!Qv ] eɶv.չg˞:2okV}f/m6wisa>xRոͤI'|)~ 1_I/{aɁe,/;8vEMG_:l{:&qg[rK1%pEqStRx7VH"<#|0龍t/Q $}e5Dko(umh6_M1 |CѶs/@V;- NHq;~OZY}aW-0D"!n]+}h`{f s|Od Su<VLm#d?*\ccNq{߷oqf:VKq F2 aϕfC¢@`kr"^-ȍ8w5I1Z)=MyLGKU_:8˘K0*! }e IDAT*Bp$3_]=> C:4G ~-@E(\ωwzqԤ}~MlwW[6~{/_Gslڅ3c.vV-~EE_t49}ei}|,ѓMoѦأҞkWȰ Ek2N<"TW˲]~pt٤+/Rp֜Y?Qs/~ZHг,X_څlʾU݌@oXƂ_,Gx5[j *dggU盛 cffd2 }燇t*JxU $I!ɞ={ryQcbb"""I{Eڮ^c\dS/zcÚ-O= JR4 b7A888TuCBdo01OI{ι/6MXv zj?Bxho5S*,Uqv^p62@QMzDV~y{! ln@Of&Ʃ5$m _&xC)ӛWNFi4ڟAZuQZL}Y\vM:FKmۻ޺3Gf+ : ujie}ܸqbhw-~R'>Qk:k&8uգi s*##ή$I(syso#2䜺I9+5[FӳnuڿmWW=@5Vbc;_cxjd(󊌻3/UQ jrҞx҃) yzj@2SO++n1o)I,wMA:1%\?j<ܠzb(wI'*o6fA3]֎n H?Ns,v:vm7yRg6B}\=q-.Ϻa\A_&F}Nqٗ<=&M<{~M?]"[{+UOJuTbX5;sRgB&/< IJ:՝2¯+a7pǙmM Q [olmTХ*eͲm[[&MȵW ct0彡N[[[^J@qAٟIt_S߱_?Tǰߪ@{/ٵaVF9aWL.,@5USt];Y(>O|Y!KzdOUd2m~th\:dI!K(򀡔pwaV;<$QO@eG6&YWc~zs̖N$<6?v~Tʷn=lԱů7:1R<43 ciҥ㗟F&/%+Cta Թp҅-Ss =zMڏoĩM&-x<`b\̭}i2fi;t_v.qk޴@jh!xd"_sLZո:|V@)y@yϛh2v*l6`Tu+h>5<\BKukƂ4< !xɓ'OJ|ss}at:ӧO W)nHppK4777::o߾*A,*"ttt8c2*P9ݻw[n]Trss=zԫW/]]Jn[e/^n_ &&̬?&&&""B=yZjDT*H Imڴ)u#IRy!SjU >ܨQҶPNU,IdBBBttH$q\KK !GͶ777>ToIi,BHWW嚚V1nҨk/^}6nҤI%.00gϞe+O9ۧ>/YT [ oQB)$͛x&٥K###D"IJJ}vhhhzz[)rE~s3]F|$I~%<<ϟ tvvXƩyڭ ?|!Q֥f EQ/u1sot3֋ׯ_G]~AOOCttmۦLRo,eOHa6NM|-Xeٮ[G{~2I'z8:*p勝]ǎy<P(adddggw…ϟ?0ba5sn3p˜.6,J1inQ~1K$ٳ/_uٳ͛WW1$cť:fM:I:̒1qlk?-(7t%-k}BIQz2J ~ȉB?F}[u]!ח_y1>S0}*@'**eڸRHԷiO wW,CTqĿgSgGŪ^vv#G -Ɏ?^X2166VzTTԶm( FrCΎ-mlfiieװN/S/M~:usȔG"H2E%/!վy@T9PKKfkiiߟbx"''q?:jվ'n0/("=xh!Kfʱϸ-$vSYF&m筗i!p-uO!yvu3k+#z:3rutߴǿ\i?H-'A-lM-]fy\H=Eu/,A 7ƨNwŝy.1kMy5q[p*3D>?^9i„ ?~*ܹsiiiSN|r(,s5'GA;$դ ߯s>I.rkBs^YbItllU.. wO/$=vڵ4"x!c<ټK?d^-!$|`Gه.W~!`̪=MGGb>|Xy˜L&;rV$==Fh4:@ ]zMrrr( 211a0T}ٳ 8 E{M84:lv<[ߕ2?޼qݗce{jު1 I'S'өS UlzI!x#9 6Ϙvm_LV(#mףD BݥxHyEڍ郇S(RI02/e&բwCѩ+&GBCUoD Sb|͊xTe{f5Ms7l___WZcfϞB `zM$5Ic^~Ӗ8۟}ϊEVM]rsEu7incj^{x)/u!F ԧbtS>^K( z.?E=[4|(XeÇE"ё#Gbcc+bE8rʼn'z q:n``P½yۇ2~=ȴۯsSBH1Q|lBzs#y_߯ T:2,333555111>>ׯtgPs?>Pmѹ]y+ 12Lv.lwv_9~;z׎[~4N=rױ^}7IFEnS߿;eՃ|y-^^N1_Fӵ`TiJ"ȳu:ha1~HaaÞx6OL :4RT[x˔c~+Kqb5m\_# B4=g?X8GA7lbWcƔ)Xe344tuu}ͺuRa٪*ϧP(Hh8+Ky&..N XZZ$a]BGmB"Ijg6Od=5O9RI"\;0 u+\hsޫ3m&YT謫ءW럜\@')))===###==]*X,PNrroub&yO_?qӺ. 5ؽ!Ǻ7B+JSjaj<;d-tڠ\ BF^& r%9Nd?;s:alCm *1̻,_Zy?W]<@nI"Wׯ 6d= CEQtb Q r2e+( 19sFr ';;p-snm{[ akBy'qq9VaZ/ӸoއϻIDATfsnanL&1 !DwsG! 1 ܍Yz)6$1YU?洟Eer-:L !sLY8ʆ3 yz./^]"m;%[,RpcSntd`!iFoqKC,cVڮw\J 2"?xXBC èyAz&л+_"bbbBBr:tP!"==] 8;;Z E֦r/ =̹B/rmb>z ?ٰ{Gy(>>>@N3 cfff Th%8ԥKˮωV\& c$rퟸKg+n?>[27 ƝLHYu--=s0ҺZR_̓Ndu%e/,Ul@H鵀a@ŋjkS.O\իW)!Cy06*N$͔*Q,];S&{J5:v'+#i֣Yxf7jhΝ={lذ۷o/^ح[ʙK[[;33з߮N^ȹsf\xg%u "?QAc[؉9hc#T-Kc<,cCǰϞe^<23G3z?Vmu޽+U{/^8qk׮ E^^ޮ]h4}!sӿ?2u4n 4ғ's0VXeճ#{Ԏc;:tjv%cc%ӨQk㲬<©"0hCOBo䰝(!i/z8BrwZ ٔ^Q [O98R:)|%{E]iۼE'Y: Šݚx_eE.{ 6mmB5h?+c=s/Ҍڍ_0sss՘@yq |5蚏?6RVV֖-[$ eʔd6mcǎOWETAXK>}dbb2vXu.Ν;cbbۣ֭Gѥ#a،ַ.te!|kJ|tUW^mҤСC\r < \zk׮$M\޽q߄Kҹuqny@aED䙵Oi4;y<%|kHiu MVnpe[<)))&&֖FAWk.۵kw5?+ ?uttCûuVjʉk zÀǓСC'ˀT3~ wpS,XLŒM4KHHׯ_:qrrjҤɟb,۞SWZxiCJE&_-7M;M}L&5l /&i<͉yP(H?(B}i mmm#""RRRB...NNN8׼eC?QvP*" rΝBtvڴiS 1Yr*O̫9zb(@-ZBޔY__ߠ {{{??^z嗁8BTiT,Z V^yXޛWn޼cXXXbb@U__ Tuťm믋z󕯦|a7.:*ߐUl-PE}B$IMF9]*%Tjim۶emZ-{0˩9꣜1خr\.W_APUw*s >Ghi$ yʋsiO(FGG*10 Dׯ_T5E0ɓ'֞ypɓ'oP!4G-MZ! Jmڴ|sWotkTYe6 AqwwJpų279NQw-,! _]VTst:_|J3T&~ @ bXƂ4< }QQQyyyW1/H*0%|:u*P;6h,y@cA bXƂ&HLLU 5Rfff%Tg8@& 5:1 0ںAmTgPbIyrחJ?yyyw.&BrG5wE,8qðKO 4 JMIIQ׿!I2//O&Xn(?+DJayx[a*ʺ$KݲG A&Q^V-/6RBɁY,pGPh2ZZhiS}*HZZD"Mx*)Iʈxȶ[7# I#F`OTuH9ߘ)ay(''ܭ vn]f +EJ?}'< ܩE!#r)9/]]qt3!D?;~˖u*Y\l\o`c&&X {;},U+E^^E,LJ>xΫY sp*Tr0 @mCZZ+];w_mEKZLv7G,s7ON"0LU0z?5+ppڠmDq7t$?ٷ0޸Q{lExdH@F]:mLs w1ӡw5#qRնJK@oj4a ro[<>:JI$ YR#Qw.cNC!k[Gg t7G1y+[ǖYQ(԰wRuu @}q#e%Sh -c}'O}ayꭵ?ܱ!g^ :&]غrHd|e\ڰ0$K>=v͎ZF(bw`7)MytdǑ믾voG<d!n:²iѷFFLyh͝8Bjr\o]*B^ UL|i%5`!#;Qn20eНgmZUG1Į^3O_1gh68cderR&Lxa\ǺϢaa{_F?alKo{~mt2媗#54TdvvޚZ4o2&4SXg\~&pJE#ߞx٧$G`CƭKW.CaP_e,34 eJɊ 1g <cΗ1C3ǏιFϤEJZM(f'Ӿ_\evxY1~F!aݬ˧nLuy;@0"l+ʹʭjќ2Lij(3m(tii˰f"4C~pW(: x}y}~H9#0 eo6$ ZM[,OOby? uN~ɳ'hcu;[5/R) s~A sJ ې)ߜ^7w(g/$pUF%,^7J!/gsWtlؚQV/To˙){jRQ{,u3]Ji G6 U(-shꉲn!1/{/3?8Vd.߯M\bQ}<Zw@'I"^\LEҚ?jL:cA;~cuvh{{N3c ڲFY<ϟbGޫTQQ5Ғ!p=.X#9:P^B:&bFV{|2LUUUjZ.?jNkllD7 ν=~kcWϨj^%K\>|i00,ˆ&$,fش B _Bhqݼl6 =Ezr)AJGnճp8D/A<hlJ_Wp7QJiuud2A_T*euH",\ЛŌsBbƜk zyBb@-<h!DKBinnZV?7]׊MR6R<йEa}uetIϮsrÀE l`\UAá]ZyzfC/w28֞GCwllO sI,XU]:o|{%Nb뾨=s;/' [c J(y=|p߾}CΛ7oҥ97o?aÆТE۷GGGSqW$g5}URez= z!q\JJH$sW ԯ_ϯ^zE͘1Ǐ=zh[$7p@=f :gah)a3zyݾD5i7k(tYi#/SU]Gϑ&NjR߆׍4]ݨTo~< u.2Q9|ń rs*6?fMۑiB.]] ݺ4yTȦ/ NbK~GO㍍ ǠI|h.`؅ og"FS[;euBa?sPPٱZvmFFO?%&&?'Nmnݺuȑb< kyHKKz`HLL8&L`HNNy Bggg1v z}FFFjj`[@ (`{$8N4^bmdžCF]pmj.=MA`ھpo;oҤOژ_ضXZktX;0θgO︩oV/9k>KMK0o`֗oSgzT4_Bڼ:L>w'R2zKnf싕ldmm?S*)4ML&J}QRqT*SSS{[aV&z}Yky.;HQqBj͟^(Vi: k׮'O6R拦'JGoL=yt-G{Ol47}ihJi'@ Wl}WU.K(F)-8و':HD8 )AM7I=l I0y16%GO3@Y{2#sfX,u;D"B@1pM6]zuƍ0iҤ:&$$@/~ѣsvرc̯` 䇦ii.L(8A4MQ+ Ln|X/w3s b䳯nyeky2a@]q5͜Q8)ƈw:y#zV$w^`Nl֘^ۍH"̑91`.k1 H(_FG}ԣGǏ@ݺuUv̙ӧO6!!aҤI7onժX,@\]]Llٲcǎa;a„w|j!$juaqjD"y*Vؔm#~\M\W3Fr`)u fu5#?VPztdO^c,$~$ɓkO>M4i֬Ypĉ sx||ĉ7m6Ft@@ĉ_|icǎݽ{wРA֭+ !H222Aaxgz+7qR.,- {jn`^ (c)`̩n,MҔ=kbݹp)Qs^_¿ǧ R9D&6!IRެG_>9¯[~5Dm gׅ." Ο$G\iJZdBo~yso+j J׭[g^}ŋk׮RT|̠/_FFFfff[AYhTBP&iZJemm-e2P(P c@4MaEQ<6%H(:11`  DQ<Ǜ+(8.G9YUyyuʜ168Ir H^BǬ o%j%`0l۶-70""ѣGkO hڤ$+ZbMz͊ (r* Vv :w Dج(b` 咕{b浯Ir'/ZS6G> ͟!0G35"|)tްV/8T:S놹4k]R* 1n^t)kc>mG.65C܋J#ۯ퐱 ;*wYy9*{:xA7}Y[uIf#IUb%k0uh/>qɄ!ջD$/ԷD1{U']FΙX۞֧D=nJ@ %5nսa.ܙ':-/2%]?D)w>mUnkyӱXm?a e%37EdMlڱ&S(*VUou)pӨCBOsvm9^ͫM<1sŎ#[>;OhVXș3:-'ƚl}; x`͂SQ]_y}fO$x3SnL ktl凥Xmі捬+7E_ٳaOU-1@n[v8ݤ}?7n}ICZw%mRbG;Fyګ,U*OY\0W05*WSZy$nj`AsG;O^y-!KfםЁR'<vs )FyO3ĜvMu$m_[ble@<5>ܡUvyս7^? k*O2dhz|1s@w^q?Bk-p zkok FX}^|kköu\XZUumhf}Zy=tSɇ n]C8p³s.K 5%PxLyklP44}3(`?x"Q5$wI/N5g[_CUdyZV˺&vn^M|r}j]m74<$YسW~s?,+RoU'&+%cXoJ:d С_8wq~ݔ7k߰Y6E%pQ^[5ǔGv~Y(+b]X(-BR"b֞aYkw_-D$`Ja;4uiڱW͘srDTK.$²εwQ1on֝{_ۑ_/giP|Uz5J͝jx!JXX8bXfizv:h˔8Y93]`iEj=mWXE lwR6P1'f׈wԅfμq6Β1ӂH\gZI9Bba]@`ÚCSs:/6Ed6QѩFJ޸+qFM o̗WS սeFZV+\ŻObb_;y[$S&/Ryzi&}kxFTrG~W!0Ɲd21>&{On%W`(^xQޖ?:cޫVtu(L` [xbK}VоXC P2˲|ڨn|{Q~=rXNd@x'7 [lN0 5bB%Us;F DBU@j]#U kAt@ T55P F DBU@j]#U kAt@ T5JVyAQTzP*b PJ"Q (<ŲlɊ|@!||| R4[[[^_%/e>}0 n Tt%~xBU`x%K.L $$$c!了(;BxYeBd*ļYY߸q㯿REYYY@pp;w.^ح[VZUF2L Tj*JxϞ=D eFV?~ѣ 1b[ה]7ܯZE'@(}}'r;wԬY?񱶶E,۪UիW߹s>țgޞ>tC Bͯ?C`a-!rqj;ȐHII9~H$=z믿 NNNիWUւ bSRReQ6Me,ZϺ[^ə--!zZBPS nݺ1tкur5ȑ#BP*:99͞=;##fBI<=lenˉ qVݺt;lڪ?#uK<5F ZKB쬕-mBkQQQ øH$L0Jz9s'  P(,#Bьވ!yF-ݺ#}lf{1Nm>\<k0Qn: eYYeE)I[وT-22ʊiW322>`޽ d2\YT^\f߻&jr!0kZNN~FOkhO(y ~﷧jYVM ʂťD *ȸqEbs⢣u:ʊyhFq\һ3Ƙ?gfS[v؀ϸoiӦI$GGG5X,=ztϞ=-fE_day)5fBzjҤɕ+WԩSV>=~kwZ"_u϶P,=uTK PƔ\4 Ƹ4J`eL ud2EGG /@(cJ"L!V{Y[SU)qaDiٲMڐ(PfD׈A *2ן@ T55P F DBU$Zּ-P%J ὠ$||||+"0iյm!JիK$ZS%d^.PfZ1m~QsM&hP(iPtMV,1fV&rPQt-%%%33aZjYYY1 8.33z$ k *w\.R 666cVJMY -Id 16n6 'J0mڴݻdrʓ'O^veYKV4k&)55a5kd2@@QT!Ƙi??7oJ$s5ؤOTQ6NnV" 4YZ(e^-r#˻w޽{w\Y̘1cԨQΝ;wREPV CÆ ͢v=ɤFynݺ7juOs: KYpaBJQXl !q Q )JÔ@jc 2I)K#IaE\#Z l ,W 4^ I{7YvZJJJ|||LL˗/ 9q3G X;yx{pw[ xMJ\tʔ/FLq&cD"Cij,(t&D +gϾ|r),{ٳgFٔ& ͚E40BZ d1jHdvVr[J%p*8b!W.Nf-3!!4G{z\_?@;;*<+ʘ(I$yRon=u{.\>tS\AZڪcRdvzZBPK@9C5wM5k>H$4M'$Ļ}`GD='.Qב'=w'<݄*DQֿY _ kJY>w! 3 C;`0ԪUg˖4t S޿$k7}t>5<40!{pcKy<\0au2lu@N^̜4)#Sc;׮;`| [!yˁ?G[;cDߏtߟL $Vr]+Y c,{P,ߵnVVҧϞ'2-fϨoEf]-7J+//Yt(ՌX2S.,|;}r{VBbQ3SVpV|zkzc8|SNy#SǷcLoĹ?wQ WvpiώZijCY~*$jf5qkևS>kK}}ΊvӵT/\ 2uU@=  sդMTxS!`[mYb~uJ N-Zuo^m[ P()%qq+>|K.={toԨq1#+֞X?&EËuZOXӉєvbOsms)`Ug׏=뗽srw~s}[zߌz=F֋*bDw.l{8>Ե%&O)ij]kYKš,~`0))f3Bzu'o|}Q򶂐8h64Me\q VO/K?.]0jQŠO <,W,J%qrqwwaĎOh /@xM V&gps=)%G 4t5'jx`OL|;2jYG1/^<|Ƹχ72p&+}ʗ [hͺ{mfCoff5w[0?$3K_r~u*eD"ٽ{d2ٳG(X24DQBQ Pک5u,8 o{Mq'ؤ7^{n? פ3ܴ=|_@ͿL!%\jM˙}7S:{hos^g,1s| iK?yuަ ;v\nݻ rS-yAB|&13=CT-YiU@3Rx#56\c?mf{_d̉?޼3\(gW_;gMDINl`oe%[~d /oͪCK:E#>\rb ?LݰY%-nUk9M̸LAEÊϸcF^Vc6q%oT~R˽}}M虠cQgm41\ZNYj#5[\NH}|e'E1[mWV>hV|@%VR@K]HNykw+]|2pSǁ֕QN888߻w45rpple篙 ;\ӔT֞bvkԸu2#}6QTwv(**hUzڱ]鴀w䁪C[ZN@ 0&oˢKfX5rlŞ{s K|(e%k0^bJd(S8UG=Xej6Bcĺ)K8 =wòֶY6[jrI>.';OL˶Hk-Dž_b1ʫslN|[{*S2tF;ZYBN_/*M.meEA:L)75 i%Glz SkWxifⷖK]6;kPE_|34V(Eu?o߱c^?\Igm>|pjΌr^~=!@r&r@H\}O-1Ξǯ{y<*KA˼P'*1ʞC1(32z>w@`ÚCSsşr̫n_`QwMGwhXZ m|+tjBb:QgnV*әJr;<)MA'fOYǽ1.n*=`L>wE'擄'W ףJr$:H̹[}ډWxhtؑp֠D\8q↽}>fff޽{E,\{{yUwU)`"9ϡۊ(2#Y_FEs!㌒CBYy66x—?_ѕui%o1yd-Snj8c݃ꯒѯNc>Ŷ(}ozHl_8e|~'uMgazQ[9Wzu{2h7kٮM{Yun0{B~Һi=6wY}N'Gtg)ɰ5k{uN/vkզcYWL9yejѾ}GfЮV֯I0dȐpx"""&7F}_|a0bx͟ S(jz?vA(7gܚ͊K[Ƨ]bF9[涕1WL_yrK _DMZ=Phm=;cUŃkAn:&66~H).WP|/A~zu-Y7w}i-[k@TT={} JeHHR)Y^x瑘XM"""BCCh 5)6-c|~͢=mfmDPh4e˗5oּQ+Jn;߭O2kG>fUC,^?c_hŊ ;'ع6ňR\#:UGxw]WwRRRӧOߴq]|N՛4q5j|C*:J̙3_+Um*Vqs^>zFFjժ[RP *,|%'YEPP__ߵk7N:_fB6Dת*=_{K_kѢEK,˲,I4ywjch4PE(LhrAq @ЫWPu(0!Zٳg-nMUE$!V d29ތ`AJk ôl;3(PfD׈A *2ן@ T55P 5R,o@ rxW1*!!!mBh4z"R*8%5VKV-EIݩK.D ٪ለ"64 Ƙye,JAIt(UL i}||ېD"Jekbm!V)(a;e>}uTA8p}#fE+Au|JdiD%&aZ4cNg0]ߌ eS"0u c|ҥ:n/ ;Sd/)˺\=}܇888 T.7Z[[2!DZ.۷oR=_RS`T:4 :6PZZ [6XG_(̩f^#m.\_sfrew7ts)ϛ-`Gf}k-|~}$6_WRt:dM2Y­ۖ)KkG*e?sՆ ׯݬT[GO.x;YVb54.9U{ڃl:pxnwx3رc&d2;v7& ~{q01#fqcgOgZm]TGhF/\l?OѶ|H5_WJ?Ք»Ezնpzv,h(1!Ukv IDATV3om`8-y>B>%NoB!zsD>ydҤIP^=?ϏLs/ صwo g2=߷O%V( hRpIVy6fABu껛.iGmk$l=+b !ߌ3&m/:,^?SA3n-|Y}po1&a]ɸ~W MoVqo7sRC߼Joܾ K 5nby!nCaE .ʮ #X`-ټE*1"\>|RPTeZ ,pI3Vle:SyTʛLwlKyDvl>W?(mxHwO0Y&BrɖyS BL[4K1-=Vlt_1Dy?)I)Lб`9m;j1P6: ;u8n5oجm"aLCaEi>"(Q:k9eQFuvO|uھVdz{Fx1Ce| %#'"q)k7gG=ym6?Qms7Ioо=GTaUJ\k)> s7,km3w7:/U#MY+ S{ś?uރߗvY<ӝYm ,~E |.|ߔG>WBTB4v>9BӧdvreiqS#fi&OA.u1{;Öw̼,ɜ) ajqhulSGp@8_JݿcO,li7] mt_xE:|uZ&4(LV{>}8:fٟ|))f,T()<`DyXƼHfp^}"0/ȶsdRKee^nRny"aY-[Xq/r3ӶQset?vK42orlPl -@{1ʌL^wbcuMkSzt]tE3\us%(8Mԓ'ӌ>>,4qXS̡CImxT *V}|-)p` D>4}X-1X~CN50.5PM#2u+}7=`5Gc28.K :`RO\73R]uTE#qaETŒw=5{s?v36쳑vxnώ\Kf_<|VVkUQ%DVdBv}$l{ιgiH߾}a ]Pn4b1)1}eAR@=4(P)@r@"kwQPeo;-ycDO{5G5>!8 G ⽁稱ٵxeuZ"Ӓ%bkzħNz NQ_cnn[9!f":N3*Z}}=8ո:V/((p `iR)r[B=* 9Ƅ B Fsb V_#ɱv\%Qnk@@\ kՀ@\ 8Px$%@́BX,Ghk ++ m~9@Y6lP(+pɤp0L9skg`0LkN8}a,5uGRŋCCC##@PL5E|b85@i3d2}udf݈S.<߷\zA3gΘjߖ֖oVM< bw9\~w &L0a7&|ZUQ/$yQ e]9/mc_}3pɽ@oKu(#1û11A#sr`;QKֽL'wN=@tjܹ5kN:etvE龾$v qxP_@@@@Sc٪B9QcVe|aJRB+?i+~ٳngj%*EKRǩ&LH)[jx](rųߚ6}Dg޸)]uk͚CPbׯ͚8e͚5gϞ=O#G4IA^lkoy_=_.ظkKF4yZ gUVuҥ[܇-dGhoaj?.M@_sp(χ V0x}֡uᶽ3@ :x[꾯W'B`XuNWNȜϜ9}`^ Lnm{{`]0IM}߸ǻ]6-yrXq̵[6-@]^ta񴔭JD޹sKJJ̿^뢹ʆnCoi,ls_%ά]g z"?QPTTp˞O Ã`9rɡj=JR=<<-T9Lvk[3B`{&^0}H?;=kq@4fl|T/?H흿44T#{xORqFZ/s&ڼ)&%ڜ ax/eDTPތD3 NpNt~_xqZZ_)Fφb+7.xG'>\ŽYjZ\xH *lђM<_RRrBqѢxGjᠬ^]n0 `+G۴;`A ɿUcs=?X*cZ=F? {ӡ(C?b){LJ~)$ySuO('v:+Fd2S111?__C(`7=ӈ3EP?ߙ 7dNt]E7vNjwޖ-[4Mtt4s6}kL@@=ya+v}9ήQ6~Avܼ BJxatR *`JQ7 !xx0G||5 `;Z+/5)%:iV?aDo* ’#,P};o ݮV5w+UZFcI=.?}0ʯ2!#׻sWe @_s0eUP(>~ױ((ߌ/=wķ*$V+\SBJdurUs+6P\I $qS^}fH)6J;}V@#oeq Uޟj˾Hpdz\+-|QY`555iiin 4i@$ 84cɤQ ɝ#)pG$OHٽײ-X?aD3̯s17uvWY L8^up^pJ$)S0LCދRRRp0+N)ӓ;>//yTVV|g[M dggw (tK3\gZ%@_8 }-99999S&.пfkI} ,t:N * S___PPhP(ѣG;Zuq<,نAA5pq5A Wq5A Wq5P"H-b> &ƀqe-bG6{53l0APZ\ bd/8c-a0L&m]b -  t_ku1Spn_U]q6e KݸuV4Z:(d2t_C5]5C/m=݆ ($$-j&G3R6f-щ3Ol^Ą3f/\dz%ɋ/3uEߟTEqﮜ6a„ &NLkDԫ>CWqz\oKuM7k$vD{}) a4͒z"C+˯U +fON(|ۿ޼v>Z qűe6*%CZ@ݣlݵs5bWmy7穽CЪ;ACʥc|؈6_Mđ?U`MB!,D[qKKgȀqfsC{/~D%7kX ź(&x|k){YDnJWP|$U Sg'&=\S3e3 uνxr'h _O}tRv%>yI /2<;}wh݇&;U;t>>=ɀmENcPߚukYezn`%˯ 38e1 Csfң׸'GPh9E,&S|WFV)ϊ[hKc'+zw0#Ɏ=<%kǏ[wO n5@]uާ%_G2=(!"M`0wP 'zei`_?,~ڻ;U5pë {3W$]~SWr$Z5>ʓ({>H0_JH&AB(>1#HUjΙ{SC7G"M6$qg]>%).q |jJ+eK?.VД=^wtɫ7~:&*Es 勇qi҆SiʲY_f 7R﬽Ί8r1C=zJzxxX1+ޑ̓re{^T&c[zMv]DU%+967󫨁J`:mH8@qJ=ڲ>ZoٱVI뗧de?tځ5g.Nٰ6!3T)Ÿ $nGeJ,@vxZuDiHQ~?V LJ~qW.Y9r_óhpw]ЃLɜRH4>!(OC4 h$He={G3q27bԼ{ɳHbҢ[EUttmʗyd+5һv0N/kEJʉラٟw6[5#^9pÂtҟ]򆮞C_ۓAuheBnZoNtt(S{2ߙkT~>CE#Gt4Eɞ11lz}$cxQQQ۲eFx ªݙN/腗T> /˽ySIr{MtҬRˆT%χ]n,~6j1(nNn~@a7˟6ܜzz Ts0m MJS8P|]1A CG(l*Pj`JX_0"2||tvFEa/3tڵk׈>}f=8{qsr/  A)M@0S+FAQ4>>s^}_\<[B<țPNwm?_^-*{|҉o/TjIR}-W쯣'Ҝwֺy=sR#38`H=uN^PXsCh@&He %:znJ~EU;(>$NaKO,UszKzit+{ =@75tgZjהgpJؖC)҆[FkIl?a;yƹ=:gj4SM+].ZT_)m /Xvf-3" //D e|q.IDATgh^2ĭKȮ@n>[9|Sb55jH"E=K~}"^?&9OT_ƇLdP ~2.ٓ^VhИ|Gxי÷^L5lW^ ez~ ֹux 7nᲊSհ^M|{T4$nq-y_ k̘?r{dz~pbLC[iL嶚 aϾ 4㧵\HK~bюO5i'.>?^#f^hӫy=̏;p_n=8E)ۻuεq%RE 9h5s{[>\}cWy o Pѡ1ϼs>=яpJLo֣ӖoX`q_q{"//yT፿i^YYXH dggC_.-ih.Rs_Z5[-;损SΧ';kcךc-_ `mԥ?Rp轡\\{wQTl7R~Q!ްL9aߓh;+ZqUDMx&3`ݢWIpV84!B_865)zTk_0DkGt:˗* 5Ě8Z@_, eюVq . 2{JHƮsp䉑BB,.E'e!R^^xƨꪪ*g߅:K{ q콦@``'3-,N^tB\rZ]PPT*5^0[F1LwwwB`0:;N`}_S՝:ujFPSԀp6N&QjN&⼼<ǽ|>| PM]:![BD!X1aooo1 #dDѼp)))y!g0RT,CPH$+@a2pm&T*h4u:RTTZVmF߫’___oooV`XyWeӵuJ$???F}TL})6\M.߹s5fc&e2R|&=)?H$"8P(rrrT*UHHnlwalkf 1;lH${!C x]]H$" lHFa~2 t:w%%%yyy!!!J@S'#`e_+++)Swg2E3:sL&3///((fAgs1P:˟ryuu5b F†Jq\8NSYԷNH k5 2#%ooob @ѐH& c/P(b:X,&)iDLJGNӔCvc(mߟff0F&UWW7nMR>AT*b4"5thƣGPZ'b8B!qDfnb{T Lo~69D4 x&lNC||| ECL&7u<:3>d2 8N'-----n%%%%%%9˱VVVA4C$8fRu2L6MT:rX,6TpNN'_شx7B,H ÚIJQ& fl'6[Q'B8yt~ȅu:փcmDFAXkrBx{{iPT0Z uBN;[[Vbk|GI"tq{fn#LqduvLCzlgmmZ}L k 33S*d2__/쓹`0Lt*膷a%660BCC{bJ%qy9eTJbP'H$ EVcGNIp%iiiIIIgΜq3轁^'M&!:sU PBaFF͛7ANȡ6t,ƱP"_0 Ab/퐹0 #:M9$ &Ioo>>P' 4R_h\.xt:s#RQQxee%k uB V_RRP(i-JjX, :N9V5뛓aхḽhB!㥥mD:!LFST%%%ܽƇzǏz}EE ]t:NEkJ0$$0ڊ[ (JT*/B uBHa999t:=$$$//6CrP(f2nnnyyyM:NX/2ĸswwP6MLN&Vi|I[;B^dB0**CL:N VXIg6,|}}U*DhMfY7GFSQQQWWxUUX,ׯ  uBHcB< -.. RL&h4*pM$6=q\є"K/YE1uB:6JvM$=zx<""B&d2B!H] ZV(Jb ~R,vBS'Վ>hXfl6 nDnQPHR7`Vk uvLVVWWhGtcd2 J%;EQ0NRj\.CQ'44NcuB)״ZmPP{BRjL&S(DVz♌(Ba0!!!t:EѠ Fc uvLVV4V^^^P2Pui/:! 쿀@ 5j@_@͛ B&۪Jd!C6op%@\ŋ\p…  u:ݍ7Ν;o-%cǎ9sKLTrG1b.k J̋.4i$ª,HlQmFX͛(!L0..v6ʼn% @&. !H$b8G 1F~~snܸlL;vlhhM f@ Άk#0L7Y] @_@lNze pݻw7F3Lq۷lٲ0C-[ի6r`bL2ke˖sΉD"hcǎ6l)I(olހF݈q_SpnKݸu\ m4U֯IfFD"IKK;uT\\ҥKϞ=gq 8k4Vb8u#kMh-?a-\`k0IwWic6i~10^tqy~.ib$>Sۚ^4./-,v3g 4ȺVbڴs|m_0/U[BR-$tkyo,"V=9NgNdYK|;?7 s|/(J"ށ](ڪ_tTz 7k07TWyv+ ;ewLyЫY5nɑ,*.Y~i䨜 JjU.o.9Ћ x|js3ޟD&1wd &]%/'>:w)BA$eW3{Rd>Ѳ^<v.<`m=#6U_ !Ur`ۏH4~f #OcJ8NH$;煐2Nl1~]UNܰ}੿r+'aލ# hM-ȍnzҘˡ/IV#@E~-Vw@,Jkx}֡u|܃-讍_yn]9yrDy;O gH3}s/')nHiw̏yhț6Nh\qjn-7u,]w9S{ѨNIot_ E ~M=U 4S1=9~1_嗖|r[f&^PQte~\#EvZ<{)ƶWi}C5wQ$.cUgZjהgpJ+T_˕) He %: ?eEIeAr{W*#a7qՆHUe7%^}ZO@ڌ9볥'=%V~]$2dyX毞yunG,^F@ArG`7E>]:419Rt=dS?#;fJ(w/x{+)hq4̉[/{[y|ت ) C瘝vD$f*DM@_3EBa]]ٗC_@5Sqr :Lo߾0G @ } PT^h 8q~?~M 6!x KMetronome"> ]> The &kmetronome; Handbook Pedro Lopez-Cabanillas

plcl@users.sourceforge.net
2005-2012 Pedro Lopez-Cabanillas &FDLNotice; 2012-05-28 0.10.1 &kmetronome; is a MIDI based metronome using the ALSA sequencer. KDE KMetronome Metronome ALSA MIDI Introduction &kmetronome; is a MIDI based metronome using the ALSA sequencer. The intended audience are musicians and music students. Like the solid, real metronomes it is a tool to keep the rhythm while playing musical instruments. It uses MIDI for sound generation instead of digital audio, allowing low CPU usage and very accurate timing thanks to the ALSA sequencer. Report problems, bugs and feature requests to the mailing lists or the tracking system at SourceForge project site Using &kmetronome; Here's a screenshot of &kmetronome; Screenshot Features You only need to adjust some controls, like the tempo slider, the beats/bar spin box and the beat length selector. Press the play button to start. Use the stop button at your convenience. Tempo can be set from 25 to 250 QPM using the slider. The units are quarters per minute (Mälzel Metronome units). You can also double click over the main window to open a dialog box where you can enter a new tempo directly with the keyboard. There is also a combo box to choose and display the tempo using Italian musical names. Beats/Bar can be set from 1 to 32 beats. These are the number of beats on each measure or bar, and it is the numerator on the time signature as it would be notated. The beat length is the denominator on the time signature specification, and represents the duration of each beat. Changing this value doesn't change the meaning of the tempo units. Pattern is a drop-down list to choose a pattern definition. The default "Automatic" value means that the program generates patterns using the notes set in the configuration dialog (Strong/Weak) and the rhythm definition provided by "Beats/Bar" and "Beat length". It also contains the names of user-defined patterns. Getting Started This program uses the MIDI protocol, so it is a good idea to to have some basic notions about MIDI in order to fully understand the concepts behind it. You can find here a good introduction: What is MIDI. &kmetronome; produces MIDI events. If you want to hear the events translated into sounds you need to connect the MIDI OUT port from this program to the MIDI IN port of a MIDI synthesizer. It can be either a hardware MIDI synthesizer or a software one. If it is an external hardware synthesizer, you also need an ALSA supported MIDI interface installed in your computer, and a MIDI cable attached to both the computer's MIDI interface, and the synthesizer MIDI IN socket. If you don't have an external MIDI synthesizer, you can still use the program with a MIDI software synthesizer supporting ALSA sequencer connections, like QSynth. Start your software synthesizer before &kmetronome;, and then make the connection between the two programs, either on &kmetronome;'s configuration dialog or using an external connection manager like QJackCtl. Don't forget to install a good Sound Font into QSynth's "Setup..." dialog. Configuration Here's a screenshot of &kmetronome; configuration dialog Screenshot &kmetronome; has limited session management capabilities. It can remember one connection for the ALSA output port, and one connection for its input port. Connections are stored when the program exits and remembered at startup. You don't need this feature if you prefer to make such connections by hand, using aconnect or any other equivalent utility, or if you use an external session manager like the patchbay included in the program QJackCtl. &kmetronome; uses an instrument definition file in .INS format, the same format as Qtractor, TSE3, Cakewalk and Sonar. The Output instrument drop-down list allows to choose one among the standard General MIDI, Roland GS and Yamaha XG drum maps. You can add more definitions creating a file named drums.ins at $HOME/.kde4/share/apps/kmetronome. The contents of Bank, Program, Weak and Strong note drop-down lists also depend on this definition. Channel is usually 10, meaning the percussion channel of a MIDI synthesizer. It must be a number beween 1 and 16. Resolution is the number of ticks (time units) for each quarter note. Value range from 48 to 960. Note duration is the length (in number of ticks) of the time span between a NOTE ON and its corresponding NOTE OFF event. This control is enabled only when Send NOTE OFF events is also enabled. Very low values can cause muted clicks on some synthesizers. Percussion sounds usually don't need NOTE OFF events to be sent after every NOTE ON. Select the Send NOTE OFF events checkbox only if your synthesizer or instrument supports or requires this setting. Bank and Program is used to change the drum set for instruments supporting several settings. Many synthesizers don't understand program changes for the percussion channel. In Automatic pattern mode, Strong note is played as the first beat in every measure, while any other beat in the same measure is played using the Weak note. The numeric values 33 and 34 are the GM2 and XG sounds for metronome click and metronome bell. Pattern Editor Pattern Editor Screenshot Using this dialog box you may edit, test and select patterns. To create new patterns, you simply save the current definition under a new name. Patterns are represented by a table. The rows in the table correspond to the percussion sounds. You can remove and add rows from a list of sounds defined by the instrument settings in the configuration dialog. The number of columns in the table determine the length of the pattern, between 1 and 99 elements of any beat length. Each table cell accepts values between N=1 and 9, corresponding to the MIDI velocity (N*127/9) of the notes, or 0 to cancel the sound. Valid values are also f (=forte) and p (=piano) corresponding to variable velocities defined by the rotary knobs (Strong/Weak) in the main window. The cell values can be selected and modified using either the keyboard or the mouse. There is no need to stop the playback before modifying the cells. Command Reference The main &kmetronome; window The <guimenu>File</guimenu> Menu File Import Patterns Imports pattern definitions into &kmetronome; File Export Patterns Exports pattern definitions from &kmetronome; File Play/Stop Controls pattern playback &Ctrl;Q File Quit Quits &kmetronome; The <guimenu>Edit</guimenu> Menu Edit Patterns Opens the pattern editor The <guimenu>Settings</guimenu> Menu Settings Configure &kmetronome;... Configures &kmetronome; The <guimenu>Help</guimenu> Menu &help.menu.documentation; External Control &kmetronome; can be controlled using its D-Bus interface, System Realtime and System Exclusive MIDI messages. D-Bus Interface &kmetronome; provides some functions through its D-Bus interface. You can use a D-Bus enabled program to control &kmetronome; like kdbus or the commandline utility qdbus. For instance, these commands can be used from a shell prompt: $ qdbus net.sourceforge.kmetronome-23324 / net.sourceforge.kmetronome.play $ qdbus net.sourceforge.kmetronome-23324 / net.sourceforge.kmetronome.stop $ qdbus net.sourceforge.kmetronome-23324 / net.sourceforge.kmetronome.cont $ qdbus net.sourceforge.kmetronome-23324 / net.sourceforge.kmetronome.setTempo 150 $ qdbus net.sourceforge.kmetronome-23324 / net.sourceforge.kmetronome.setTimeSignature 3 8 Universal System Exclusive messages &kmetronome; understands some Universal System Exclusive messages. Because the device ID is not yet implemented, all the recogniced messages must be marked as broadcast (0x7F). MTC Message: Time Signature Change Message Format: 0xF0 0x7F 0x7F 0x03 Command Length Numerator Denominator ... 0xF7 0x02: TS change 0x42: TS change Notes: both commands affect only the next scheduled patterns after receiving the command. Length is at least 2. Extra bytes following Numerator and Denominator are ignored. MMC Messages Format: 0xF0 0x7F 0x7F 0x06 Command 0xF7 0x01: Stop 0x02: Play 0x03: Deferred Play MIDI System Realtime Interface You can use a MIDI device generating MIDI System Realtime messages to control &kmetronome;. System Realtime messages accepted are: Start (0xFA), Stop (0xFC) and Continue (0xFB). Many master MIDI keyboards and MIDI buttons devices provide those three MIDI transport controls. You need to connect your external MIDI devices to the computer using MIDI (or USB) cables, and connect the corresponding ALSA port to the input port of &kmetronome;. This connection must be done by hand, or using a session management software like QJackCtl. Credits and License &kmetronome; Program copyright 2005-2012 Pedro Lopez-Cabanillas plcl@users.sourceforge.net Documentation copyright 2005-2012 Pedro Lopez-Cabanillas plcl@users.sourceforge.net &underFDL; &underGPL; Installation How to obtain &kmetronome; Here you can find the last version: Project home page Requirements In order to successfully compile and use &kmetronome;, you need &kde; 4.2 or later, Drumstick, ALSA drivers and ALSA library. You also need a MIDI synthesizer to produce sound. The build system requires CMake 2.6 or newer. ALSA library, drivers and utilities can be found at ALSA home page. Drumstick is a C++ wrapper around the ALSA sequencer interface using Qt4 objects, idioms and style. You can find it at the Drumstick home page. You can find a list of changes at http://kmetronome.sourceforge.net Compilation and Installation In order to compile and install &kmetronome; on your system, type the following in the base directory of the &kmetronome; distribution: % cmake . % make % sudo make install Since &kmetronome; uses cmake and make you should have no trouble compiling it. Should you run into problems please report them to the author or the project's bug tracking system. &documentation.index; kmetronome-0.10.1/COPYING0000644000175000001440000004310311760763113014042 0ustar pedrousers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. kmetronome-0.10.1/TODO0000644000175000001440000000014111760763113013472 0ustar pedrousers* send MIDI Clock, and/or MTC events. * send MMC events. * share MIDI queue, use a shared queue kmetronome-0.10.1/CMakeLists.txt0000644000175000001440000001314611760763113015553 0ustar pedrousers# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2012 Pedro Lopez-Cabanillas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA PROJECT(KMETRONOME) CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(CMAKE_USE_RELATIVE_PATHS OFF) SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_admin") SET (VERSION_MAJOR "0") SET (VERSION_MINOR "10") SET (VERSION_PATCH "1") SET (VERSION_SUFFIX "") SET (VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_SUFFIX}) ADD_DEFINITIONS(-D'VERSION="${VERSION}"') OPTION(ENABLE_PCH "Enable precompiled headers" OFF) OPTION(STATIC_DRUMSTICK "Build drumstick static library" OFF) FIND_PACKAGE(KDE4 REQUIRED) INCLUDE(KDE4Defaults) INCLUDE_DIRECTORIES(${QT_INCLUDES} ${KDE4_INCLUDES}) STRING(REPLACE "-fno-exceptions" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDE4_ENABLE_EXCEPTIONS}") SET(LIB "lib${LIB_SUFFIX}") SEPARATE_ARGUMENTS(KDE4_DEFINITIONS) SEPARATE_ARGUMENTS(QT_DEFINITIONS) ADD_DEFINITIONS(${KDE4_DEFINITIONS}) ADD_DEFINITIONS(${QT_DEFINITIONS}) ADD_DEFINITIONS(-DQT_STRICT_ITERATORS) MESSAGE(STATUS "Build configuration: ${CMAKE_BUILD_TYPE}") FIND_PACKAGE(MSGFMT REQUIRED) IF(MSGFMT_FOUND) MESSAGE(STATUS "Program msgfmt found (${MSGFMT_EXECUTABLE})") ELSE(MSGFMT_FOUND) MESSAGE(FATAL_ERROR "Please install the program msgfmt (gettext)") ENDIF(MSGFMT_FOUND) FIND_PACKAGE(PkgConfig REQUIRED) IF(PKG_CONFIG_FOUND) MESSAGE(STATUS "Program pkg-config found (${PKG_CONFIG_EXECUTABLE})") ELSE(PKG_CONFIG_FOUND) MESSAGE(FATAL_ERROR "Please install pkg-config") ENDIF(PKG_CONFIG_FOUND) SET(HAVE_ALSA FALSE) PKG_CHECK_MODULES(ALSA REQUIRED alsa>=1.0) IF(ALSA_FOUND) SET(HAVE_ALSA TRUE) ADD_DEFINITIONS(-DHAVE_ALSA) SET(ALSA_LIBS ${ALSA_LIBRARIES}) #MESSAGE("ALSA_LIBS: ${ALSA_LIBS}") LIST(APPEND ALSA_LIB_DIR ${ALSA_LIBRARY_DIRS} ${ALSA_LIBDIR} ) #MESSAGE("ALSA_LIB_DIR: ${ALSA_LIB_DIR}") LIST(APPEND ALSA_INC_DIR ${ALSA_INCLUDE_DIRS} ${ALSA_INCLUDEDIR}) #MESSAGE("ALSA_INC_DIR: ${ALSA_INC_DIR}") ELSE(ALSA_FOUND) MESSAGE(FATAL_ERROR "Please install ALSA library and headers (libasound2)") ENDIF(ALSA_FOUND) # DRUMSTICK LIBRARY BUILD TYPE IF(STATIC_DRUMSTICK) SET(BUILD_SHARED_LIBS OFF) SET(DRUMSTICK_LIBS drumstick-alsa) SET(DRUMSTICK_LIB_DIR ${KMETRONOME_BINARY_DIR}) SET(DRUMSTICK_INC_DIR ${KMETRONOME_SOURCE_DIR}/drumstick/include) ADD_SUBDIRECTORY(drumstick) ELSE(STATIC_DRUMSTICK) SET(BUILD_SHARED_LIBS ON) PKG_CHECK_MODULES(DRUMSTICK REQUIRED drumstick-alsa>=0.5) IF(DRUMSTICK_FOUND) SET(DRUMSTICK_LIBS ${DRUMSTICK_LIBRARIES}) #MESSAGE(STATUS "DRUMSTICK_LIBS: ${DRUMSTICK_LIBS}") LIST(APPEND DRUMSTICK_LIB_DIR ${DRUMSTICK_LIBRARY_DIRS} ${DRUMSTICK_LIBDIR} ) #MESSAGE(STATUS "DRUMSTICK_LIB_DIR: ${DRUMSTICK_LIB_DIR}") LIST(APPEND DRUMSTICK_INC_DIR ${DRUMSTICK_INCLUDE_DIRS} ${DRUMSTICK_INCLUDEDIR}) #MESSAGE(STATUS "DRUMSTICK_INC_DIR: ${DRUMSTICK_INC_DIR}") ELSE(DRUMSTICK_FOUND) MESSAGE(FATAL_ERROR "Please install drumstick libraries and headers (libdrumstick-alsa)") ENDIF(DRUMSTICK_FOUND) ENDIF(STATIC_DRUMSTICK) SET(USE_PCH FALSE) IF(ENABLE_PCH) FIND_PACKAGE(PCHSupport) IF(PCHSupport_FOUND) SET(USE_PCH TRUE) MESSAGE(STATUS "Enabling precompiled headers for GCC ${gcc_compiler_version}") ENDIF(PCHSupport_FOUND) ENDIF(ENABLE_PCH) MESSAGE(STATUS "kmetronome ${VERSION} install prefix: ${CMAKE_INSTALL_PREFIX}") ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(icons) ADD_SUBDIRECTORY(po) ADD_SUBDIRECTORY(doc) ADD_SUBDIRECTORY(data) INCLUDE(DBusMacros) dbus_add_activation_service(net.sourceforge.kmetronome.service.in) CONFIGURE_FILE( "${CMAKE_SOURCE_DIR}/kmetronome.spec.in" "${CMAKE_SOURCE_DIR}/kmetronome.spec" IMMEDIATE @ONLY) CONFIGURE_FILE( "${CMAKE_SOURCE_DIR}/cmake_admin/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") ADD_CUSTOM_TARGET ( tarball COMMAND mkdir -p kmetronome-${VERSION} COMMAND cp -r cmake_admin kmetronome-${VERSION} COMMAND cp -r data kmetronome-${VERSION} COMMAND cp -r doc kmetronome-${VERSION} COMMAND cp -r icons kmetronome-${VERSION} COMMAND cp -r po kmetronome-${VERSION} COMMAND cp -r src kmetronome-${VERSION} #COMMAND cp -rHL drumstick kmetronome-${VERSION} COMMAND cp AUTHORS ChangeLog CMakeLists.txt configure.* COPYING INSTALL kmetronome.* net.sourceforge.kmetronome.* NEWS README TODO kmetronome-${VERSION} COMMAND tar -cj --exclude .svn --exclude *.old --exclude *~ -f kmetronome-${VERSION}.tar.bz2 kmetronome-${VERSION} COMMAND tar -cz --exclude .svn --exclude *.old --exclude *~ -f kmetronome-${VERSION}.tar.gz kmetronome-${VERSION} COMMAND rm -rf kmetronome-${VERSION} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) INSTALL( FILES kmetronome.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) kmetronome-0.10.1/cmake_admin/0000755000175000001440000000000011760763113015236 5ustar pedrouserskmetronome-0.10.1/cmake_admin/FindMSGFMT.cmake0000644000175000001440000000412511760763113020040 0ustar pedrousers# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2012 Pedro Lopez-Cabanillas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA # # Find the msgfmt program # # Defined variables: # MSGFMT_FOUND # MSGFMT_EXECUTABLE # # Macro: # ADD_TRANSLATIONS # IF(MSGFMT_EXECUTABLE) SET(MSGFMT_FOUND TRUE) ELSE(MSGFMT_EXECUTABLE) FIND_PROGRAM(MSGFMT_EXECUTABLE NAMES msgfmt gmsgfmt PATHS /bin /usr/bin /usr/local/bin ) IF(MSGFMT_EXECUTABLE) SET(MSGFMT_FOUND TRUE) ELSE(MSGFMT_EXECUTABLE) IF(NOT MSGFMT_FIND_QUIETLY) IF(MSGFMT_FIND_REQUIRED) MESSAGE(FATAL_ERROR "msgfmt program couldn't be found") ENDIF(MSGFMT_FIND_REQUIRED) ENDIF(NOT MSGFMT_FIND_QUIETLY) ENDIF(MSGFMT_EXECUTABLE) MARK_AS_ADVANCED(MSGFMT_EXECUTABLE) ENDIF (MSGFMT_EXECUTABLE) MACRO(ADD_TRANSLATIONS _baseName) SET(_outputs) FOREACH(_file ${ARGN}) GET_FILENAME_COMPONENT(_file_we ${_file} NAME_WE) SET(_out "${CMAKE_CURRENT_BINARY_DIR}/${_file_we}.gmo") SET(_in "${CMAKE_CURRENT_SOURCE_DIR}/${_file_we}.po") ADD_CUSTOM_COMMAND( OUTPUT ${_out} COMMAND ${MSGFMT_EXECUTABLE} --statistics -o ${_out} ${_in} DEPENDS ${_in} ) INSTALL(FILES ${_out} DESTINATION ${LOCALE_INSTALL_DIR}/${_file_we}/LC_MESSAGES/ RENAME ${_baseName}.mo ) SET(_outputs ${_outputs} ${_out}) ENDFOREACH(_file) ADD_CUSTOM_TARGET(translations ALL DEPENDS ${_outputs}) ENDMACRO(ADD_TRANSLATIONS) kmetronome-0.10.1/cmake_admin/FindPCHSupport.cmake0000644000175000001440000001033011760763113021045 0ustar pedrousers# Copyright (C) 2005-2012 Pedro Lopez-Cabanillas # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # Try to find precompiled headers support for GCC 3.4 and 4.x # Once done this will define: # # Variable: # PCHSupport_FOUND # # Macro: # ADD_PRECOMPILED_HEADER cmake_policy(SET CMP0007 OLD) IF(CMAKE_COMPILER_IS_GNUCXX) EXEC_PROGRAM(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE gcc_compiler_version) IF(gcc_compiler_version MATCHES "4\\.[0-9].*") SET(PCHSupport_FOUND TRUE) ELSE(gcc_compiler_version MATCHES "4\\.[0-9].*") IF(gcc_compiler_version MATCHES "3\\.4.*") SET(PCHSupport_FOUND TRUE) ENDIF(gcc_compiler_version MATCHES "3\\.4.*") ENDIF(gcc_compiler_version MATCHES "4\\.[0-9].*") ENDIF(CMAKE_COMPILER_IS_GNUCXX) MACRO(ADD_PRECOMPILED_HEADER _targetName _input) GET_FILENAME_COMPONENT(_name ${_input} NAME) SET(_source "${CMAKE_CURRENT_SOURCE_DIR}/${_input}") SET(_outdir "${CMAKE_CURRENT_BINARY_DIR}/${_name}.gch") MAKE_DIRECTORY(${_outdir}) IF(NOT CMAKE_BUILD_TYPE) SET(_output "${_outdir}/Custom.c++") ELSE(NOT CMAKE_BUILD_TYPE) SET(_output "${_outdir}/${CMAKE_BUILD_TYPE}.c++") ENDIF(NOT CMAKE_BUILD_TYPE) STRING(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" _flags_var_name) SET(_compiler_FLAGS ${CMAKE_CXX_FLAGS} ${${_flags_var_name}}) SEPARATE_ARGUMENTS(_compiler_FLAGS) GET_DIRECTORY_PROPERTY(_flags COMPILE_FLAGS) SEPARATE_ARGUMENTS(_flags) LIST(APPEND _compiler_FLAGS ${_flags}) #MESSAGE("_compiler_FLAGS: ${_compiler_FLAGS}") GET_DIRECTORY_PROPERTY(_dir_FLAGS INCLUDE_DIRECTORIES) FOREACH(item ${_dir_FLAGS}) LIST(APPEND _include_FLAGS "-I${item}") ENDFOREACH(item) #MESSAGE("_include_FLAGS: ${_include_FLAGS}") GET_DIRECTORY_PROPERTY(_definitions24 DEFINITIONS) #MESSAGE("_definitions24: ${_definitions24}") GET_DIRECTORY_PROPERTY(_definitions26 COMPILE_DEFINITIONS) #MESSAGE("_definitions26: ${_definitions26}") SET(_definitions ${_definitions24}) SEPARATE_ARGUMENTS(_definitions) FOREACH(def ${_definitions26}) LIST(APPEND _definitions "-D${def}") ENDFOREACH(def) STRING(TOUPPER "COMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}" _defs_var_name) GET_DIRECTORY_PROPERTY(_definitions_buildtype ${_defs_var_name}) #MESSAGE("_definitions_buildtype: ${_definitions_buildtype}") FOREACH(def ${_definitions_buildtype}) LIST(APPEND _definitions "-D${def}") ENDFOREACH(def) LIST(REMOVE_DUPLICATES _definitions) #MESSAGE("_definitions: ${_definitions}") ADD_CUSTOM_COMMAND( OUTPUT ${_output} COMMAND ${CMAKE_CXX_COMPILER} ${_compiler_FLAGS} ${_include_FLAGS} ${_definitions} -x c++-header -o ${_output} ${_source} DEPENDS ${_source} ) ADD_CUSTOM_TARGET(${_targetName} DEPENDS ${_output}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${CMAKE_CURRENT_BINARY_DIR}/${_name} -Winvalid-pch") ENDMACRO(ADD_PRECOMPILED_HEADER) kmetronome-0.10.1/cmake_admin/cmake_uninstall.cmake.in0000644000175000001440000000155511760763113022024 0ustar pedrousersIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"${file}\"") IF(EXISTS "${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF("${rm_retval}" STREQUAL 0) ELSE("${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"") ENDIF("${rm_retval}" STREQUAL 0) ELSE(EXISTS "${file}") MESSAGE(STATUS "File \"${file}\" does not exist.") ENDIF(EXISTS "${file}") ENDFOREACH(file) kmetronome-0.10.1/cmake_admin/DBusMacros.cmake0000644000175000001440000000105411760763113020242 0ustar pedrousersmacro(dbus_add_activation_service _sources) #MESSAGE(STATUS "DBUS_SERVICES_INSTALL_DIR: ${DBUS_SERVICES_INSTALL_DIR}") foreach (_i ${_sources}) get_filename_component(_service_file ${_i} ABSOLUTE) string(REGEX REPLACE "\\.service.*$" ".service" _output_file ${_i}) set(_target ${CMAKE_CURRENT_BINARY_DIR}/${_output_file}) configure_file(${_service_file} ${_target}) install(FILES ${_target} DESTINATION ${DBUS_SERVICES_INSTALL_DIR}) endforeach (_i ${ARGN}) endmacro(dbus_add_activation_service _sources) kmetronome-0.10.1/configure.debug0000755000175000001440000000045611760763113016007 0ustar pedrousers#!/bin/bash # a typical configuration for development usage... mkdir -p build cd build cmake .. -DCMAKE_CXX_FLAGS="-W -Wall" \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX=/usr \ -DKDE4_ENABLE_FINAL=NO \ -DSTATIC_DRUMSTICK=NO \ -DENABLE_PCH=NO $* echo "You can run 'make' now" kmetronome-0.10.1/ChangeLog0000644000175000001440000000727111760763113014567 0ustar pedrousers2012-05-28 00:00 plcl * assigned shortcuts for keyboard media keys * Release 0.10.1 2011-02-05 00:00 plcl * Turkish translation added, by Server Acim 2010-09-16 00:00 plcl * docbook version update 2010-09-10 00:00 plcl * drumstick: sync release 0.5 * request realtime priority for the MIDI input thread 2010-06-06 00:00 plcl * Release 0.10.0 2010-06-05 00:00 plcl * German translation updated, by Rene Landert * Custom pattern samples * release candidate 2010-05-23 00:00 plcl * Enable the standard toolbar * Optionally hide the fake toolbar * Import/export patterns * Updated translation template 2010-05-20 00:00 plcl * Using an instrument definition file in .INS format * Custom patterns * Pattern editor (RFE #2517833) 2010-05-01 00:00 plcl * German translation, by Rene Landert 2010-04-19 00:00 plcl * Release 0.9.3 2010-02-20 00:00 plcl * aseqmm renamed to drumstick 2009-12-23 00:00 plcl * Release 0.9.2 * Fixed dynamic linking issues with aseqmm * assorted fixes 2009-12-21 00:00 plcl * Build system improvements * Updated Czech translation, by Pavel Fric 2009-12-14 00:00 julienrf * French translation, by Julien Richard-Foy * GUI improvements 2009-12-13 00:00 plcl * version string 0.9.2cvs * Czech translation. Thanks to Pavel Fric 2009-12-12 00:00 plcl * version 0.9.1 2009-08-11 17:30 plcl * synchronize with current aseqmm tree 2009-08-07 23:00 plcl * fix for bug #2795019 2009-05-18 12:00 plcl * feature Request #2792930 2009-02-08 23:00 plcl * Version string 0.9.1cvs * new configuration option: Styled Knobs 2008-12-29 00:00 plcl * Version 0.9.0 2008-11-23 00:00 plcl * Converted to KDE4/Qt4 2008-03-24 00:00 plcl * Fix the crash at startup when ALSA is not loaded * Documentation updates * Version 0.8.2 2008-03-21 00:00 plcl * Fix a compilation error using GCC 4. * Fix MIDI output for QSynth/Fluidsynth and other soft synths. It uses longer (configurable) durations, or even avoid using note off events entirely. * Schedule always one bar ahead of current time, to avoid the nasty little gaps between patterns. * Version 0.8.1 2005-06-20 21:17 plcl * Implemented double click event handler, changing tempo as suggested by Chris. 2005-06-12 23:51 plcl * Fix a typo. Thanks to Chris Cannam. 2005-04-25 23:41 plcl * updated version number 2005-04-25 23:32 plcl * removed some unneeded files 2005-04-25 23:25 plcl * minor changes 2005-04-25 23:11 plcl * more .cvsignore stuff 2005-04-25 23:10 plcl * .cvsignore files updated 2005-04-25 23:09 plcl * minor changes 2005-04-25 23:08 plcl * autosave settings (window size...) * apply tempo/resolution changes after config. dialog accept changes 2005-04-23 22:00 plcl * bug in sequencerthread: set_program event must be direct. 2005-04-19 22:53 plcl * build system update 2005-04-19 22:31 plcl * documentation update 2005-04-16 23:22 plcl * more files to ignore 2005-04-16 23:21 plcl * new DCOP interface commands: setTempo and setTimeSignature 2005-04-04 23:27 plcl * several unneeded files removed 2005-04-04 23:21 plcl * Documentation updated 2005-04-04 23:21 plcl * Spanish translation updated 2005-04-04 23:20 plcl * User interface updates * version number raised 2005-04-03 03:11 plcl * Configuration option to reconnect the input port 2005-04-03 03:09 plcl * Eclipse CDT project files 2005-03-30 00:06 plcl * Some systems need to include for pow(). 2005-03-29 22:51 plcl * Fist public release 2005-03-29 20:34 plcl * Initial import 2005-03-29 20:34 plcl * Initial revision kmetronome-0.10.1/AUTHORS0000644000175000001440000000151211760763113014055 0ustar pedrousersCopyright (C) 2005-2012 Pedro Lopez-Cabanillas Translations Czech: Pavel Fric file: po/cs.po German. Rene Landert file: po/de.po Spanish: Pedro López-Cabanillas file: po/es.po French: Julien Richard-Foy file: po/fr.po Turkish: Server Acim file: po/tr.po Instrument definitions (.INS files) support: Copyright (C) 2005-2012, rncbc aka Rui Nuno Capela Files: src/Instrument.h src/Instrument.cpp Knob widget: Rui Nuno Capela, Chris Cannam, Pedro Lopez-Cabanillas, Queen Mary University of London Files: src/knob.h src/knob.cpp src/classicstyle.h src/classicstyle.cpp kmetronome-0.10.1/NEWS0000644000175000001440000000025311760763113013505 0ustar pedrousersThere are news feeds available for the project at: http://sourceforge.net/export/rss2_keepsake.php?group_id=134956 http://freshmeat.net/projects/kmetronome/releases.atom kmetronome-0.10.1/README0000644000175000001440000000425511760763113013674 0ustar pedrousersFor brief building instructions, see INSTALL. Developers environment ====================== You need the following software: * CMake Debian: "cmake" http://packages.debian.org/sid/cmake * pkg-config Debian: "pkg-config" http://packages.debian.org/sid/pkg-config * msgfmt Debian: "gettext" http://packages.debian.org/sid/gettext * Qt4 libraries Debian: "libqt4-dev" http://packages.debian.org/sid/libqt4-dev * KDE4 SDK and libraries Debian: "kdesdk", "kdelibs5-dev" http://packages.debian.org/sid/kdesdk http://packages.debian.org/sid/kdelibs5-dev * ALSA library Debian package: "libasound2-dev" http://packages.debian.org/sid/libasound2-dev * Drumstick libraries http://drumstick.sourceforge.net Getting the development sources =============================== Compiling and hacking the SVN sources is a bit different compared to the distribution tarball. You can get the latest sources either using a sourceforge user account, or the anonymous user (with read only rights). The SVN client documentation for SourceForge users is available at http://sourceforge.net/apps/trac/sourceforge/wiki/Subversion#Access 1. Check out the module drumstick from the SVN repository.         Host: drumstick.svn.sourceforge.net         Path: /svnroot/drumstick/trunk         Module: drumstick example: $ svn co https://drumstick.svn.sourceforge.net/svnroot/drumstick/trunk drumstick 2. Check out the module kmetronome from the SVN repository.         Host: kmetronome.svn.sourceforge.net         Path: /svnroot/kmetronome/trunk         Module: kmetronome example: $ svn co https://kmetronome.svn.sourceforge.net/svnroot/kmetronome/trunk kmetronome 3. Create the links for 'drumstick' in the kmetronome directory. $ cd kmetronome $ ./link-drumstick The module 'drumstick' is also used by other projects in a similar way. It may also be used as an independent shared dynamic library. 4. Configure and compile $ mkdir build $ cd build $ cmake .. -DCMAKE_BUILD_TYPE=debug \ -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` \ -DSTATIC_DRUMSTICK=YES $ make VERBOSE=1 5. Hack and enjoy! kmetronome-0.10.1/kmetronome.lsm0000644000175000001440000000100311760763113015675 0ustar pedrousersBegin4 Title: KMetronome Version: 0.9.0 Entered-date: 2008-11-23 Description: KDE ALSA Sequencer based MIDI Metronome Keywords: KDE Qt ALSA MIDI Metronome Author: plcl@users.sourceforge.net (Pedro Lopez-Cabanillas) Maintained-by: plcl@users.sourceforge.net (Pedro Lopez-Cabanillas) Primary-site: http://sourceforge.net/projects/kmetronome Alternate-site: http://kmetronome.sourceforge.net/ Original-site: Platforms: Linux, requires KDE4 and ALSA Copying-policy: GPL End kmetronome-0.10.1/net.sourceforge.kmetronome.service.in0000644000175000001440000000013311760763113022261 0ustar pedrousers[D-BUS Service] Name=net.sourceforge.kmetronome Exec=@CMAKE_INSTALL_PREFIX@/bin/kmetronome kmetronome-0.10.1/kmetronome.spec0000644000175000001440000000452711760763113016052 0ustar pedrousers# # spec file for package kmetronome (Version 0.10.1) # # norootforbuild Name: kmetronome Version: 0.10.1 Release: 0 License: GPL v2 or later Summary: KDE MIDI Metronome using ALSA Sequencer Group: Productivity/Multimedia/Sound/Midi URL: http://kmetronome.sourceforge.net Source: %name-%version.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: cmake BuildRequires: alsa-devel BuildRequires: libkde4-devel BuildRequires: libdrumstick-devel %kde4_runtime_requires %description KMetronome is a MIDI metronome with KDE interface, based on the ALSA sequencer. The intended audience is musicians and music students. Like solid, real metronomes it is a tool to keep the rhythm while playing musical instruments. It uses MIDI for sound generation instead of digital audio, allowing low CPU usage, and very accurate timing thanks to the ALSA sequencer. Authors: -------- Pedro Lopez-Cabanillas %lang_package %debug_package %prep %setup -q %build %cmake_kde4 %make_jobs %install %makeinstall %suse_update_desktop_file -G "MIDI Metronome" %name AudioVideo Music %find_lang %name %kde_post_install %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc INSTALL README ChangeLog AUTHORS TODO %doc %{_mandir}/man1/* %dir %{_datadir}/kde4/apps/%name %dir %{_datadir}/icons/hicolor/24x24 %dir %{_datadir}/icons/hicolor/24x24/apps %{_bindir}/%name %{_datadir}/appl*/*/%name.desktop %{_datadir}/dbus-1/*/* %{_datadir}/icons/hicolor/*/*/* %{_datadir}/kde4/apps/*/* %files lang -f %{name}.lang %changelog * Sun Jun 6 2010 Pedro Lopez-Cabanillas 0.10.0 - New version * Sat Dec 12 2009 Pedro Lopez-Cabanillas 0.9.1 - New version * Sun Nov 23 2008 Pedro Lopez-Cabanillas 0.9.0 - New version * Sun Apr 27 2008 Pedro Lopez-Cabanillas 0.8.3svn-0 - New version * Sun Apr 6 2008 Pedro Lopez-Cabanillas 0.8.2-0 - openSuse build service * Mon Mar 24 2008 Pedro Lopez-Cabanillas 0.8.2 - Release 0.8.2 * Thu Dec 28 2006 Pedro Lopez-Cabanillas 0.8 - CMake build system * Fri Sep 23 2005 Pedro Lopez-Cabanillas 0.6 - first public release. kmetronome-0.10.1/kmetronome.spec.in0000644000175000001440000000453511760763113016456 0ustar pedrousers# # spec file for package kmetronome (Version @VERSION@) # # norootforbuild Name: kmetronome Version: @VERSION@ Release: 0 License: GPL v2 or later Summary: KDE MIDI Metronome using ALSA Sequencer Group: Productivity/Multimedia/Sound/Midi URL: http://kmetronome.sourceforge.net Source: %name-%version.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: cmake BuildRequires: alsa-devel BuildRequires: libkde4-devel BuildRequires: libdrumstick-devel %kde4_runtime_requires %description KMetronome is a MIDI metronome with KDE interface, based on the ALSA sequencer. The intended audience is musicians and music students. Like solid, real metronomes it is a tool to keep the rhythm while playing musical instruments. It uses MIDI for sound generation instead of digital audio, allowing low CPU usage, and very accurate timing thanks to the ALSA sequencer. Authors: -------- Pedro Lopez-Cabanillas %lang_package %debug_package %prep %setup -q %build %cmake_kde4 %make_jobs %install %makeinstall %suse_update_desktop_file -G "MIDI Metronome" %name AudioVideo Music %find_lang %name %kde_post_install %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc INSTALL README ChangeLog AUTHORS TODO %doc %{_mandir}/man1/* %dir %{_datadir}/kde4/apps/%name %dir %{_datadir}/icons/hicolor/24x24 %dir %{_datadir}/icons/hicolor/24x24/apps %{_bindir}/%name %{_datadir}/appl*/*/%name.desktop %{_datadir}/dbus-1/*/* %{_datadir}/icons/hicolor/*/*/* %{_datadir}/kde4/apps/*/* %files lang -f %{name}.lang %changelog * Sun Jun 6 2010 Pedro Lopez-Cabanillas 0.10.0 - New version * Sat Dec 12 2009 Pedro Lopez-Cabanillas 0.9.1 - New version * Sun Nov 23 2008 Pedro Lopez-Cabanillas 0.9.0 - New version * Sun Apr 27 2008 Pedro Lopez-Cabanillas 0.8.3svn-0 - New version * Sun Apr 6 2008 Pedro Lopez-Cabanillas 0.8.2-0 - openSuse build service * Mon Mar 24 2008 Pedro Lopez-Cabanillas 0.8.2 - Release 0.8.2 * Thu Dec 28 2006 Pedro Lopez-Cabanillas 0.8 - CMake build system * Fri Sep 23 2005 Pedro Lopez-Cabanillas 0.6 - first public release. kmetronome-0.10.1/icons/0000755000175000001440000000000011760763113014121 5ustar pedrouserskmetronome-0.10.1/icons/hi24-app-kmetronome.png0000644000175000001440000000126611760763113020336 0ustar pedrousersPNG  IHDRw=sBIT|d pHYs||tEXtSoftwarewww.inkscape.org<3IDATH͋Qc^JSlfB#3 eBPQdl'eaAxYXMoX(#y1&J)0˸ϝ~3c8u{s=sn1R[m1PvlNCLߡ<!tj4$vlIヲ@1ƒF\;)d{ ʀ? ֖%h-&1VSp"Fch !<]M.+.Ƹqloьc+]8} ZҾ%!JyCIo0H A/F) y.BoރY jc1>Kj,3,ZBAØ !'%aNǪAXhM9CْRܗ52 {ЭFЖ"A2|DjprIa9]$.K#ژ5;ݤ>l6T©&OKa?40 _V?b7ZnIENDB`kmetronome-0.10.1/icons/hi32-app-kmetronome.png0000644000175000001440000000165111760763113020333 0ustar pedrousersPNG  IHDR szzsBIT|d pHYs}8tEXtSoftwarewww.inkscape.org<&IDATXKhEIjm탺+IՅ-.QBRQi!WETĕō. Qt #A_ RC BjkXhIzIt`3g?13_RmA "b-nDOJ),ر1 zIybe{؉_1w0>t"1:;pE*˝&:+>mӒq?itnq7M9mXCf ^l׋Īpi&ڑIp\ՠ}lh|n̉}9ѸhWf@ Hro;YLm)ۜvmJ8^6tH穚IJf)m0 uXx=ݓ %/*aPA\XJcx%>(R=">RJU5ιa, ޏil OV$ؖsc)ۏ{ffoYեR'2Z Q\9 IENDB`kmetronome-0.10.1/icons/CMakeLists.txt0000644000175000001440000000005011760763113016654 0ustar pedrouserskde4_install_icons(${ICON_INSTALL_DIR}) kmetronome-0.10.1/icons/hi16-app-kmetronome.png0000644000175000001440000000073611760763113020340 0ustar pedrousersPNG  IHDRasBIT|d pHYsSSbjtEXtSoftwarewww.inkscape.org<[IDAT8ӿjTQl\żK,k!,XLekge} ډ`U@7v.u\7jasBIT|d pHYs6GtEXtSoftwarewww.inkscape.org<gIDATx{_Uu?AW0DB TR(FP("AS|chZZQd, "PfZ@lm"bI#B  ) B^7?5s99{}>ڢ]U@jQQQ_턈S] (&٥-C=cke`vS&"B-MiNU_+Gj}CKq`K+%W*"r4L UQ` p7LUP\L4znV&O9X5iN:Ui$# z1Jqz)e$-i/q0~prJAG axxNUrӏ`6088 #IV<R:"rpGË8h쓴XHV>`QtU|njdO.~A:`JW\y/EVokU]i |Y 9=GlJoOU8CDq)0'}㟌K:za1Mn>X7ᔲo.sox Vs۠+jl;}'PD=\7fLH)Eme*p˳% :)Y>YHk o4l|TGʮ&};Nwt9x:n&w%q u`R>Fmi{)*`àG 8ܤӃoa8Ʉu&VQ݀& 6ִ:~s% u u''~8EU|#0!Y⇪ގ9l E%,$= ηEF:"=^L˅WNP`VUwKR # aG8=} 8J;i.}OtBAfE([sE'U]M.aW/ߧN]`}ߛ@(`d0Z)8 AdIi\47MIyw>.|vQBkusLr_ \v`א% 2 U/|xk LDM+r'SFSOUH9_Jh#YqNC$wFdIV6Tݴg($:NO `)ҷ8pU,2Y+v"Jvk boHgV 3Ɍ̩wXy[I`Sv>5Fn);ߏ!5>2ʊ:/F6ڃ!U4g30(7N&+ceDmcaF+5&Xovw EBD o+br'c q[n){\H]iUzf}YRH "0[n ꫩ,Q\g9|JUSfŌf_=^Vzn]DNH{> \Nij5ڃ-Rg?n<2#[q_ltJ˭zHҳi-|;szm\!4ndACy;5E."2rU=*z5Jlry5LR 0ƇdZ"r@$5>ID6C$ кhuj!"P,N`ݬ-7сPo/IgB BDofQ#3bul=0V@Dn¶_9vC"9ZUkp# ET]w,# oׁ5טX~rډF궄U5ȮvEȹ1Pϡ>o3l"2. ޏ}$}yKG+DdZ6 `Xvx"27w=nt@?0w}6-'al a ĸrw˿!B'`sB`{ ߎY83<҇ !dLEd a7flu*mOC|Pl@QT!y[BHn#%^jl .]@%AXwY?qqa)B`ovىK> \ogC/ )|! #"@h(J6Uxp` 75!-G35m'mb0zKr {_̩~U*p3}-Mz@U| F.BUr&حc$Jmx~.eE1>pdJhOǼlݘ{ | Rv*2UUWh%g5*|B)<BRҪ+[ ;*Xw: ||.ob+r_/M60[p pp{nD)Kjj^g"o>P}ll} G%MM `}xW!@DWY\.a7;3;ogA+yUꉪ_r Pn*+"[DzU.:[v-_X|;/ Dh&nE Tu}I%{y@9*riƔT)>x/F k8/3 xie  *:xX_1P;Roh 8Snv!vsw p3P=&\ 3X l?c(  p@WEXmi|j99I04(*`ME|8hx=^R'#4_BzL) l(y^mxnf#.X4$vhGny ;(:LK`\D7-@`fդOzz`i+05C괼F1775d'|XQu7yƈ2Wzs-ꀣ"+"gcƠ})i f\쑍Y d[@SL5UnlCXb*ЎPmP޷un^ Q~ۼJc74$|x`T*q>YKJ uB 5蓵zrM8qG&=18~ŃUuh%L""Ô)VU[S4G] gҟ%(Wgӧ&=fԛ/duq6Y$"CDsr: FUo3DQD6EEE`N"rfi6_U Η5%\ \}r+}u@?&p5P <^tM!Sv{w)jDO|ܩPH:${X YJf:X\aj?if38[M;RLAЖoNtV0fEu[ {Z#DJB%v:85ӠA9v5RՃF*K&`IQ*Y&}G]imFո|p떝 'akq1;)ULH&ffEH-QT$%LX:bdYn }R K9\AI/'{S¨U.jLUWߞ%Τi#Q_QR9Oz8ܽZ@v-8rTU/݀&$"}qq U[$~ bKո@rɃiQ"/[ڀ?v8z 0ȷ W4.d!V' C?76)i]9S"@;&wZLz| ."XA\HM;+ ֧HMAna@;ZkK1 ySF= bލ(?aPMdށ Kƒ!aEF}q=<F\hM1Cv+YhaQ%&j*L|6$j}nI򹈜sI}J } yݢӔusP 3s Tbj¾E}7n*|GcccP1-Ƙ0G651ӹ X 3 5tzcIr$+$UJ`K}'C0jVi>;lkM71QAmLC@D0\ ,xʼnA9@`0n""49lC۪+igc2B%uuJzZzkG-Y8L;DWtnpuΉ]Ds b:?KtW; axjL{̀9DAL)`fI: c~9ё> nIt6o7?))r``0uOcѾ%]a$5ޭ9QbQM&U©dN`Xk״tS[s&AZ\HUZ,/&} j]]–L a.]X^CWgkoe&o;sZ2%^67>؃\ S:0/؅hVГU%=dz)fR.pWʺ=YFJNF` 2IENDB`kmetronome-0.10.1/icons/hisc-app-kmetronome.svgz0000644000175000001440000000121711760763113020717 0ustar pedrousersr0y U$3K"dљt<"#~`Lү#xܬl[c)J:O߿*֨?>,>bUT-7ҕūBK^|^z/w(`f^ `Ye`:C!dcרQ ^X-s(YzattHWtcz}/h')~i!g =vUܒPJ)dfK(,X(Sc1 ( ow"F͉`%`Jw>敊($&" X&1#@ނaQHWr }-J _Ϻi2[oLj]׾5*SʴUu9۾]u<7?6 6Jf7S ş6J;eji4<2zЪ[b6:HiBrTʾ& di >;wd>Ϥh3Xv*-u Be i4 ad Lx;`d~K2QWQF,@/k(#HhJdz OdFh45h@Id1PfqOf|t㜎A7g^D[>Ǜs}#\_s xkmetronome-0.10.1/INSTALL0000644000175000001440000000526111760763113014043 0ustar pedrousersYou will need CMake 2.6.0 or newer. If your Linux distribution doesn't provide CMake, or if it provides an older version, you can get it here: http://www.cmake.org/cmake/resources/software.html There are ready to use binary packages available for Linux from that page. If you must build it from source, please read the instructions supplied here: http://www.cmake.org/cmake/help/install.html This program needs the Drumstick libraries. You should install the development package before trying to compile KMetronome. You can alternatively build KMetronome statically linked to Drumstick, see the advanced build options. Drumstick is available here: http://drumstick.sourceforge.net Building with CMake ------------------- Unpack the tarball or check out CVS. Assuming that you have the source in ~/src/kmetronome, you need to change to that directory: $ cd ~/src/kmetronome Create a build directory, and change to it $ mkdir build $ cd build Now run CMake to generate the build files. $ cmake .. Finally, run make, and then (sudo) make install, and you're done. $ make $ sudo make install To uninstall, use: $ sudo make uninstall Advanced Build Options ---------------------- By default, make will output brief details of each build step. If you prefer to see full command lines, use: $ make VERBOSE=1 Another option, useful for packagers, is setting DESTDIR at install time. The DESTDIR directory will be prepended to the prefix when copying the files: $ make install DESTDIR=~/rpmroot Some variables you may want to set: * CMAKE_INSTALL_PREFIX: cmake .. -DCMAKE_INSTALL_PREFIX=/opt/kde4 is the equivalent to "configure --prefix=/opt/kde4" for programs using autotools * there are some extra options available: STATIC_DRUMSTICK Statically linked Drumstick (default OFF) ENABLE_PCH Use precompiled headers (default OFF) The above options can take any of the following values: 0, 1, OFF, ON, TRUE, FALSE, YES, NO (case insensitive). For example: $ cmake .. -DENABLE_PCH=YES -DCMAKE_INSTALL_PREFIX=/usr Look to the configure.release and configure.debug for more examples. If you prefer to avoid all this typing, you can use ccmake to view and change these options using a friendly curses-based interface: $ ccmake .. There is a GUI equivalent: $ cmake-gui .. Dealing with Configuration Problems ----------------------------------- First, look for an answer in CMake FAQ: http://www.cmake.org/Wiki/CMake_FAQ You may want to read the documentation at: http://www.cmake.org/cmake/help/cmake2.6docs.html If you can't solve your problem, open a request for support at the project site: http://sourceforge.net/projects/kmetronome/ kmetronome-0.10.1/kmetronome.desktop0000644000175000001440000000036611760763113016566 0ustar pedrousers[Desktop Entry] Name=KMetronome Exec=kmetronome Icon=kmetronome Type=Application Comment=KDE MIDI Metronome Using ALSA Sequencer Comment[es]=Metrónomo MIDI de KDE utilizando el secuenciador ALSA Categories=AudioVideo;Audio;Midi;Education;Music;