./PaxHeaders.3594/kmetronome-1.0.10000644000000000000000000000013213560310264013432 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/0000755000175000001440000000000013560310264014221 5ustar00pedrousers00000000000000kmetronome-1.0.1/PaxHeaders.3594/configure.release0000644000000000000000000000013213560310264016675 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/configure.release0000755000175000001440000000076413560310264017556 0ustar00pedrousers00000000000000#!/bin/bash # a typical configuration for production usage... QTDIR=$HOME/Qt/5.12.5/gcc_64 QTLIB=$QTDIR/lib QTINC=$QTDIR/include QT_PLUGIN_PATH=$QTDIR/plugins PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:$QTLIB/pkgconfig export QTDIR QTLIB QTINC QT_PLUGIN_PATH PKG_CONFIG_PATH mkdir -p build cd build cmake .. \ -DCMAKE_PREFIX_PATH=$QTDIR \ -DCMAKE_CXX_FLAGS="-W -Wall" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local echo "You can run 'make' now" kmetronome-1.0.1/PaxHeaders.3594/CMakeLists.txt0000644000000000000000000000013213560310264016112 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/CMakeLists.txt0000644000175000001440000000752413560310264016771 0ustar00pedrousers00000000000000# Drumstick Metronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2014 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 cmake_minimum_required(VERSION 3.1) project(kmetronome) set(CMAKE_USE_RELATIVE_PATHS OFF) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_admin") set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED Yes) set(VERSION_MAJOR "1") set(VERSION_MINOR "0") set(VERSION_PATCH "1") set(VERSION_SUFFIX "") set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_SUFFIX}) add_definitions(-DVERSION=${VERSION}) # User options message (STATUS "Build configuration: ${CMAKE_BUILD_TYPE}") # Check for Qt find_package(Qt5Widgets REQUIRED) find_package(Qt5DBus REQUIRED) find_package(Qt5Svg REQUIRED) find_package(Qt5LinguistTools REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") find_package(PkgConfig REQUIRED) if(PKG_CONFIG_FOUND) message(STATUS "Program pkg-config found (${PKG_CONFIG_EXECUTABLE})") else() message(FATAL_ERROR "Program pkg-config not found") endif() pkg_check_modules(DRUMSTICK REQUIRED drumstick-alsa>=1.0.0) if(DRUMSTICK_FOUND) link_directories(${DRUMSTICK_LIBDIR}) include_directories(${DRUMSTICK_INCLUDEDIR}) #link_libraries(${DRUMSTICK_LIBRARIES}) else() message(FATAL_ERROR "Please install drumstick libraries and headers (package drumstick-devel)") endif() pkg_check_modules(ALSA REQUIRED alsa>=1.0) if(ALSA_FOUND) link_directories(${ALSA_LIBDIR}) include_directories(${ALSA_INCLUDEDIR}) #link_libraries(${ALSA_LIBRARIES}) else() message(FATAL_ERROR "Please install ALSA library and headers (libasound2)") endif() message(STATUS "kmetronome ${VERSION} install prefix: ${CMAKE_INSTALL_PREFIX}") add_subdirectory(src) add_subdirectory(icons) add_subdirectory(translations) 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 translations kmetronome-${VERSION} COMMAND cp -r src kmetronome-${VERSION} COMMAND cp AUTHORS ChangeLog CMakeLists.txt configure.* COPYING INSTALL kmetronome.{desktop,lsm,pro,spec,spec.in} net.sourceforge.kmetronome.service.in NEWS README TODO kmetronome-${VERSION} COMMAND tar -cj -f kmetronome-${VERSION}.tar.bz2 kmetronome-${VERSION} COMMAND tar -cz -f kmetronome-${VERSION}.tar.gz kmetronome-${VERSION} COMMAND rm -rf kmetronome-${VERSION} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) install( FILES kmetronome.desktop DESTINATION share/applications ) kmetronome-1.0.1/PaxHeaders.3594/kmetronome.spec.in0000644000000000000000000000013213560310264017013 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/kmetronome.spec.in0000644000175000001440000000331013560310264017657 0ustar00pedrousers00000000000000# spec file for package kmetronome (Version @VERSION@) # # norootforbuild Name: kmetronome Version: @VERSION@ Release: 0 License: GPL v2 or later Summary: 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-lib-devel BuildRequires: qt5-qtbase-devel BuildRequires: qt5-qtsvg-devel BuildRequires: qt5-qttools-devel BuildRequires: libdrumstick-devel %description Drumstick Metronome is a MIDI metronome with Qt interface, based on the ALSA sequencer. Intended for musicians and music students, 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 %prep %setup -q %build %cmake make %{?jobs:-j %jobs} VERBOSE=1 %install make install DESTDIR=$RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc INSTALL README ChangeLog AUTHORS TODO %doc %{_mandir}/man1/* %dir %{_datadir}/%name %dir %{_datadir}/icons/hicolor/*/apps %dir %{_datadir}/dbus-1/services %dir %{_datadir}/dbus-1/interfaces %{_bindir}/%name %{_datadir}/applications/%name.desktop %{_datadir}/dbus-1/*/* %{_datadir}/icons/hicolor/*/*/* %{_datadir}/%name/* %changelog * Tue Nov 5 2019 Pedro Lopez-Cabanillas 1.0.1 - New release * Sun Oct 12 2014 Pedro Lopez-Cabanillas 1.0.0 - Initial version kmetronome-1.0.1/PaxHeaders.3594/src0000644000000000000000000000013213560310264014064 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/0000755000175000001440000000000013560310264015010 5ustar00pedrousers00000000000000kmetronome-1.0.1/src/PaxHeaders.3594/about.h0000644000000000000000000000013213560310264015424 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/about.h0000644000175000001440000000211413560310264016271 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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 ABOUT_H #define ABOUT_H #include "ui_about.h" #include class About : public QDialog { Q_OBJECT public: About(QWidget *parent = 0); void retranslateUi(); private: Ui::AboutClass ui; }; #endif // ABOUT_H kmetronome-1.0.1/src/PaxHeaders.3594/CMakeLists.txt0000644000000000000000000000013213560310264016701 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/CMakeLists.txt0000644000175000001440000000437213560310264017556 0ustar00pedrousers00000000000000# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2014 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_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) set(kmetronome_qtobject_SRCS about.h drumgrid.h drumgridmodel.h kmetronome.h kmetropreferences.h lcdnumberview.h sequenceradapter.h ) set(kmetronome_SRCS defs.h about.h about.cpp drumgrid.h drumgrid.cpp drumgridmodel.h drumgridmodel.cpp instrument.h instrument.cpp kmetronome.h kmetronome.cpp kmetropreferences.h kmetropreferences.cpp lcdnumberview.h lcdnumberview.cpp main.cpp sequenceradapter.h sequenceradapter.cpp ) set(kmetronome_UI about.ui drumgrid.ui kmetronome.ui kmetropreferencesbase.ui ) qt5_wrap_ui( kmetronome_SRCS ${kmetronome_UI} ) qt5_wrap_cpp( kmetronome_moc_SRCS ${kmetronome_qtobject_SRCS} ) qt5_add_resources( kmetronome_SRCS kmetronome.qrc lcdnumbers.qrc) qt5_add_dbus_adaptor( kmetronome_SRCS net.sourceforge.kmetronome.xml kmetronome.h KMetronome kmetronome_adaptor ) add_executable( kmetronome ${kmetronome_SRCS} ${kmetronome_moc_SRCS} ) target_link_libraries( kmetronome Qt5::Widgets Qt5::DBus Qt5::Svg ${DRUMSTICK_LIBRARIES} ${ALSA_LIBRARIES} ) # Install targets install( TARGETS kmetronome RUNTIME DESTINATION bin ) install( FILES net.sourceforge.kmetronome.xml DESTINATION share/dbus-1/interfaces ) kmetronome-1.0.1/src/PaxHeaders.3594/about.cpp0000644000000000000000000000013213560310264015757 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/about.cpp0000644000175000001440000000434613560310264016635 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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 "about.h" #define LITERAL(s) #s #define STRINGIFY(s) LITERAL(s) const QString PGM_VERSION(STRINGIFY(VERSION)); const QString BLD_DATE(__DATE__); const QString BLD_TIME(__TIME__); #if defined(Q_CC_GNU) || defined(Q_CC_GCCE) const QString CMP_VERSION(__VERSION__); #elif defined(Q_CC_MSVC) const QString CMP_VERSION(QString::number(_MSC_VER/100.0,'g',2)); #else const QString CMP_VERSION(QString()); #endif About::About(QWidget *parent) : QDialog(parent) { ui.setupUi(this); retranslateUi(); #if defined(SMALL_SCREEN) setWindowState(Qt::WindowActive | Qt::WindowMaximized); #else setMinimumSize(550,580); #endif } void About::retranslateUi() { ui.retranslateUi(this); ui.labelVersion->setText(tr("" "" "" "" "" "" "

" "Version: %1
" "Build date: %2
" "Build time: %3
" "Compiler: %4" "

" "" "").arg(PGM_VERSION, BLD_DATE, BLD_TIME, CMP_VERSION)); } kmetronome-1.0.1/src/PaxHeaders.3594/sequenceradapter.h0000644000000000000000000000013213560310264017645 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/sequenceradapter.h0000644000175000001440000001462413560310264020523 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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 retranslateUi(); 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-1.0.1/src/PaxHeaders.3594/drumgrid.cpp0000644000000000000000000000013213560310264016462 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/drumgrid.cpp0000644000175000001440000003403613560310264017337 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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 DrumGrid::DrumGrid(QWidget *parent) : QDialog(parent), m_ui(new Ui::DrumGrid), m_seq(NULL), m_model(NULL), m_figure(PATTERN_FIGURE), m_columns(PATTERN_COLUMNS) { m_ui->setupUi(this); setWindowTitle( tr("Pattern Editor") ); resize( 700, 400 ); m_ui->tableView->setSelectionMode(QTableView::ContiguousSelection); QHeaderView *vH = m_ui->tableView->verticalHeader(); vH->setSectionResizeMode(QHeaderView::ResizeToContents); QHeaderView *hH = m_ui->tableView->horizontalHeader(); hH->setSectionResizeMode(QHeaderView::ResizeToContents); m_ui->startButton->setIcon(QIcon::fromTheme("media-playback-start")); m_ui->startButton->setShortcut( Qt::Key_MediaPlay ); m_ui->stopButton->setIcon(QIcon::fromTheme("media-playback-stop")); m_ui->stopButton->setShortcut( Qt::Key_MediaStop ); m_ui->saveButton->setIcon(QIcon::fromTheme("document-save")); m_ui->deleteButton->setIcon(QIcon::fromTheme("edit-delete")); m_ui->addButton->setIcon(QIcon::fromTheme("list-add")); m_ui->removeButton->setIcon(QIcon::fromTheme("list-remove")); m_ui->tempoSlider->setMaximum(TEMPO_MAX); m_ui->tempoSlider->setMinimum(TEMPO_MIN); m_ui->beatNumber->setDigitCount(2); m_ui->beatNumber->setNumber("1"); m_popup = new QMenu(this); addEditAction(tr("Cut"), SLOT(slotCut()), QKeySequence::Cut); addEditAction(tr("Copy"), SLOT(slotCopy()), QKeySequence::Copy); addEditAction(tr("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() { QSettings settings; settings.beginGroup(QSTR_PATTERN+m_currentPattern); QStringList keys = settings.childKeys(); if (!keys.empty()) { setFigure(settings.value(QSTR_FIGURE, PATTERN_FIGURE).toInt()); int cols = settings.value(QSTR_BEATS, PATTERN_COLUMNS).toInt(); 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 = settings.value(key, QStringList()).toStringList(); m_model->addPatternData(k, row); } } m_model->endOfPattern(); } } void DrumGrid::readPattern(const QString& name) { m_currentPattern = name; readPattern(); } void DrumGrid::writePattern() { QSettings settings; settings.beginGroup(QSTR_PATTERN+m_currentPattern); settings.remove(""); settings.setValue(QSTR_FIGURE, m_figure); settings.setValue(QSTR_BEATS, m_columns); for(int r = 0; r < m_model->rowCount(); ++r) { settings.setValue( m_model->patternKey(r), m_model->patternData(r) ); } settings.endGroup(); settings.sync(); } void DrumGrid::writePattern(const QString& name) { m_currentPattern = name; writePattern(); } void DrumGrid::removePattern(const QString& name) { if( QMessageBox::question(this, tr("Remove Pattern"), tr("Do you want to remove the current pattern?")) == QMessageBox::Yes ) { QSettings settings; settings.remove(QSTR_PATTERN+name); settings.sync(); } } QStringList DrumGrid::patterns() { QStringList lst; int n = QSTR_PATTERN.size(); QSettings settings; foreach(const QString& name, settings.childGroups()) { 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->setCurrentText(newName); } 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->setCurrentIndex(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 = tr("Sample Pattern", "name of an automatically created pattern"); m_model->fillSampleData(); m_ui->patternCombo->setCurrentText(m_currentPattern); } else { m_currentPattern = m_ui->patternCombo->currentText(); readPattern(); } else m_ui->patternCombo->setCurrentText(m_currentPattern); updateView(); } void DrumGrid::done(int r) { stop(); m_seq->setPatternMode(false); if (r == QDialog::Accepted && !m_currentPattern.isEmpty()) writePattern(); QDialog::done(r); } void DrumGrid::updateDisplay(int /*bar*/, int beat) { if (m_ui->chkselbeat->isChecked()) m_ui->tableView->selectColumn(beat-1); m_ui->beatNumber->setNumber(QString("%1").arg(beat, 2, 10, QChar(' '))); } void DrumGrid::addRow() { QStringList keys = m_model->keyNames(); QString name = QInputDialog::getItem(this, tr("Insert Pattern Row"), tr("Drum Key:"), keys); 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) QMessageBox::warning(this, tr("Sorry"), tr("Please select one, and only one row")); else if ( QMessageBox::question (this, tr("Remove Row"), tr("Do you want to remove the selected pattern row?")) == QMessageBox::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(',')); } qApp->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(',')); } qApp->clipboard()->setText( list.join(QString('\n')) ) ; } void DrumGrid::slotPaste() { QString clbrdText = qApp->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-1.0.1/src/PaxHeaders.3594/drumgrid.ui0000644000000000000000000000013213560310264016315 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/drumgrid.ui0000644000175000001440000003416713560310264017177 0ustar00pedrousers00000000000000 Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2014 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 644 484 :/midi/icons/midi/icon16.png:/midi/icons/midi/icon16.png true true 120 16777215 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 0 0 Beats: Highligh the grid columns while playing Highlight Columns 16777215 100 This is the current beat number 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 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 Qt::CustomContextMenu This is the pattern table, beats as columns and sounds as rows 16 QDialogButtonBox::Cancel|QDialogButtonBox::Ok LCDNumberView QGraphicsView
lcdnumberview.h
patternCombo saveButton deleteButton tableView addButton removeButton chkselbeat gridColumns figureCombo startButton stopButton tempoSlider buttonBox accepted() DrumGrid accept() 560 407 566 481 buttonBox rejected() DrumGrid reject() 516 409 515 456
kmetronome-1.0.1/src/PaxHeaders.3594/kmetronome.qrc0000644000000000000000000000013213560310264017030 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/kmetronome.qrc0000644000175000001440000000100013560310264017666 0ustar00pedrousers00000000000000 icons/1.png icons/2.png icons/4.png icons/8.png icons/16.png icons/32.png icons/64.png icons/midi/icon16.png icons/midi/icon32.png icons/midi/icon64.png icons/midi/icon128.png kmetronome-1.0.1/src/PaxHeaders.3594/net.sourceforge.kmetronome.xml0000644000000000000000000000013213560310264022152 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/net.sourceforge.kmetronome.xml0000644000175000001440000000112313560310264023016 0ustar00pedrousers00000000000000 kmetronome-1.0.1/src/PaxHeaders.3594/about.ui0000644000000000000000000000013213560310264015612 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/about.ui0000644000175000001440000002536413560310264016473 0ustar00pedrousers00000000000000 Pedro Lopez-Cabanillas <plcl@users.sf.net> KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2014 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 AboutClass 0 0 506 548 About :/midi/icons/midi/icon16.png:/midi/icons/midi/icon16.png true true 0 QLayout::SetMinimumSize 3 3 3 3 0 QLayout::SetMinimumSize 0 0 160 160 160 160 :/midi/icons/midi/icon128.png false Qt::AlignCenter false 10 Qt::NoTextInteraction 0 0 280 170 Qt::RichText true 10 true 500 0 true 0 0 498 346 3 3 3 3 0 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Drumstick Metronome</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> true 0 0 0 277 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">This program is free software; you can redistribute 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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p></body></html> Qt::RichText true true QDialogButtonBox::Close buttonBox rejected() AboutClass close() 306 315 325 335 kmetronome-1.0.1/src/PaxHeaders.3594/instrument.cpp0000644000000000000000000000013213560310264017055 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/instrument.cpp0000644000175000001440000003545013560310264017733 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2014 Pedro Lopez-Cabanillas For this file, the following copyright notice is also applicable: Copyright (C) 2005-2014, 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-1.0.1/src/PaxHeaders.3594/kmetronome.ui0000644000000000000000000000013213560310264016660 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/kmetronome.ui0000644000175000001440000006326713560310264017545 0ustar00pedrousers00000000000000 KMetronomeWindow 0 0 396 422 Drumstick Metronome :/midi/icons/midi/icon16.png:/midi/icons/midi/icon16.png QLayout::SetNoConstraint QLayout::SetNoConstraint 0 200 0 0 0 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 60 QLayout::SetNoConstraint 0 0 Number of measures (bars) and beats played from beginning QLayout::SetNoConstraint QFormLayout::AllNonFixedFieldsGrow Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 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 Pattern: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter m_pattern 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 150 100 The current <i>tempo</i> value QLayout::SetNoConstraint 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 0 0 396 19 File Edit Help language Settings toolBar 32 32 TopToolBarArea false Import Patterns Export Patterns true Play/Stop Edit Patterns Configuration :/midi/icons/midi/icon16.png:/midi/icons/midi/icon16.png about Quit Ctrl+Q true true Show Action Buttons true true Show Toolbar about Qt Help Contents LCDNumberView QGraphicsView
lcdnumberview.h
actionShowToolbar toggled(bool) toolBar setVisible(bool) -1 -1 197 42 toolBar visibilityChanged(bool) actionShowToolbar setChecked(bool) 197 42 -1 -1
kmetronome-1.0.1/src/PaxHeaders.3594/lcdnumbers.svg0000644000000000000000000000013213560310264017020 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/lcdnumbers.svg0000644000175000001440000002766613560310264017710 0ustar00pedrousers00000000000000 kmetronome-1.0.1/src/PaxHeaders.3594/instrument.h0000644000000000000000000000013213560310264016522 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/instrument.h0000644000175000001440000002234513560310264017377 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2014 Pedro Lopez-Cabanillas For this file, the following copyright notice is also applicable: Copyright (C) 2005-2014, 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-1.0.1/src/PaxHeaders.3594/lcdnumberview.h0000644000000000000000000000013213560310264017160 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/lcdnumberview.h0000644000175000001440000000301613560310264020027 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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 LCDNUMBERVIEW_H #define LCDNUMBERVIEW_H #include #include #include #include class LCDNumberView : public QGraphicsView { Q_OBJECT public: explicit LCDNumberView(QWidget *parent = 0); QString number(); int digitCount(); void setDigitCount(const int count); protected: void loadRenderer(); void resizeEvent(QResizeEvent *event); void update(); void rescale(); public slots: void setNumber(const QString& number); private: QSvgRenderer m_renderer; QString m_number; qreal m_digitWidth; qreal m_digitHeight; int m_digitsCount; }; #endif // LCDNUMBERVIEW_H kmetronome-1.0.1/src/PaxHeaders.3594/kmetropreferences.cpp0000644000000000000000000000013213560310264020370 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/kmetropreferences.cpp0000644000175000001440000001256313560310264021246 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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) : QDialog(parent) { m_ui.setupUi(this); setWindowTitle(tr("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->setCurrentText(name); } void KMetroPreferences::setProgramName(QString name) { m_ui.m_program->setCurrentText(name); } void KMetroPreferences::setBankName(QString name) { m_ui.m_bank->setCurrentText(name); } kmetronome-1.0.1/src/PaxHeaders.3594/drumgrid.h0000644000000000000000000000013213560310264016127 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/drumgrid.h0000644000175000001440000000571113560310264017002 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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 #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 QDialog { 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-1.0.1/src/PaxHeaders.3594/drumgridmodel.cpp0000644000000000000000000000013213560310264017503 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/drumgridmodel.cpp0000644000175000001440000001464613560310264020365 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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() { beginResetModel(); m_modelData.clear(); m_keys.clear(); m_tempData.clear(); m_tempKeys.clear(); endResetModel(); } 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-1.0.1/src/PaxHeaders.3594/lcdnumberview.cpp0000644000000000000000000000013213560310264017513 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/lcdnumberview.cpp0000644000175000001440000001041113560310264020357 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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 #include #include #include "lcdnumberview.h" LCDNumberView::LCDNumberView(QWidget *parent) : QGraphicsView(parent), m_digitWidth(0), m_digitHeight(0), m_digitsCount(0) { setScene(new QGraphicsScene(this)); setTransformationAnchor(AnchorUnderMouse); setViewportUpdateMode(FullViewportUpdate); setBackgroundRole(QPalette::Background); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); loadRenderer(); } QString LCDNumberView::number() { return m_number; } void LCDNumberView::setNumber(const QString& number) { if (number != m_number) { m_number = number; if (m_number.length() > m_digitsCount) { setDigitCount(m_number.length()); } update(); } } int LCDNumberView::digitCount() { return m_digitsCount; } void LCDNumberView::setDigitCount(const int count) { if (count != m_digitsCount) { m_digitsCount = count; scene()->clear(); for ( int i = 0; i < count; ++i ) { QGraphicsSvgItem *itm = new QGraphicsSvgItem(); itm->setSharedRenderer(&m_renderer); itm->setPos(i * m_digitWidth, 0); scene()->addItem(itm); } QRectF rect(0, 0, m_digitsCount * m_digitWidth, m_digitHeight); scene()->setSceneRect(rect); } } void LCDNumberView::update() { int i; QList lst = scene()->items(Qt::AscendingOrder); for (i = 0; i < lst.length(); ++i) { lst.at(i)->setVisible(false); } i = m_digitsCount - m_number.length(); if (i >= lst.length()) return; foreach(const QChar& ch, m_number) { QGraphicsSvgItem *itm = dynamic_cast(lst.at(i)); if (itm != 0) { if(ch == ':') { itm->setElementId(QLatin1Literal("colon")); itm->setVisible(true); } else if (ch == '_') { itm->setElementId(QLatin1Literal("underscore")); itm->setVisible(true); } else { QString id = QString("d%0").arg(ch); if (m_renderer.elementExists(id)) { itm->setElementId(id); itm->setVisible(true); } } } i++; if (i > m_digitsCount) break; } rescale(); } void LCDNumberView::rescale() { fitInView(scene()->sceneRect(), Qt::KeepAspectRatio); } void LCDNumberView::resizeEvent(QResizeEvent *event) { QGraphicsView::resizeEvent(event); rescale(); } void LCDNumberView::loadRenderer() { QString foreColor = palette().color(QPalette::Active, QPalette::Foreground).name(QColor::HexRgb); QString backColor = palette().color(QPalette::Active, QPalette::Background).name(QColor::HexRgb); QFile resource(QLatin1Literal(":/lcdnumbers.svg")); if (resource.open(QIODevice::ReadOnly | QIODevice::Text)) { QString rescontents = QString::fromUtf8(resource.readAll()).arg(foreColor).arg(backColor); resource.close(); if(m_renderer.load(rescontents.toUtf8())) { m_digitWidth = m_renderer.boundsOnElement("d8").width(); m_digitHeight = m_renderer.boundsOnElement("d8").height(); } else qWarning() << "renderer failed to load the SVG resource"; } else qWarning() << "failed to open" << resource.fileName(); } kmetronome-1.0.1/src/PaxHeaders.3594/sequenceradapter.cpp0000644000000000000000000000013213560310264020200 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/sequenceradapter.cpp0000644000175000001440000002722113560310264021053 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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 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("") { retranslateUi(); m_Client = new MidiClient(this); m_Client->open(); m_Client->setClientName(QSTR_APPNAME); 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(QSTR_APPNAME); 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(QSTR_APPNAME); m_queueId = m_Queue->getId(); m_Client->setRealTimeInput(true); m_Client->startSequencerInput(); } SequencerAdapter::~SequencerAdapter() { m_Client->stopSequencerInput(); m_Port->detach(); m_Client->close(); } void SequencerAdapter::retranslateUi() { NO_CONNECTION = tr("No connection"); } 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-1.0.1/src/PaxHeaders.3594/kmetronome.cpp0000644000000000000000000000013213560310264017025 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/kmetronome.cpp0000644000175000001440000006167513560310264017713 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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 #include #include #include #include #include #include #include "kmetronome.h" #include "kmetropreferences.h" #include "sequenceradapter.h" #include "defs.h" #include "drumgrid.h" #include "drumgridmodel.h" #include "instrument.h" #include "about.h" #include "kmetronome_adaptor.h" static QDir dataDirectory() { QDir test(QApplication::applicationDirPath() + "/../share/kmetronome/"); if (test.exists()) return test; QStringList candidates = QStandardPaths::standardLocations(QStandardPaths::DataLocation); foreach(const QString& d, candidates) { test = QDir(d); if (test.exists()) return test; } return QDir(); } static QDir localeDirectory() { QDir data = dataDirectory(); data.cd("locale"); return data; } KMetronome::KMetronome(QWidget *parent) : QMainWindow(parent), m_patternMode(false), m_seq(0) { new KmetronomeAdaptor(this); QDBusConnection dbus = QDBusConnection::sessionBus(); dbus.registerObject("/", this); dbus.registerService("net.sourceforge.kmetronome"); m_trq = new QTranslator(this); m_trp = new QTranslator(this); m_trq->load( "qt_" + configuredLanguage(), QLibraryInfo::location(QLibraryInfo::TranslationsPath) ); m_trp->load( configuredLanguage(), localeDirectory().absolutePath() ); QApplication::installTranslator(m_trq); QApplication::installTranslator(m_trp); m_ui.setupUi(this); m_ui.m_exitbtn->setFocusPolicy(Qt::NoFocus); m_ui.m_playbtn->setShortcut(Qt::Key_MediaPlay); m_ui.m_stopbtn->setShortcut(Qt::Key_MediaStop); m_ui.m_tempoLCD->setDigitCount(3); m_ui.m_tempoLCD->setNumber("100"); m_ui.m_measureLCD->setDigitCount(5); m_ui.m_measureLCD->setNumber("1:01"); /** * Tempo reference: * http://www.music.vt.edu/musicdictionary/appendix/tempo/tempo1.html */ m_ui.m_air->addItem("Larghissimo", 20); m_ui.m_air->addItem("Largo", 40); m_ui.m_air->addItem("Larghetto", 60); m_ui.m_air->addItem("Adagio", 70); m_ui.m_air->addItem("Andante", 90); m_ui.m_air->addItem("Moderato", 110); m_ui.m_air->addItem("Allegro", 120); m_ui.m_air->addItem("Vivace", 160); m_ui.m_air->addItem("Presto", 170); m_ui.m_air->addItem("Prestissimo",200); m_ui.m_air->setCurrentIndex(4); connect( m_ui.m_exitbtn, SIGNAL(clicked()), SLOT(close()) ); connect( m_ui.m_configbtn, SIGNAL(clicked()), SLOT(optionsPreferences()) ); connect( m_ui.m_patternbtn, SIGNAL(clicked()), SLOT(editPatterns()) ); connect( m_ui.m_playbtn, SIGNAL(clicked()), SLOT(play()) ); connect( m_ui.m_stopbtn, SIGNAL(clicked()), SLOT(stop()) ); connect( m_ui.m_beatsBar, SIGNAL(valueChanged(int)), SLOT(beatsBarChanged(int)) ); connect( m_ui.m_figure, SIGNAL(activated(int)), SLOT(rhythmFigureChanged(int)) ); connect( m_ui.m_tempo, SIGNAL(valueChanged(int)), SLOT(tempoChanged(int)) ); connect( m_ui.m_dial1, SIGNAL(valueChanged(int)), SLOT(weakVeloChanged(int)) ); connect( m_ui.m_dial2, SIGNAL(valueChanged(int)), SLOT(strongVeloChanged(int)) ); connect( m_ui.m_dial3, SIGNAL(valueChanged(int)), SLOT(volumeChanged(int)) ); connect( m_ui.m_dial4, SIGNAL(valueChanged(int)), SLOT(balanceChanged(int)) ); connect( m_ui.m_air, SIGNAL(activated(int)), SLOT(tempoComboChanged(int)) ); connect( m_ui.m_tempo, SIGNAL(valueChanged(int)), SLOT(displayTempo(int)) ); connect( m_ui.m_pattern, SIGNAL(activated(int)), SLOT(patternChanged(int)) ); m_model = new DrumGridModel(this); m_instrumentList = new InstrumentList; m_model->setInstrumentList(m_instrumentList); QString drums = dataDirectory().filePath("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); setupActions(); readConfiguration(); createLanguageMenu(); } catch (SequencerError& ex) { QString errorstr = tr("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") .arg(ex.qstrError()); QMessageBox::critical(0, tr("Error"), errorstr); close(); } } KMetronome::~KMetronome() { delete m_instrumentList; } void KMetronome::setupActions() { m_ui.actionAboutQt->setIcon(QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png")); connect( m_ui.actionPlayStop, SIGNAL(triggered(bool)), SLOT(toggle(bool)) ); connect( m_ui.actionImportPatterns, SIGNAL(triggered()), SLOT(importPatterns()) ); connect( m_ui.actionExportPatterns, SIGNAL(triggered()), SLOT(exportPatterns()) ); connect( m_ui.actionQuit, SIGNAL(triggered()), SLOT(close()) ); connect( m_ui.actionEditPatterns, SIGNAL(triggered()), SLOT(editPatterns()) ); connect( m_ui.actionShowActionButtons, SIGNAL(triggered(bool)), SLOT(displayFakeToolbar(bool))); connect( m_ui.actionConfiguration, SIGNAL(triggered()), SLOT(optionsPreferences()) ); connect( m_ui.actionAbout, SIGNAL(triggered()), SLOT(about()) ); connect( m_ui.actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) ); connect( m_ui.actionHelp, SIGNAL(triggered()), SLOT(help()) ); } void KMetronome::closeEvent(QCloseEvent *event) { saveConfiguration(); QMainWindow::closeEvent(event); } void KMetronome::about() { About dlg(this); dlg.exec(); } void KMetronome::help() { QString hlpFile = QLatin1Literal("kmetronome.html"); QDir data = dataDirectory(); QFileInfo finfo(data.filePath(hlpFile)); if (finfo.exists()) { QUrl url = QUrl::fromLocalFile(finfo.absoluteFilePath()); QDesktopServices::openUrl(url); } } void KMetronome::saveConfiguration() { QSettings settings; settings.beginGroup("Settings"); settings.setValue("geometry", saveGeometry()); settings.setValue("windowState", saveState()); settings.setValue("language", m_language); settings.setValue("fakeToolbar", m_ui.actionShowActionButtons->isChecked()); settings.setValue("toolbar", m_ui.actionShowToolbar->isChecked()); if (m_seq != 0) { settings.setValue("instrument", m_instrument); settings.setValue("bank", m_bank); settings.setValue("program", m_program); settings.setValue("weakNote", m_seq->getWeakNote()); settings.setValue("strongNote", m_seq->getStrongNote()); settings.setValue("channel", m_seq->getChannel()); settings.setValue("weakVelocity", m_seq->getWeakVelocity()); settings.setValue("strongVelocity", m_seq->getStrongVelocity()); settings.setValue("volume", m_seq->getVolume()); settings.setValue("balance", m_seq->getBalance()); settings.setValue("resolution", m_seq->getResolution()); settings.setValue("sendNoteOff", m_seq->getSendNoteOff()); settings.setValue("duration", m_seq->getNoteDuration()); settings.setValue("tempo", m_seq->getBpm()); settings.setValue("rhythmNumerator", m_seq->getRhythmNumerator()); settings.setValue("rhythmDenominator", m_seq->getRhythmDenominator()); settings.setValue("autoconnect", m_seq->getAutoConnect()); settings.setValue("outputConn", m_seq->getOutputConn()); settings.setValue("inputConn", m_seq->getInputConn()); } settings.endGroup(); settings.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() { QSettings settings; settings.beginGroup("Settings"); restoreGeometry(settings.value("geometry").toByteArray()); restoreState(settings.value("windowState").toByteArray()); m_instrument = settings.value("instrument", QString()).toString(); m_bank = settings.value("bank", QString()).toString(); m_program = settings.value("program", QString()).toString(); applyInstrumentSettings(); m_seq->setChannel(settings.value("channel", METRONOME_CHANNEL).toInt()); m_seq->setWeakNote(settings.value("weakNote", METRONOME_WEAK_NOTE).toInt()); m_seq->setStrongNote(settings.value("strongNote", METRONOME_STRONG_NOTE).toInt()); m_seq->setResolution(settings.value("resolution", METRONOME_RESOLUTION).toInt()); int volume = settings.value("volume", METRONOME_VOLUME).toInt(); int balance = settings.value("balance", METRONOME_PAN).toInt(); int weakVel = settings.value("weakVelocity", METRONOME_VELOCITY).toInt(); int strongVel = settings.value("strongVelocity", METRONOME_VELOCITY).toInt(); int tempo = settings.value("tempo", 100).toInt(); int ts_num = settings.value("rhythmNumerator", 4).toInt(); int ts_div = settings.value("rhythmDenominator", 4).toInt(); 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); setBeatsBar(ts_num); setFigure(ts_div); setTempo(tempo); displayWeakVelocity(weakVel); displayStrongVelocity(strongVel); displayVolume(volume); displayBalance(balance); int duration = settings.value("duration", NOTE_DURATION).toInt(); m_seq->setNoteDuration(duration); bool sendNoteOff = settings.value("sendNoteOff", true).toBool(); m_seq->setSendNoteOff(sendNoteOff); bool autoconn = settings.value("autoconnect", false).toBool(); m_seq->setAutoConnect(autoconn); if(autoconn) { m_seq->setOutputConn(settings.value("outputConn", "20:0").toString()); m_seq->setInputConn(settings.value("inputConn", "20:0").toString()); m_seq->connect_output(); m_seq->connect_input(); } m_seq->sendInitialControls(); bool fakeToolbar = settings.value("fakeToolbar", true).toBool(); m_ui.actionShowActionButtons->setChecked(fakeToolbar); bool realToolbar = settings.value("toolbar", true).toBool(); m_ui.actionShowToolbar->setChecked(realToolbar); displayFakeToolbar(fakeToolbar); m_ui.toolBar->setVisible(realToolbar); 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()); 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(); } } delete dlg; } void KMetronome::updateDisplay(int bar, int beat) { 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() { enableControls(false); m_ui.actionConfiguration->setEnabled(false); m_ui.actionPlayStop->setChecked(true); m_seq->metronome_start(); updateDisplay(1, 0); m_ui.m_stopbtn->setFocus(); } void KMetronome::stop() { m_seq->metronome_stop(); enableControls(true); m_ui.actionConfiguration->setEnabled(true); m_ui.actionPlayStop->setChecked(false); m_ui.m_playbtn->setFocus(); } void KMetronome::cont() { enableControls(false); m_ui.actionConfiguration->setEnabled(false); m_seq->metronome_continue(); } void KMetronome::setTempo(int newTempo) { if (newTempo < TEMPO_MIN || newTempo > TEMPO_MAX) return; m_ui.m_tempo->setValue(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; setBeatsBar(numerator); setFigure(denominator); m_seq->setRhythmDenominator(denominator); } /** * Patterns stuff */ void KMetronome::updatePatterns() { const int n(QSTR_PATTERN.size()); QStringList lst; QSettings settings; foreach(const QString& name, settings.childGroups()) { if (name.startsWith(QSTR_PATTERN)) lst += name.mid(n); } 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_patternMode) m_drumgrid->readPattern(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(getTempo()); setSelectedPattern(tmpPattern); m_seq->setPatternMode(patternMode()); } void KMetronome::patternChanged(int idx) { m_patternMode = (idx > 0); if (m_patternMode) { readDrumGridPattern(); } m_seq->setPatternMode(m_patternMode); if (m_patternMode) { setBeatsBar(m_model->columnCount()); setFigure(m_model->patternFigure()); } m_ui.m_beatsBar->setEnabled(!m_patternMode); m_ui.m_figure->setEnabled(!m_patternMode); } void KMetronome::importPatterns(const QString& path) { QSettings settings; QSettings input(path, QSettings::IniFormat, this); foreach(const QString& name, input.childGroups()) { input.beginGroup(name); settings.beginGroup(QSTR_PATTERN+name); settings.remove(""); foreach(const QString& key, input.childKeys()) { settings.setValue(key, input.value(key)); } settings.endGroup(); input.endGroup(); } settings.sync(); updatePatterns(); } void KMetronome::exportPatterns(const QString& path) { QSettings settings; QSettings output(path, QSettings::IniFormat, this); const int n(QSTR_PATTERN.size()); QStringList lst; foreach(const QString& name, settings.childGroups()) { if (name.startsWith(QSTR_PATTERN)) { lst += name.mid(n); } } if (!lst.isEmpty()) { foreach(const QString& name, lst) { settings.beginGroup(QSTR_PATTERN+name); output.beginGroup(name); output.remove(""); foreach(const QString& key, settings.childKeys()) { output.setValue(key, settings.value(key)); } output.endGroup(); settings.endGroup(); } output.sync(); } } void KMetronome::importPatterns() { QString dirName = QStandardPaths::locate(QStandardPaths::DataLocation, "*.pat", QStandardPaths::LocateDirectory) ; QString path = QFileDialog::getOpenFileName(this, tr("Import Patterns"),dirName,tr("Pattern Files (*.pat)")); if (!path.isEmpty()) { importPatterns(path); } } void KMetronome::exportPatterns() { QString dirName = QStandardPaths::writableLocation(QStandardPaths::DataLocation); QDir dir(dirName); if (!dir.exists()) { dir.mkpath(dirName); } QFileDialog dialog(this); dialog.setWindowModality(Qt::WindowModal); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setWindowTitle(tr("Export Patterns")); dialog.setFileMode(QFileDialog::AnyFile); dialog.setNameFilter(tr("Pattern Files (*.pat)")); dialog.setDirectory(dirName); dialog.setDefaultSuffix("pat"); if (dialog.exec() == QDialog::Accepted) { QStringList files = dialog.selectedFiles(); if (!files.isEmpty()) { QString path = files.at(0); if (!path.isEmpty()) { exportPatterns(path); } } } } void KMetronome::display(int bar, int beat) { m_ui.m_measureLCD->setNumber(QString("%1:%2").arg(bar, 2, 10, QChar(' ')) .arg(beat, 2, 10, QChar('0'))); } void KMetronome::setFigure(int newValue) { int ts_dd; int x = newValue; for(ts_dd = 0; x > 1; x /= 2) ++ts_dd; m_ui.m_figure->setCurrentIndex(ts_dd); } void KMetronome::displayTempo(int newTempo) { int i, j = 0; m_ui.m_tempoLCD->setNumber(QString("%1").arg(newTempo, 3, 10, QChar(' '))); for(i = 0; i < m_ui.m_air->count(); ++i) { if (m_ui.m_air->itemData(i).toInt() > newTempo) break; j = i; } m_ui.m_air->setCurrentIndex(j); } void KMetronome::enableControls(bool e) { m_ui.m_playbtn->setEnabled(e); m_ui.m_stopbtn->setEnabled(!e); m_ui.m_configbtn->setEnabled(e); m_ui.m_patternbtn->setEnabled(e); m_ui.m_beatsBar->setEnabled(e & !m_patternMode); m_ui.m_figure->setEnabled(e & !m_patternMode); m_ui.m_pattern->setEnabled(e); } void KMetronome::mouseDoubleClickEvent(QMouseEvent *) { bool ok = false; int newTempo = QInputDialog::getInt(this, tr("Tempo"), tr("Enter new Tempo:"), m_ui.m_tempo->value(), TEMPO_MIN, TEMPO_MAX, 1, &ok ); if (ok) { m_ui.m_tempo->setValue(newTempo); } } void KMetronome::tempoComboChanged(int v) { m_ui.m_tempo->setValue(m_ui.m_air->itemData(v).toInt()); } void KMetronome::setPatterns(const QStringList& patterns) { m_ui.m_pattern->clear(); m_ui.m_pattern->addItem(tr("Automatic", "the pattern is created automatically")); m_ui.m_pattern->addItems(patterns); } QString KMetronome::getSelectedPattern() { return m_ui.m_pattern->currentText(); } void KMetronome::setSelectedPattern(const QString& pattern) { if (pattern.isEmpty()) { patternChanged(0); } else { m_ui.m_pattern->setCurrentText(pattern); patternChanged(m_ui.m_pattern->currentIndex()); } } QString KMetronome::configuredLanguage() { if (m_language.isEmpty()) { QSettings settings; QString defLang = QLocale::system().name(); settings.beginGroup("Settings"); m_language = settings.value("language", defLang).toString(); settings.endGroup(); //qDebug() << Q_FUNC_INFO << m_language; } return m_language; } void KMetronome::slotSwitchLanguage(QAction *action) { QString lang = action->data().toString(); QLocale qlocale(lang); QString localeName = qlocale.nativeLanguageName(); if ( QMessageBox::question (this, tr("Language Changed"), tr("The language for this application is going to change to %1. " "Do you want to continue?").arg(localeName), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes ) { m_language = lang; retranslateUi(); } else { m_currentLang->setChecked(true); } } void KMetronome::createLanguageMenu() { QString currentLang = configuredLanguage(); QActionGroup *languageGroup = new QActionGroup(this); connect(languageGroup, SIGNAL(triggered(QAction *)), SLOT(slotSwitchLanguage(QAction *))); QDir dir = localeDirectory(); QStringList fileNames = dir.entryList(QStringList("*.qm")); QStringList locales; locales << "en"; foreach (const QString& fileName, fileNames) { QString locale = fileName; locale.truncate(locale.lastIndexOf('.')); locales << locale; } locales.sort(); m_ui.menuLanguage->clear(); foreach (const QString& loc, locales) { QLocale qlocale(loc); QString localeName = qlocale.nativeLanguageName(); QAction *action = new QAction(localeName, this); action->setCheckable(true); action->setData(loc); m_ui.menuLanguage->addAction(action); languageGroup->addAction(action); if (currentLang.startsWith(loc)) { action->setChecked(true); m_currentLang = action; } } } void KMetronome::retranslateUi() { m_trq->load( "qt_" + configuredLanguage(), QLibraryInfo::location(QLibraryInfo::TranslationsPath) ); m_trp->load( configuredLanguage(), localeDirectory().absolutePath() ); m_ui.retranslateUi(this); m_seq->retranslateUi(); createLanguageMenu(); updatePatterns(); } kmetronome-1.0.1/src/PaxHeaders.3594/kmetropreferences.h0000644000000000000000000000013213560310264020035 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/kmetropreferences.h0000644000175000001440000000675413560310264020720 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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 #include "ui_kmetropreferencesbase.h" #include "instrument.h" class KMetroPreferences : public QDialog { 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(); } 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 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-1.0.1/src/PaxHeaders.3594/main.cpp0000644000000000000000000000013213560310264015571 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/main.cpp0000644000175000001440000000350313560310264016441 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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 "kmetronome.h" #include "defs.h" int main (int argc, char **argv) { QCoreApplication::setOrganizationName(QSTR_DOMAIN); QCoreApplication::setOrganizationDomain(QSTR_DOMAIN); QCoreApplication::setApplicationName(QSTR_APPNAME); QApplication app(argc, argv); KMetronome *mainWin = new KMetronome; mainWin->show(); return app.exec(); } kmetronome-1.0.1/src/PaxHeaders.3594/kmetronome.h0000644000000000000000000000013213560310264016472 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/kmetronome.h0000644000175000001440000001047113560310264017344 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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 #include #include "ui_kmetronome.h" class SequencerAdapter; class DrumGrid; class DrumGridModel; class Instrument; class InstrumentList; class QCloseEvent; class KMetronome : public QMainWindow { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "net.sourceforge.kmetronome") public: KMetronome(QWidget* parent=0); virtual ~KMetronome(); void display(int, int); int getTempo() { return m_ui.m_tempo->value(); } int getBeatsBar() { return m_ui.m_beatsBar->value(); } int getFigure() { return m_ui.m_figure->currentIndex(); } void setBeatsBar(int newValue) { m_ui.m_beatsBar->setValue(newValue); } void setFigure(int newValue); void enableControls(bool e); void setPatterns(const QStringList& patterns); bool patternMode() { return m_patternMode; } QString getSelectedPattern(); void setSelectedPattern(const QString& pattern); QString configuredLanguage(); void retranslateUi(); protected: void closeEvent(QCloseEvent *event); void mouseDoubleClickEvent ( QMouseEvent * e ); public Q_SLOTS: void about(); void help(); void play(); void stop(); void cont(); void setTempo(int newTempo); void setTimeSignature(int numerator, int denominator); void displayTempo(int); void displayWeakVelocity(int v) { m_ui.m_dial1->setValue(v); } void displayStrongVelocity(int v) { m_ui.m_dial2->setValue(v); } void displayVolume(int v) { m_ui. m_dial3->setValue(v); } void displayBalance(int v) { m_ui.m_dial4->setValue(v); } void displayFakeToolbar(bool b) { m_ui.m_fakeToolbar->setVisible(b); } void tempoComboChanged(int); 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(); void slotSwitchLanguage(QAction *action); private: void setupAccel(); void setupActions(); void saveConfiguration(); void readConfiguration(); void readDrumGridPattern(); void applyInstrumentSettings(); void exportPatterns(const QString& path); void importPatterns(const QString& path); void createLanguageMenu(); bool m_patternMode; Ui::KMetronomeWindow m_ui; SequencerAdapter* m_seq; QPointer m_drumgrid; InstrumentList* m_instrumentList; DrumGridModel* m_model; QString m_instrument; QString m_bank; QString m_program; QString m_language; QTranslator* m_trp; QTranslator* m_trq; QAction* m_currentLang; }; #endif // KMETRONOME_H kmetronome-1.0.1/src/PaxHeaders.3594/lcdnumbers.qrc0000644000000000000000000000013213560310264017006 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/lcdnumbers.qrc0000644000175000001440000000013513560310264017654 0ustar00pedrousers00000000000000 lcdnumbers.svg kmetronome-1.0.1/src/PaxHeaders.3594/drumgridmodel.h0000644000000000000000000000013213560310264017150 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/drumgridmodel.h0000644000175000001440000000471313560310264020024 0ustar00pedrousers00000000000000/* KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2006-2014, 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-1.0.1/src/PaxHeaders.3594/defs.h0000644000000000000000000000013213560310264015233 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/defs.h0000644000175000001440000000471413560310264016110 0ustar00pedrousers00000000000000/*************************************************************************** * KMetronome - ALSA Sequencer based MIDI metronome * * Copyright (C) 2005-2014 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"); const QString QSTR_APPNAME("Drumstick Metronome"); const QString QSTR_DOMAIN("kmetronome.sourceforge.net"); #endif /*DEFS_H*/ kmetronome-1.0.1/src/PaxHeaders.3594/icons0000644000000000000000000000013213560310264015177 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/0000755000175000001440000000000013560310264016123 5ustar00pedrousers00000000000000kmetronome-1.0.1/src/icons/PaxHeaders.3594/midi0000644000000000000000000000013213560310264016121 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/midi/0000755000175000001440000000000013560310264017045 5ustar00pedrousers00000000000000kmetronome-1.0.1/src/icons/midi/PaxHeaders.3594/icon16.png0000644000000000000000000000013213560310264020003 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/midi/icon16.png0000644000175000001440000000073613560310264020660 0ustar00pedrousers00000000000000PNG  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\hM1Cvt"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-1.0.1/src/icons/PaxHeaders.3594/4.png0000644000000000000000000000013213560310264016125 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/4.png0000644000175000001440000000045013560310264016773 0ustar00pedrousers00000000000000PNG  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-1.0.1/src/icons/PaxHeaders.3594/32.png0000644000000000000000000000013213560310264016206 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/32.png0000644000175000001440000000104513560310264017055 0ustar00pedrousers00000000000000PNG  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-1.0.1/src/icons/PaxHeaders.3594/16.png0000644000000000000000000000013213560310264016210 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/16.png0000644000175000001440000000074413560310264017064 0ustar00pedrousers00000000000000PNG  IHDR+bHbKGD pHYs.#.#x?vtIME 0tEXtCommentCreated with The GIMPd%nHIDATXWQ NUs2ғiO7V?B벀`f!"Yk]x9x3xx0s9|bGO T<Uq+( [4 Pآ*;@l +D]X4L(zU22 ,v0es"X-@aMD"9J wEVѱVK<v&"KZI taPH?:Yt,d9F/K'JܛnY4wװԵi;La%n?T}xZ>}\~ċwT+a:$|`^ IENDB`kmetronome-1.0.1/src/icons/PaxHeaders.3594/2.png0000644000000000000000000000013213560310264016123 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/2.png0000644000175000001440000000046613560310264017000 0ustar00pedrousers00000000000000PNG  IHDR*lbKGD pHYs.#.#x?vtIME :HJtEXtCommentCreated with The GIMPd%nIDATHQ 0D'KlO-&kҖ@yGmSU</ .ޮ䵟+Uh"1#D sYdUۖnC,9N2Ghv9|J"7: 80Y@AM 2$?IENDB`kmetronome-1.0.1/src/icons/PaxHeaders.3594/8.png0000644000000000000000000000013213560310264016131 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/8.png0000644000175000001440000000070013560310264016775 0ustar00pedrousers00000000000000PNG  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-1.0.1/src/icons/PaxHeaders.3594/64.png0000644000000000000000000000013213560310264016213 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/src/icons/64.png0000644000175000001440000000113313560310264017060 0ustar00pedrousers00000000000000PNG  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% Pedro Lopez-Cabanillas <plcl@users.sourceforge.net> KMetronome - ALSA Sequencer based MIDI metronome Copyright (C) 2005-2014 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 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 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 QDialogButtonBox::Cancel|QDialogButtonBox::Ok qPixmapFromMimeSource 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_use_noteoff toggled(bool) m_duration setEnabled(bool) 139 264 162 230 buttonBox accepted() KMetroPreferencesBase accept() 261 288 326 315 buttonBox rejected() KMetroPreferencesBase reject() 217 289 218 325 kmetronome-1.0.1/PaxHeaders.3594/kmetronome.lsm0000644000000000000000000000013213560310264016247 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/kmetronome.lsm0000644000175000001440000000100713560310264017114 0ustar00pedrousers00000000000000Begin4 Title: Drumstick Metronome Version: 1.0.1 Entered-date: 2008-11-23 Description: ALSA Sequencer based MIDI Metronome Keywords: 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 Qt and ALSA MIDI Copying-policy: GPL End kmetronome-1.0.1/PaxHeaders.3594/kmetronome.desktop0000644000000000000000000000013213560310264017125 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/kmetronome.desktop0000644000175000001440000000076013560310264017777 0ustar00pedrousers00000000000000[Desktop Entry] Type=Application Terminal=false Categories=AudioVideo;Audio;Midi;Education;Music; Comment[en_US]=MIDI Metronome Using ALSA Sequencer Comment[es]=Metrónomo MIDI utilizando el secuenciador ALSA Comment=MIDI Metronome Using ALSA Sequencer Exec=kmetronome GenericName[en_US]=MIDI Metronome GenericName[es]=Metrónomo MIDI GenericName=MIDI Metronome Icon=kmetronome Name[en_US]=Drumstick Metronome Name[es]=Metrónomo Drumstick Name=Drumstick Metronome Keywords=Music;MIDI;Metronome; kmetronome-1.0.1/PaxHeaders.3594/README0000644000000000000000000000013213560310264014232 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.136362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/README0000644000175000001440000000343413560310264015105 0ustar00pedrousers00000000000000For 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 * Qt5 libraries Debian: "qtbase5-dev" https://packages.debian.org/sid/qtbase5-dev-tools * 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 https://sourceforge.net/p/forge/documentation/SVN%20Overview/ 1. Check out the module drumstick from the SVN repository.         Host: svn.code.sf.net         Path: /p/drumstick/code/trunk         Module: drumstick example: $ svn checkout https://svn.code.sf.net/p/drumstick/code/trunk drumstick The module 'drumstick' is also used by other projects in a similar way as an independent shared dynamic library. 2. Check out the module kmetronome from the SVN repository.         Host: svn.code.sf.net         Path: /p/kmetronome/code/trunk         Module: kmetronome example: $ svn co https://svn.code.sf.net/p/kmetronome/code/trunk kmetronome 4. Configure and compile $ mkdir build $ cd build $ cmake .. -DCMAKE_BUILD_TYPE=debug \ -DCMAKE_PREFIX_PATH=$HOME/Qt/5.12.5/gcc_64/ \ -DCMAKE_INSTALL_PREFIX=/usr/local/ $ make VERBOSE=1 5. Hack and enjoy! kmetronome-1.0.1/PaxHeaders.3594/AUTHORS0000644000000000000000000000013213560310264014422 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/AUTHORS0000644000175000001440000000123613560310264015273 0ustar00pedrousers00000000000000Copyright (C) 2005-2014 Pedro Lopez-Cabanillas Translations Czech: Pavel Fric file: translations/cs.ts German. Rene Landert file: translations/de.ts Spanish: Pedro López-Cabanillas file: translations/es.ts French: Julien Richard-Foy file: translations/fr.ts Turkish: Server Acim file: translations/tr.ts Instrument definitions (.INS files) support: Copyright (C) 2005-2014, rncbc aka Rui Nuno Capela Files: src/Instrument.h src/Instrument.cpp kmetronome-1.0.1/PaxHeaders.3594/kmetronome.spec0000644000000000000000000000013213560310264016406 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/kmetronome.spec0000644000175000001440000000330013560310264017251 0ustar00pedrousers00000000000000# spec file for package kmetronome (Version 1.0.1) # # norootforbuild Name: kmetronome Version: 1.0.1 Release: 0 License: GPL v2 or later Summary: 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-lib-devel BuildRequires: qt5-qtbase-devel BuildRequires: qt5-qtsvg-devel BuildRequires: qt5-qttools-devel BuildRequires: libdrumstick-devel %description Drumstick Metronome is a MIDI metronome with Qt interface, based on the ALSA sequencer. Intended for musicians and music students, 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 %prep %setup -q %build %cmake make %{?jobs:-j %jobs} VERBOSE=1 %install make install DESTDIR=$RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc INSTALL README ChangeLog AUTHORS TODO %doc %{_mandir}/man1/* %dir %{_datadir}/%name %dir %{_datadir}/icons/hicolor/*/apps %dir %{_datadir}/dbus-1/services %dir %{_datadir}/dbus-1/interfaces %{_bindir}/%name %{_datadir}/applications/%name.desktop %{_datadir}/dbus-1/*/* %{_datadir}/icons/hicolor/*/*/* %{_datadir}/%name/* %changelog * Tue Nov 5 2019 Pedro Lopez-Cabanillas 1.0.1 - New release * Sun Oct 12 2014 Pedro Lopez-Cabanillas 1.0.0 - Initial version kmetronome-1.0.1/PaxHeaders.3594/COPYING0000644000000000000000000000013213560310264014405 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/COPYING0000644000175000001440000004310313560310264015255 0ustar00pedrousers00000000000000 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-1.0.1/PaxHeaders.3594/cmake_admin0000644000000000000000000000013213560310264015525 xustar0030 mtime=1572966580.120362634 30 atime=1572966580.140362634 30 ctime=1572966580.120362634 kmetronome-1.0.1/cmake_admin/0000755000175000001440000000000013560310264016451 5ustar00pedrousers00000000000000kmetronome-1.0.1/cmake_admin/PaxHeaders.3594/cmake_uninstall.cmake.in0000644000000000000000000000013213560310264022362 xustar0030 mtime=1572966580.120362634 30 atime=1572966580.140362634 30 ctime=1572966580.120362634 kmetronome-1.0.1/cmake_admin/cmake_uninstall.cmake.in0000644000175000001440000000155513560310264023237 0ustar00pedrousers00000000000000IF(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-1.0.1/cmake_admin/PaxHeaders.3594/FindPCHSupport.cmake0000644000000000000000000000013213560310264021414 xustar0030 mtime=1572966580.120362634 30 atime=1572966580.140362634 30 ctime=1572966580.120362634 kmetronome-1.0.1/cmake_admin/FindPCHSupport.cmake0000644000175000001440000001033013560310264022260 0ustar00pedrousers00000000000000# Copyright (C) 2005-2014 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-1.0.1/cmake_admin/PaxHeaders.3594/FindMSGFMT.cmake0000644000000000000000000000013213560310264020402 xustar0030 mtime=1572966580.120362634 30 atime=1572966580.140362634 30 ctime=1572966580.120362634 kmetronome-1.0.1/cmake_admin/FindMSGFMT.cmake0000644000175000001440000000412513560310264021253 0ustar00pedrousers00000000000000# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2014 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-1.0.1/cmake_admin/PaxHeaders.3594/DBusMacros.cmake0000644000000000000000000000013213560310264020606 xustar0030 mtime=1572966580.120362634 30 atime=1572966580.140362634 30 ctime=1572966580.120362634 kmetronome-1.0.1/cmake_admin/DBusMacros.cmake0000644000175000001440000000072613560310264021462 0ustar00pedrousers00000000000000macro(dbus_add_activation_service _sources) 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 share/dbus-1/services) endforeach (_i ${ARGN}) endmacro(dbus_add_activation_service _sources) kmetronome-1.0.1/PaxHeaders.3594/net.sourceforge.kmetronome.service.in0000644000000000000000000000013213560310264022630 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/net.sourceforge.kmetronome.service.in0000644000175000001440000000013313560310264023474 0ustar00pedrousers00000000000000[D-BUS Service] Name=net.sourceforge.kmetronome Exec=@CMAKE_INSTALL_PREFIX@/bin/kmetronome kmetronome-1.0.1/PaxHeaders.3594/configure.debug0000644000000000000000000000013213560310264016343 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/configure.debug0000755000175000001440000000076313560310264017223 0ustar00pedrousers00000000000000#!/bin/bash # a typical configuration for development usage... QTDIR=$HOME/Qt/5.12.5/gcc_64 QTLIB=$QTDIR/lib QTINC=$QTDIR/include QT_PLUGIN_PATH=$QTDIR/plugins PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:$QTLIB/pkgconfig export QTDIR QTLIB QTINC QT_PLUGIN_PATH PKG_CONFIG_PATH mkdir -p build cd build cmake .. \ -DCMAKE_PREFIX_PATH=$QTDIR \ -DCMAKE_CXX_FLAGS="-W -Wall" \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX=/usr/local echo "You can run 'make' now" kmetronome-1.0.1/PaxHeaders.3594/doc0000644000000000000000000000013213560310264014042 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/0000755000175000001440000000000013560310264014766 5ustar00pedrousers00000000000000kmetronome-1.0.1/doc/PaxHeaders.3594/kmetronome_2.png0000644000000000000000000000013213560310264017226 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/kmetronome_2.png0000644000175000001440000010177513560310264020110 0ustar00pedrousers00000000000000PNG  IHDRQtsBIT|d pHYs+$tEXtDescriptionWindow Class: kmetronomed>tEXtTitlePreferencesJB IDATxwXG?Ew'v󳾶-!Ē+PlQXf& kDc)cC@#J9ppw|gvg[fw1!CRh@ J%L4I8ɤ0əNLeX| @`BVy4%=ZmRHTJEO2s%@ zjbN9<|̢OZ89:Ӹ| vʴuP$$I):U0 VR&VR&M,%b vZl2C/ 7nrMJ%rF!ArJ rR GqIEa`#ePm%t s0t7Tǎg歘QnV~Y,zz߷[\LRRӨQ.. =V*I11ܻ{k+ /5NbyO%펠):U(2K d.a98TM*k,OOg%`§,W /N-l U 'f137GhbL&#+#gp€K%xڭ֖ުȑTPh#}F1B5o΃MA)8WUˢ(pŴ" 5%kӆqcƨss9,˕chv+,ZWA qq4h ty!#tyL -aPŕk׹r:BzYlyEGGSM4le muR\\,_囯"6&ڨ:8뻲P.gIZY^ePg2=@.?-[4g.\װ= 0T&&9%'gHOK#3## OM''SR jמwom1x`ݻNڭ;{cp/uؾc#F@V J%;vR u7ƆJxygLÇ [0˛~WV/2aDzꍗ~;t(/+:gqfYdTT.ׯ]{%e嗤dfd΢ ĖmuDTH SZ<- $&&/EYCz4oܸɶ;|ƍ ~ܜ-[ٽ@_ձPq7n؉}a:m{y67,9YV%K1zXNfMܻwP׵,_TB>8jիQ\p:I3:.%%Z*s`6nPRme:mׯ]oE.Oc=۠2dLLfffbiiIx~|ԩ]KKK7BdYX&{yͤceiɥ;-(t֝ݺ3j?yW_;uYaCɌ315g|N<Σ *fΚL~B޽s:L>sS%3i$uZA-,,σR_|Y[ȯNJMIqD8VѳW/$ml¤xDfF)L6B dV\?۶mcͥ.Vغ}7ns''Od뎝UU,?nߦn:8y /!c]ԩ]wP?/dY/H'#3ǎGyk055E$R;GPP t9 qdef-d(rOdp(J%]Fzz:)66r${ _φ g$͛5˷|I7oftؑ8u>u6ݳI'2uT= wsB>!֬ `æMԩSM[1?LLe IXY4co%O&)CveFB{,ɤgHIM!+K2HIO$+3I4>b(<҈ddg Pďܿ*VĚ@*W}c#Lwww"éV8;ڳdRʕ՗_qCֲN誓 DN!ElH[gO \x{ySV-6lB\232 `ƍT\ʖmu,rA$VK'&ϗĉdzŰdބZjr]Ӵ Ç -A޼׮nߢVZ335Ҳ1OPJ<"SJJ,iҧOO#qucFY~cerҭǬ  **dwq&4yRf޼6T'd$m?#]hժ6Q8Ϟ=-~R;At#l6ܫT֥ʰq&_;qvvbիW ZO`mmiii(JLudsڴnCZFvY+TVY)!K>B$ΛOTTUTaرEXՓԔϘ\.[o;vbyPZ5͝ݲJAuuT[';3#{on߸BJIA<<0XB[ZlɄI%$2G'v͟"3#2xtZA'y;_eW|G~Hu{o% 6浱ҥ+ddS^=E xfmÒ;`ko9_ҢysLMM _C<.3oIKK bGWĄX$667oafnY,LdD=yBع󘛚Rf-+a&b8WUˢcݸt[iɹY~Y,RS333Fx qxDVVO!.62037WWp/U7C MNzUu, WMYP;Ą*$Idfe\.GP`jj̬tA٧8WUˢ(pԝuagKjYD'UT1ܘ`an9@ x}):U(2?_[ @ "7@ 9s3pXR RɋM@PnJ@ B5R@P@ /@ *=7Ѷ  &fGP"2ˋŸ@ ^}J@ (KM eĄ@ Ą@ Q^m{l 5|`[@ Gv{Òt _l@ E՚4S{{{ +++>Ϩҵ[wemKڧ&_^&*GYAN^lyS<J-\sm_~LL&ƍ? -"]T]53"ݻ[GGG*V̟ Ezi]uS)T>^~n.^Ⱥu뉈~ҩcG>_ƍî?Sj&ի.I;vCoQ>XZZMRXsSGMsjȳMuJbމ믿"++3fbccS`L?{{9v8zR';weKYl)<`] _O,Zx2p֮U7]taCz֯[6li?'W1wL/o9+W([r]|K}dRˎX07o]s7o.[lYfZ+̝;,6oZoܗ8w+T>φ>zFH46oĹs8~ 6o~z8J5qqqŅ5kzP~97>>>j||8<ʊڷG.3h@ÇVQXXX`mmOOξ(>ǟCŊ0r}||pvv#9|AN2) $%%ʧ7}7v ܰgܹ{W_;Ę1P666x{yq |+8r@TgCt=AIZ8Űd%O}S\95th۶ɉhU 'Opv6E п?ӧOښ ~N\\\xIVrh )WnWfM>5I8s,~~+شquֆ+_5 RԾ>]H[ zNiS~FHdxyyT*Uŗ?r۷SǑV͚ A.U4t׮m[#..@ڵmgTt$&&+ <# ++`"|+EO=VSmhS~FJrӧo?>5 VZjz_'Y'̸qc_ɮ]qppw^ߩ_חLmڴo>Fo§ Z pttgGy3f"_&3aD ڶm1ۭfRJL.:k[0g<\˷KQ^t#me+9Ն6=gT (1^ KtFN(/]B\=۷ӷUNvlB w5A4l4!QAii³{nR}֦m[ڴm[$@ 0Bmggǎ[ PlroT0p#QA饘W(;q P$[@P1,Y*@   %@ &71*)2jaɒD "F K Vd ' HRRRս۹@ (`kmC* ~1he჎K@P=JD#i-)RSS RYҮBNbz#n$6Lu$csXR (KHHHb] x)"qˁ؀l )E&۶IŰ+0Ǝq#,A]u+$x~TK˵.,J2OhV}5^[u"PS緂 A\z~~[x TiCP0J)?BΚ3)-.˗_ (L{6+-Ν8p-[ʊ-Z0`@vܥӵ[w~q{2` V^CVV:M7g"qff& `!xygLÇ=b޼ 83g<={Wrˎr֕;.-.\1lݺ]B-[M k͂t}R0ɬ'#=C#^u.OgxoG,?tyV}R"+3U+ܱ#myzjҰ!vÎhټ9qmY VNh RSR IÆ4iؐ& j+*EBaA|}-ZlvVܺuK#-g "EsWv|{I;v$<<˖|R+,]?k̝3AtaOA7QF hm4UǁܽsM[iVnݺEP``C&ܹ֮ য়.Ǐ_ݷ蝾y&΄: }&33W,з/d_8{Qס D!wq.=[kٳ'_9cPg=" !1{{{8{{{5|||pvv#9|6\\\pqqaG>g1TpsҒ=zp]uJ4j s /lv [N}eCk3'''lǟCŊ0rlt JIR ѣGm=K҈$%9d__\qssחЪOiSNrz1s&+ciYܸ~]=?2m4*U 'N?7mȐPo";|ңٓ=rwww=_9cPf܊HRR...긤$5Wﱻ; zHHHАXbʕ+GFF;s=Ɍe WN}eCkjx*V5t}{OT'=z6(O'LPRR%y*Udtt4Tњ.GGGz?y>{kM&uw 7^#Yt))u ^#)wn&iSԩ][#.*:ZߞCA5899i?yDC .Z}{ٶuK]X]TU*rnC }Un;uqqɓ'Z { I 0` 9“G5]]]T? -*T aִt崫-twwwPN %t'O囉N݅] &NSSS&L;!;]/v.}u6NJXmN>5O||?<~J+1ԨQC#_ƍ0a"Y m۶o>>{1w*)))Z`&N 6mZkĄO D=8~ℑ%֍r7ڵzEh追ނ>6Vٳ't9gD.ӿB,t KCvء?t0V\CxÃ!Cۻ0p =4{y u `ԩ<~jժ1G7OOOFz{'. b %IPiTj͊-Q.+r.P9vOzDP+7dmZkMS7քE]M (-5dJu!$IB HF΢5 IDATd$vx]^F9_ki R!>Y!Ů2  (2 B:7+5zotakc˥hа ETrelm!zn2Ex0ӡHL|Z#ptt֎ժC4n2ի 6@ (shħ@ ( dgkK %@ (ډ[@꣹Y@ eՂbIJJ qq%@ 0WlmR:ɂ2È[A%@ (ǎ%"U mIE[@P HMMţC'@Nbư qqbGu(f쎧AiDBB6U풘P"(sHkU+׮n@B^wn;|ң'c3wֽ}*@[J ުϮ;oU_#6ye=卉aƴioۆ4i>|X†|U*s(^ÇѬikז/?"S(,Yj;ob%(b-e?' oÆa 6~~XZZM}Rw}qiFxJzuҥkvr޵/333Yh!+fffxeK}Vaմq#&LĦP(tC&OU=##_Թ3&NB-?y/7m$&&&ϳ RRR>'N2f(< w̙06o`ʕ:1t'>>xuk;FP` 7l/ 727Ѧ6u凰_[֭[jR#Vu^?i _8rV Q$;w*貱cNYl)˗-ܩÕWXd1ڧ?իט;gkcd}l=wyuf5oƪU띾o>._ܹs @bO 뻾C oۗ֩Аyؾslر[[|:y-۶}.ܿڠ@uz`@waӖlڲ[n!L6m̹=!;Ξ0Ohh(oT*tD,ZHFFƋ|MRRiFwܡ[oկݻwJ|XK~ܽgBWr-Y|$$&boogooObbbu쌳3>#GrB4Ƒ#ニ ...Grɏ 'GP;6661 Ǝу;wo3f4*To//N8oQ$)J*Rre9zSrg&ꂛ+板`>Y]̚9h*].L2?N?&檶uy]\'ܸ~%1k,$II:W۶najՊU(vZZVskRRR O>www`9;?\aP*tHRR...긤$ ۽B݉O(NCl$$$hWX1یbŊZږ+W cbb;v=D)IƔ\]Da}]~J%}ƎΗ38&&J*+Wo^GGMδILH`Æ ̚19uU\ylll[9K_gϞٳ`UVU˽+b<;}F3qkkk} ^#Yt))X[5»ȟemySNmBOֈ;Jڵs!*:Z: 䤑tmv“'Oc0ORO/ *[qB^|#@v\-HO@.OeVi܈TGG7gpppdH_7ȈH箮5ҳi311j?w8!s,\[H۶e dAlܰAoܡF\rU}~5jԨ">aĉbjjʄu7B?ۧ[ntXa۶[V͚ A.U4tGw``Dv ڶ% 8]v:cV **d e># ++`"|+l]wn3 YmvخU3-qNXt 1DDt|~6i"gϞA.'!1uR^=9u-[:;tȒ%"*:KӡcGT{qefWrJԭvҵ+={ܾs@9U~GD>dQ.%>N|Mwڴɰdq.PRF >?<~J+1ԨQCgܸd׮888лW/BC݋)SIIIjҸ1&L$Km6ۧ:sF~}YIЦMktmcgϞL1\N eu늉 s#::ʕ+1x`|+l ]Òdr:˖1h8haOkIYkWbmmMMrl͚7g'YYY|СCU6U+W2|PH濧'#INNɓZ˵i_d'LK/)W| Ifܗj;q=1\($_MB|Z\>r$fdܬXg/GG &&&1^Qd2 GG#56+6\x  3rXC ,J˗/ckkgѸ իWpN"1iI#[[;Wjި^]%cWo:@ Rve)޸ !7@ 9D&2@P$%%ظvE  6TRh[ވOe჎K@P=JD#\~KLRSSI,%Ӻ5.=Ò2E\lX}_ (#AݺFɾ؉[te B ;qc"NQ$e6n ުϕk׋L/r*ȋƭl=Fp?~LJ>l-Z4[kE>:nq_gRqk4jԘӦQzuu'߸q~?wLիaCXd 'Oٳg4hؐ^޴k׮X}{n|`§iРW^es7xɫ $$R<}73s 6nެNm߽s>#=f _Ξ=7_gCp0өS;v֖˗.~:ڴmS> ʼn̤pawhٲ%VVVlтc.uݺS3_n= ɀXz YYYҙ_~A^2ŗ/^Ȅ ٫7^#С߻oÆ{ѭ:޾csPBCOkn İ^\rUW$؁rrʣI) 92t7o@RJY8>Ѿ= ']UL4v[ ILHT7iؐ];vaNlA}:=#=}G֭hߞuYRJa5ÆO~banAFYt: 5z NN4|u « Ë.nK#V ٫w-`ܵJ.Ξ;ϼys#d^V dRFE-x)۶mSǎ:m]|K䤷 _cǏhb>A;~kYl)+̝;kkkyVF'?fJR0*YR[lV(J{l/>'(0c<)|233~J//T=~8AA8::yF֭ (0}.$I/>Пӌ0AeoGZ"dϏ\|EkZƍOX-o2 kۓXh>>>8;;ȑ>|:u1n*aiiI=s:M&3%!>$\]]iP0x x}{r9TI!ƌM ˋ'N] I<Y&4kڄڷcoHG}}qss___r@CVumv5o9V7'k1s&+ciYܸ~]ˁ닫V~>K$24kD7|22M65s11A>ww'Gpww+ e~'GGpqqQ%%%Xh*{N||Bu"ʕ###C}ض}[m4oL>WWW}c+CJehټZёiӧ3mtذaf`u@^K xxfe$`mm"e̠ls]6O壏qBCS\U+W O.Y;QT{1  cuK͚5|L$I̙` :m/gCpsuoQ>zU\Jo>-ZJdD$o&qssС:5s&#F0o|lllHNNZja+"<"_&Mrk&ȑ>|aB '`}zԪY=!!rYj;;;""" ">>xh߮}uE@P ># ++`"IRs n4nܘ_=HYd1QQDEGtb:tU6-- +++ʕG̝Fzn;:vIJK&:&KhQ^^'$dqqzJCI9{ t9 [SJ2Ni+aɲL5txc*UĄOSF uqᅭ]v@^ =NӻS|14֤qc&LHBA۶m۷OuۭfRJLl|6nݺbbbœ󈎎rJ у5kpUiҴ)_Ξ-;zcg98Tۢ EWU0ucGOuV 7dmZk]+D+^/Tؗn&9$!v^m$YᦄHĐdE睛@ xuŖ7e;7녣  (2 B:se[[.]D rXC  J˗/ckkgjG2Bzj-iw8::`kkGjjY oTV.F̑ݸ@ l/6+@ 9s_,❛ ,-׏AY@;7@ ЏHRRR+iWeWlmR9W(3J< t\Ү8ǎ%"U m4V(K =HMMţC'(yuk 1XN՜aI@7qqbյ055ٙ4#GR^/X1ШqՒvRfbԠY,Y˖W"!6._ӧlݼ3gqftjW;1crlq:yfΘN:uر{7\tѦm|]|,<~̡C>5AA[R>L]cDP"jʗ/ݻ{gAן9s3uzn9x ^#٫7SCܹa%)ɓ&Ѯuk}|6a" & k>؉͛9hoVgg0h׺5n}>KJ5?fW,-hԨ1K.SxF s3sf\N=S)UT˛^^^QM6hڨ:.qM6$`ڼǑ60v[ӹCΆQ =y}вys>؉=T)^G:wm4iPö.} Cv&%RGZZZj_@.]Ć 5Ξ;ϼysٺe3͚7cժ>쯾f̘t ՅRr?ML$x:jծR$0 wiV6mʭ[ *;y2}o_qusorǏ' (woQŦ-[9v|}V*=MW*ԯ~~<|Pg>mQ>yΞ cæ͜9w>_q18+cǍciİ/5ŋΚ9#?[ǥi7mLXٷg233~JJ%g_Ξ>}wZCȞ=:3EM (et֝ݺӧo?v(괕+hԨ!X[[1ӓiȏ; nnXZZҳGܽ\fۭZ$)fMЬikߎ!!̛?IRrL77W|}}9 YiּX[[1v8N8w̙T莥e9{zruu/~f/.j[,IJpvvRЬiug7ڴfDS=?g/..:r3+|ᇤ1j(ݻwyMMM!!! /i!{~diTT[[&Nȟ] 聻{dݝwy-%x&T222_ Zys}ܽwdd2ߨrʑw><<ާvZD~O9$Ic+CJehټZёiӧ3mtذaf`u@kh4g8[[J%fffy322y-Yڠ ֬ޞS;?5.}5›KZ[5»&iD&6,,; IDAT,ܹ3nR-\ XOm+rq~ܳ($);,ȎCʕ*7߲`|RSpuu%2"R7a8nnnZ߹͚9.]gO'OfԒW[2XMr:sGFs8;7|:ZXX>Wݙ^]ueEvw&Mķ_NswwgO^N PBOqT:$&L)L8Qw~%1D (dddpT}ӱҒV\e^̟~g׮x}߹IehUpqA:tȒ%"*:KӡcGiiiXYYQ?b4sױS'-]BtL41,]D* "8x=!!{#5-S2MٳgIHL`ݺԭW/_*̬L"" ^͛女gM(ys,gddf,UZ^3;ݿGzF:f֬t{ݿ[>CiNV`"47Ԡjd,,,U&'NPMt%X8%<2++ZoI/wlgĨ<{1y%( xt$;n}!Z8Y<)tKIQ ۺm8#u(c ǫ2TpDESVbFPHHHb1vkK mW__'M-H۸5x>W]/:z`tUl6zwֽ]IiX$R#,;,2X0wnt1UQ-gaƴioۆ4i>|XZ:_i)XԄ3gΰa&"""puu_~|QntިZE} "2O$I,7[6{Wű6"I/vcWh5|Q`LԠXFc^Q-4vSވ-&(b lQ r) ;̻svv: !!L8DjM3/ǏYbCdRs1bkkKF cJѪ*O_O&Q~}m֖II[6ma%˲]3;qk@Il`0?K2rp4iƒ,4ZB.7_mѣGw BuݧOۢy)ܾ[7oߺy[ E9jLػg7=b,\ys甲U%9}cee?ٔ)J43I\veK9q8JZliӰW fco|)k׬{4hЀϦrcX0*Ud 6m@ZZNQ+L->!~}iժ ߲u_Z.#Gvܸq 6t,Jƍ3rpԛ3|XX$̤UV ˺E2۶me|jTo]2>bˣHy)t [@p WϞ|0Cϟs.ݻǞݻb]\m6|T\Pcb9z(..N.DuiH ǎ;`$''}Tq|èd԰a#.w߾Ԭ_N&崬1n#"|,Xb9K,agɺǎ#:66mgv]11\z- [$Ϧ~jt'OgMR)0ۿs:eލ- Ҵd=\p͛_=;/7oiXR͞3]>n֮ɑ7Ok.Ξ=Gd,bcQ*ٴKvtۅnX>%ng/ =zD֭ZXp!d,^Ēŋz* [ IKc(-]3g7NCXv 0ݿǚC5r8C$9s琕EAkӚ)?!--U*~ M5¢2V >ߟNO 666 8x233/{U(L!|g0%3f-yh8::牉 gggx(!#||iӐ|+++ӧW>v׭&ozv'9»>>4?iצ wqpp-,,x|Fj5jhcHZ6S8VO%AښnynG>|sa*UsKq0333X_<--aÆ&JI )'3h`fϞ txV8]h\]]r95-!#)(Ù;g|\}L-Z"z9q$;w2IyݛI&bmmMFF}+6\]\>c:noP3gy]o*a|V5xqttvj*rnݺ<559۩z,| IR=8~X'|y3 9\U{{y:u:O<ʊ*U,q+푉F)j:vE 2u*-Ԓ8E'bD@=UXi>VJՋM&GK&$>zAO> KKKXi]\t҅(7OH`℈|a}KԃQz,?HZ/];w_u_#)VAkۖhG:EGЮm;-ylF @l8NWQ@` W_ښ&ogӦǃαP-[)'D~qҕ>dbCJۯY8/Kfu>z7ldΜ;8`ѣF9sH@c/ YIMMzj[=@s{[ߐY{{.[4_g~ݺq=n߾%wwwԯ@pp/>f,mڴWZ A%ss|}}IJ?$7%ouk*[o[o3,@ppo{kjZi/C=ctrU2OE__9jq?IyPGupAc +m3 %ul+V6֌]677giKrU>951m̑@T) 9w4]p̑'n*Dzɻֈ#X`|W.U&K ][96$e%dfL5MtU;@Yޑ~7\3vYYlՊK(HE-YXYF!ec133#;[S!9*:~`RDPNPbT*qp7ZWkmIAښÉ)mS J")) ;[;-Igײ%Jٳ]4b@Iy# 222ƥprvζ*5{)Bz-}1} n޼Yfi%U^\uj֐.%&ҷw0 ^GdbD<$1'27 Ιmzr ?~$?~+5C#p|M>}V~.\`ȑ/ծRQBB%֭ d+׮]/|AΘ|:e2C ѣ\yN=oE^ĽwnMUԫWEIzٻgwi s5:WS(&tPNIc^ɜqceW7s}{#eIh2q r_[7ouk|Lr|ڵ`b|~eӹ|yve$4mڌo:D:utJWKN}MJfF&JMh%4b tz=FRI<{ysLJ>>̛3gOilhѬ⅋Ui۴]8ȚڵnM8yAפDG3lp||WQg|u/sۡ9fEr:wHfC\NJټqS6gZUakkKPl߮*I LZj!XZZp֮]G܋N;ź8>@۶m\rt}V?&\n}i3|X[}_ūu2rj׮]|76~|lmm͔)Ҽ?em۶2>b5k1Qݧii2h@ 0{m7annNJhР>JGxBƍlذgQ*4nܘ#cg7K.Yu_>, 7WW,--ȥ\`/_ϝcƿ3{\/33CaW*&oepy{yu?ПG- N:}X|Z,Ԯ)YR؀^%z*zoí[٣-5EftЁBFjݹsjժk --MKA>ٳgFڢRTRϟ|My3/Nqjj*k(Pgƍt 栜aemJ5*]S+[]nݳI};Kpe\]IKKcذCǧ~:W_akkKh4k&޽%b!i988UT1|j5u_}UѣG8::CMJ4F֭Y~\ GGG\©S'^eE_xqqq\rt̴wE믿׮)Y;IBghެ9ϞlѢV;KEOSAtHh jrqqzuU%_KUK M/\5QF;r@HLztZMXPlml ߿K̝3[>._M2\evBÝ;n EWG'{kdAA̚5Qzu[g=W"wE[CYpN бVl4Es}ה}HQ;:мys߻GܺuLɱ%oZ㮾,?ɟ~kbc 3FV1|0|0`K'7 K75e~5jDCt҅(RRRk̝7_;o|SRP*øs۵mKtt4wݻDGЮm;iVwӧ| -)))lLZ(>ؘh"g- 6,?dRRY0=z2)-ͨ۷3k:^*vq&) ř$y忧Oaee%iii,_"_:̝3u6ՓtQ}5& uL0˴Sydyx jٲи|!khԭm4Us}הիWSM=&oYO߾xzy1lPqssё+V7߰&6ԛ"LBʽ+@sĭŋP(@xt IDAT̊n^9\Iڝ;ԬQ^V ź8njMSgzÇ#*j9[nޞAAϲg GL ##CgS1iisO 9C2Hw}~< !99+ !wol|uݻ}ݝ~r~[oڊ7ho`ccC\b~~ѣF9sH@rttdH&ORIF۫/ʣ7]ô&2 z#_Mppo-?]qWT1.~vtѪ[j蹮s:!8:8LN_ٮ(:$7sKP9zаamFDnݴ-#3]=8ƚFiٹ};mZΑ[Gܜ;w.H1s`e{w9#Fp8\kKy$IF23m0<+͒v1c(;PPa@b (w a̖7fffdg+qrv.AERB033CT`ov%emmI~l9H[6P T*Ϳ\l`kcKҙ$<*jn噚5K߉:k Ahv@ T8r 71@ ܻE@ D@ *pACn@ pW()mFA#u222{ni"88ckmCNFPR.I~̌ 3kk2p-%Wlxc6EP9z0)oy Eډ[ׯceeCo\Jl!C9r7oߦ{ Y%( I+)(qnݚ=vIzl%m۰gFPT޹+4޹ Ъ )Ҙ]4Nk5@BB=FQMdTAɠj6}F>YQ3Tp+M<5o;p*L"RF/m9H*IvV6Y̍'M^eUfglMH!<5ԩSP<-γQCٵh֔}ȥK zřDQW(g:>̛3gOilhѬ⅋Ui۴]8ȚڵnM8yATн[bEt/yTg -܊4d9zJGź8Vm۶?r濦p$?@Ff&ZbP,--uڐMLL,ܜ-'?b]ܻw=wq 6lHٳ(J7nñ+qvݚÇu_Z.#GvmVGLfM\#&!d,^Ēŋz* [?{vkwٳ爌ElL4Je6r2.r G-cEn֮ɑ7j׭_=;/7oiXRtSمnX>%Kkg/^ uV>Ya2o(3ONZ+GlN9B+ߖNT@jT^oJjժra cL4jOLp,X˛'LbA8::kCVA6ȡWp0kbc^}p-zAfhѬ;t 55Z~wܡZjy5HKKqpp-,,xQ6T*U* &]|G#t-X`=*yE7p SIfA)ϊ<ޞΝ:i߿|{X6l8/;++k=z$=|uUM& aa!۶}ͼ 3;PyWA苯[;IBghެ9ϞlѢV;KE  AO...\ONݺ>kɸjd&]hd-䋕+OuUF3wl{TA9-n履HKKwttvj|~-^| *\]\fٽ{vbvo֒k4z:-k}xa>.>}.0n}S`y{ #%lzWaWH-ܦϘAPԯ_O}^˹n,5kۖ555&\24dTX-]# BL07oRV-> AHOO[`>˗р_|0`Vl4Es}פZ5 0ewbZk׎{jb]\cЦMkz){b|222/ YIMMzjnp^D2|H*=ӧ_JFTrn݆==駟 ѣF9sH@e1]ߦ9=5oHt^ٽ_H{-Knݸ{^;]|pE]ظi3.\ 7`ر\߳Pg܋ A%ss|}}IJ?T{Ui=cMLe  (G8՛Z~\2c3]:/\504iv;EUtI̍$c +m3 %ul+V6֌5JKnnnifgipU>95[G? RYڦ*8޹w ,b}hղ"Is5j0~ܸbJ@PQQtIh悇QIgܷߑÇx={ckkO'x{y`@  Ž'π mڶM۶@ F.Lð#F@PRhM^8Nm@ (yYL,i &A"pb@PȽptA WXH bY[R {'n@ *pAA{'n@ *͒bD@ *9řX~K 1@ @ *(pA$@͡>R7lTxNk뇅K~ ޹,+88ckmCMڬT ILuU4+mS~}thk+V6ױK|saRߠI(AiYU *M)W hh>)PI}5[fϮ&n B s)]BS.n;wDfw܅ tUQ 5$ԍDa\* q_Ő ]K1#3*I%^F0`H{nrߋ'2%"<H*udiăGtPbqZ.^"+bd@SJ*Vw(1l:cbOWjZ&V˩@ X$J1py>9M6ɓL2/bz/̱/0mf͙^c*xlp̰٣VO&O Yv,߳{ .zuɲۿfET@xx8>1c80uBkQ ^J g'gݻw}]0y S'MbɊԩji*0Z5 NܿWWW(Ο?G033JA>ٳgyjj*ki[٣u卻?6°>qp"=z~aFZvv R%F ee?J\КECШa#9J@`Nɓ4x0gƆt:^+}]hHLzqwwg(<<dmt4G;ru11`@~NwaĘ93KnO CV^ED223HIIe'OJ nܼA䬙{g@N1㮾,?)<|Eʲ f͚ɕ?3.^Ȕ) Tgjfڶ %_}u">ªQHU="IDATIz͚DL«ed^Ic0mf$Mx6P9(fz1yVZŧ'Ƈ}$,[)9j}z5~}%33aC>8P&M͛7UH+~&5sUX gfJeiRdn'\Sv6G# ;Jq_ܜ;Ӧ;F)lsX[R 8kT0 'xN7%%4+]cP&D2`]h3E@ (Je[Fl4f3[ ݩcB0S(/bdfRe_(J ( ,:8؛(ժpTw LB IENDB`kmetronome-1.0.1/doc/PaxHeaders.3594/CMakeLists.txt0000644000000000000000000000013213560310264016657 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/CMakeLists.txt0000644000175000001440000000175713560310264017540 0ustar00pedrousers00000000000000# KMetronome - ALSA Sequencer based MIDI metronome # Copyright (C) 2005-2014 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 install(FILES kmetronome.1 DESTINATION share/man/man1) install(FILES kmetronome.html kmetronome_1.png kmetronome_2.png kmetronome_3.png DESTINATION share/kmetronome) kmetronome-1.0.1/doc/PaxHeaders.3594/handbook.xml0000644000000000000000000000013213560310264016426 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/handbook.xml0000644000175000001440000004021513560310264017277 0ustar00pedrousers00000000000000 Drumstick Metronome"> ]> 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-1.0.1/doc/PaxHeaders.3594/kmetronome.html0000644000000000000000000000013213560310264017165 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/kmetronome.html0000644000175000001440000011771313560310264020046 0ustar00pedrousers00000000000000

The Drumstick Metronome Handbook

Pedro Lopez-Cabanillas

Revision 1.0.0

Drumstick Metronome is a MIDI based metronome using the ALSA sequencer.


Chapter 1. Introduction

Drumstick Metronome is a MIDI based metronome using the ALSA sequencer.

Intended for musicians and music students, 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

Chapter 2. Using Drumstick Metronome


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.

Drumstick Metronome 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 Drumstick Metronome, and then make the connection between the two programs, either on Drumstick Metronome'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


Screenshot

Drumstick Metronome 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 start-up. 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 patch-bay included in the program QJackCtl.

Drumstick Metronome 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/.local/share/net.sourceforge.kmetronome/Drumstick Metronome". The contents of Bank, Program, Weak and Strong note drop-down lists also depend on this definition.

Channel number is usually 10, meaning the percussion channel of a MIDI synthesizer. It must be a number between 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 check-box 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


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.

Chapter 3. Command Reference

The main Drumstick Metronome window

The File Menu

FileImport Patterns

Imports pattern definitions into Drumstick Metronome

FileExport Patterns

Exports pattern definitions from Drumstick Metronome

FilePlay/Stop

Controls pattern playback

FileQuit (Ctrl+Q)

Quits Drumstick Metronome

The Edit Menu

Edit → Edit Patterns

Opens the pattern editor

The Settings Menu

SettingsConfigure Drumstick Metronome...

Configures Drumstick Metronome

The Help Menu

HelpDrumstick Metronome Handbook (F1)

Invokes the  Help system starting at the Drumstick Metronome help pages. (this document).

HelpLanguage...

Opens a list where you can choose the language for this application.

HelpAbout

Opens a dialog displaying the program version, credits, license and other basic information.

HelpAbout Qt

This will display the Qt version and license information.

Chapter 4. External Control

Drumstick Metronome can be controlled using its D-Bus interface, System Realtime and System Exclusive MIDI messages.

D-Bus Interface

Drumstick Metronome provides some functions through its D-Bus interface. You can use a D-Bus enabled program to control Drumstick Metronome like qdbusviewer or the command-line utility qdbus.

For instance, these commands can be used from a shell prompt:

$ qdbus net.sourceforge.kmetronome / net.sourceforge.kmetronome.play
$ qdbus net.sourceforge.kmetronome / net.sourceforge.kmetronome.stop
$ qdbus net.sourceforge.kmetronome / net.sourceforge.kmetronome.cont
$ qdbus net.sourceforge.kmetronome / net.sourceforge.kmetronome.setTempo 150
$ qdbus net.sourceforge.kmetronome / net.sourceforge.kmetronome.setTimeSignature 3 8

Universal System Exclusive messages

Drumstick Metronome 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 Drumstick Metronome. 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 Drumstick Metronome. This connection must be done by hand, or using a session management software like QJackCtl.

Chapter 5. Credits and License

Drumstick Metronome

Program copyright © 2005-2014 Pedro Lopez-Cabanillas

Documentation copyright © 2005-2014 Pedro Lopez-Cabanillas

This program is licensed under the terms of the GNU General Public License.

Appendix A. Installation

How to obtain Drumstick Metronome

Here you can find the last version: Project home page

Requirements

In order to successfully compile and use Drumstick Metronome, you need Qt5, Drumstick, ALSA drivers and ALSA library.

You also need a MIDI synthesizer to produce sound.

The build system requires CMake 2.8.11 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 Qt 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 Drumstick Metronome on your system, type the following in the base directory of the Drumstick Metronome distribution:

% cmake .
% make
% sudo make install

Since Drumstick Metronome 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.

kmetronome-1.0.1/doc/PaxHeaders.3594/kmetronome.10000644000000000000000000000013213560310264016361 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/kmetronome.10000644000175000001440000001042513560310264017232 0ustar00pedrousers00000000000000'\" t .\" Title: kmetronome .\" Author: Pedro Lopez-Cabanillas .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 2009-06-27 .\" Manual: Drumstick Metronome User's Manual .\" Source: Drumstick Metronome .\" Language: English .\" .TH "KMETRONOME" "1" "2009\-06\-27" "Drumstick Metronome" "Drumstick Metronome User's Man" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" kmetronome \- MIDI metronome using ALSA sequencer and Qt5 user interface .SH "SYNOPSIS" .HP \w'\fB\fIkmetronome\fR\fR\ 'u \fB\fIkmetronome\fR\fR [Standard\ options\&.\&.\&.] .SH "DESCRIPTION" .PP Drumstick Metronome is a MIDI metronome with Qt5 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\&. .SH "OPTIONS" .PP \fB\-\-display\fR \fIdisplayname\fR .RS 4 Use the X\-server display \fIdisplayname\fR\&. .RE .PP \fB\-\-session\fR \fIsessionId\fR .RS 4 Restore the application for the given \fIsessionId\fR\&. .RE .PP \fB\-\-cmap\fR .RS 4 Causes the application to install a private color map on an 8\-bit display\&. .RE .PP \fB\-\-ncols\fR \fIcount\fR .RS 4 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\&. .RE .PP \fB\-\-nograb\fR .RS 4 Tells Qt5 to never grab the mouse or the keyboard\&. .RE .PP \fB\-\-dograb\fR .RS 4 Running under a debugger can cause an implicit \fB\-\-nograb\fR, use \fB\-\-dograb\fR to override\&. .RE .PP \fB\-\-sync\fR .RS 4 Switches to synchronous mode for debugging\&. .RE .PP \fB\-\-fn\fR,\fB\-\-font\fR \fIfontname\fR .RS 4 Defines the application font\&. .RE .PP \fB\-\-bg\fR,\fB\-\-background\fR \fIcolor\fR .RS 4 Sets the default background color and an application palette (light and dark shades are calculated)\&. .RE .PP \fB\-\-fg\fR,\fB\-\-foreground\fR \fIcolor\fR .RS 4 Sets the default foreground color .RE .PP \fB\-\-btn\fR,\fB\-\-button\fR \fIcolor\fR .RS 4 Sets the default button color\&. .RE .PP \fB\-\-name\fR \fIname\fR .RS 4 Sets the application name\&. .RE .PP \fB\-\-title\fR \fItitle\fR .RS 4 Sets the application title (caption)\&. .RE .PP \fB\-\-visual\fR \fITrueColor\fR .RS 4 Forces the application to use a \fITrueColor\fR visual on an 8\-bit display\&. .RE .PP \fB\-\-inputstyle\fR \fIinputstyle\fR .RS 4 Sets XIM (X Input Method) input style\&. Possible values are \fIonthespot\fR, \fIoverthespot\fR, \fIoffthespot\fR and \fIroot\fR\&. .RE .PP \fB\-\-im\fR \fIXIM server\fR .RS 4 Set XIM server\&. .RE .PP \fB\-\-noxim\fR .RS 4 Disable XIM .RE .PP \fB\-\-reverse\fR .RS 4 mirrors the whole layout of widgets .RE .PP \fB\-\-stylesheet\fR \fIfile\&.qss\fR .RS 4 applies the Qt5 stylesheet to the application widgets .RE .SH "LICENSE" .PP This manual page was written by Pedro Lopez\-Cabanillas 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\&. .SH "AUTHOR" .PP \fBPedro Lopez\-Cabanillas\fR <\&plcl@users\&.sourceforge\&.net\&> .RS 4 .RE .SH "COPYRIGHT" .br Copyright \(co 2009-2014 Pedro Lopez-Cabanillas .br kmetronome-1.0.1/doc/PaxHeaders.3594/kmetronome_3.png0000644000000000000000000000013213560310264017227 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/kmetronome_3.png0000644000175000001440000012000013560310264020067 0ustar00pedrousers00000000000000PNG  IHDR0jsBIT|d pHYs+$tEXtDescriptionWindow Class: kmetronomed>tEXtTitlePattern Editor^. IDATxw\UϽ Q ^3ަVnsoˑҴfG{gif=2G **Cepd\_S#y9*tYixB!YRgmU}SQkY_C!Bxm4!b^Z*sN)S r[:V!"Vʊ("m1s:RY8;J0f((JBR@!Ȁ<ԼJZڐGѐGPFᙣ3>[*9b6@N?ne|FIhX:rE@hXr)K!dy'U2;%yb`+% oo6lڂ%e˖`huZ>ۗzu뤹!y]\\\QT(\RgϸwvyJsB7Ov9x`!r<Լ)`T%*KdT#5&W..]BTT#?NdT .#G;Klr2!Ѽ zXZY0JE^gg*U耵Qy kۮg{{{*T(AϟߨoG|%~e`#R睜wV1e@ZΣIF :08p"_M\ Nu5gQ tPbE"#hnQDEFZ{*$xS\qk7nrϔ-W J׎[Z a;L6`=My'3io2qB_&نij%@rO}9퍥%kդ{>L2U*3ߧ8||p2kpNx{ӰA 9 DEpX5y !B-߽ ‚>}s=zĆ r*:*U0888f<$A̔; ^ݺ 쎍!g d}r`>ڶkaC.^x;%K2b/^d9-ܹûロJ6xL%&L@V( -⡯/sK qc5{L"6mfΝ3SJ/V%PPA|9[^_ ?ᯏ’"#_ϟ?J/?gͪU+Wfӧo_qߏhѢxm?ӑ>}?Ӌ_lIP?b\~ðkxnxi3Xعgٻ?+IK ;vϏ?bOx;vL ͒y'5bŋӺM[.]NRy=BBB޽ ٳ}+[/jøyӧM#22ysr⯿4yQmX&WFƆܹsP|d+XtilllBbit:PrY[ZÇ)RHºTɓPt:juWx6Srexxky1*A x5#}?‚ PA@F1pCƣJvĉ~tҙ4͠q,\&:_Mn^\<~\o7~<_m ,ɝw4фrYmFΝDܑky'7o5k&s&::IΎIPd5,Zɓ&޽[UjCc!/2fժxmH2eٸe+{tGX26D&ի`4kz^xiHgLb.!^_c@ؤGep0aah"#ҠhDG'>4:hSC(ܿ{xF9sԹ30^z`TR */;̕k׹znʵ $.>EIjq툿qssCg__dI jě'N޽i٢%A:$;$kc^Nkf"B37 (R0n*۞/!:*3fp7{;|DEFՆɎ4}wޥzh79 i&{&+ֻ<}zEӧOɅe:I 6‚ g;}qcJ鵁@RvױܹucG~g`L|ZfuȚ5kTZl5k kҲU̮fR;DDDi>$whH0zZԩ"ywً M4O<ޖ~deRmذa#/]bm}V\ Ғh°5z,RQ[Xȕh԰ѯI,Mn^FbEQg_ٔS'|!|7PZiEQL$<, sW%Gpuu֎"E O5m׌Xfb o?y"xc.yKh2'[I_M%]Hr ) s6/i(e6KW.{$s<ԑv/ [KTZ4hؐ$.>kFōXR=bma!D'~td偤e&&>) `]Hv;DOB$=M0EFFP52q YcoeEp!Afc AmO?%(9_l5ZJ3}̞^^.܌9f_FY5%3M"! &rcD^m MTLҫT*jj*~ڱw!F ӯ.hf\ˇ& 7n\éISVMSƪ^^)y%ӯd]Hm۵7looO q4BTk`Q%3>z\6X[+ ˏYO>NC'(3 q)X I&WJYiח.s/Ԯ+wvxW\?g*6Rl$VIrŊXXX/իUcA+W. :WX+׮)e3rR܀#88{0ofϚU !D3%$ʸ>3>:VZ }WDūyEQ+Ҡj ʜ7)S;ޞW~4j8Lju~=?t("c -ýˈh~9+"/4iCiZ\E1f`Z *]9#MR׌{tڕ{#~a&={[|?W37m۵Os}1MPض};~FXh1Vmמѯڵذ_~aԹ cƌ&iVeܹԯ[U`Uc`wVH<3%իTN_Rj(Q+W,FTTFc}mZ컥hP.۶n5EGG3udjVFj՘:e2&iElK,EMף&"ZKx6#c`&n| ++KרΒK W_I4W/G}A&m[Bū[鴬^-[иa&7 ٘YWnwSgR@Af!AzGGGڵ7:MժU/os]-]b;|>b$WodOx!lg37odْWi_vɓޝdc.EJ6VKhD4ki{} FբQ|,Z̃>I11t֝_wnn,ZwKޞ3g>}{{J[M7qyV^þh4,_,m6b`ܚ5ԤܻvȠ߾Ky>rt!pýS5kd}k\x9GJqx /^j 1,:ndۗl3tϏ ɓ ⸻9Æ :uȝwx~ڱi)^8|7yʫzccc=cǏc^cAl޼ V_ة!| @|7Ń=v,,-y)*\Ysd ,H2u{6I$ʹCǎ(P f;V@>f U_m*4 Y3h56&2q7<{u6jԬy6|8'Oz(z1w g.=B booǨQ8rFQo֔Rg.ZM( &$$GQbd7kl}sqq!$$9GZ30qAv-}ܽwPO ={aÆqs\\JBa???J(dؕ+W9{_˗1OִxAxŊjժ| ̩'x ?/^'O>Yŋh|dߴ)O>MD !L# dͳcg37|z:I)M2:93o7< ˋL`ܼq%Ks-Bb jz-Zl( N ڥKrtc LZi֠QNyP*);I3 č1Mޅ4{lz_֖0zmOj}R\]A~7dWP!߿O$D8bPF򕫰'$$*&!L z||Pt 0UTkע( =د܅ϟ?A'H+0֮|1jb/1jTqt:a7-i+3S^u˖8'|>㇙3#447GQҠaC؏(4l;;[EOXd  LPFF+Ftlzѣܜ8 /y8vA8ܘ0yi,2oRa1al\JZyoc`FFF'OlllxK.KoZn͒%KErf͞CFdd Lݘ<[|||x%S=ñ#O<#Xv3gəN;oJ.3vaaaK:Ik׮-*gӧO)\}1KJxD8ݻt&<<_2͞;iS=6dn>xsyw~KzoаmZDЮ 1QҥY"_|O]mזG4UӅ90[{jrr#f *cz4Zm2;vĪU+q:TVɓ'L8E1q7sqWQCx5 wSVQݰK.T*7ǏSX1΢%sǎ}vqf#&Y8sUjiRG<=)[թZٙUtr}4q~ >HhH'O6:,k^%jyFv1*h).S-xF3|]8?2j  2i`!Lc4nI򲰰 :& H2t N24ikǚ eo۰ޓGSF 7G47 M OO\ʅѣ 5kC#h:kJl ??_sf1.GDQ}B\*U2I[5%nXg9y@vڵkغ}"H# ɈozEЛml ~M._ATtF8aaah4"i9m*#~uXcdI- ˴jGROpX1G_r ODvThj5Ӧ"[!r S'H1̘ޥ3bH>{3gw(>zPp"9]H1O8NG{=n)6}´e[-g IDAT {Sӯ,Idվ.de|$j Z' LRpT :$a9xAem׷1j qʼn)mBO:S܍VtO^~4kerŝqAvoVQBwVR~풞r&ؒVQqrʋVd>o:ZV)oq_Θ~8d m_r<vBXygjRds*V Mo^իWwH6kӯb Y7Qc?,9Bd/^|8{4ϟ0wur';PXdH1Q ߅$W="G+QF~~▖ɜB!rw!B!i 30B!9B!rB!DE V !BdgqC$B'.$ I!9@ܘ%Cx)"B&TZŔB!0B!D{ `BF!9 GGGҟ:yM7ru]Æ٨ :K.֎os˖-ʕ2h;m۶Mw7?~ pr*U0jh .dTP_7*Ν;3F_QV,_{QTt؁C_v$HS'=qcmՋ `iF߲e3ztχض}; bi/?NKs:x _ƎKVػo/׮s.3F2wKfמڳwJc/ZV[شyCF߷oϝ˓9{,0:=$Lf`Db)}\pg}>%RK$ܽG6mdtz֬^ÂE գkRKڿү]>}zG`ggd)i|7mfΝ;_@##"駟Vzү\]Ph$ۑZ6ZEBh׾:wFVSHa>nFCb('NPdI\\\nzزy =ztGmJzݽgtrʖ+O\/_v'k`fwYh1OsF +Nw ޽Ǘ_}2>Fݻ,^???FiT/^u5*Yh{Ғ]:hts! âٗ/^'O4˼/]"D%$XD*8˖/gƌ)S\'OnvʶmM! ߤ);!f-N)0E߸q6xm`!II!kט:ðWϞtD}{Qz5ӗ(Q7N-J(D/Sl.K0m۵7looOreg*T(T"AǷ")? [b;wdO7oŊK2NJzE… b۶mTZDM >7kڌ5:iݧ7EѣG,]otZlr %˨Wo@{ULsz[n[nl߶6` rٳgٲe+s1:G`u֮/_..$261 ;gv+2C:Eiִyp#b)ʊ1}/C?$wܩ_ӦNgg'ԩ7N7IK/5닫+͚5O>FߪUK>yB~ԭW7voܰ='RKгGOޫ_3Uʰ bL>Em6<{`kז֭[^8,dooONؽ{i'Ǐ@ƍ߯VVV rQpa^qvvÇxLƚի|2?߇ɛ7/ݻwEar]d#G,^?6RTq&4n$: >>i)_?>/nN D…at׿eVlŮi?P{ʗ/.0!!!۷%J}|||X{ر޽{Qf ^J…9s,VVV={-[pUjլ XJt???y5 C.][[[-URhQ(UN(?7-f,ic "^6PzӋd]H񹺺RB'M7fՌ V^CƯ&ըQ͛7ӣ{ÖUӻ!9sѣbߩm:wj*,kN܇Kw{жCGI/%}M_RtOKӜ&nbٵl^3{==5K ְnN5k`5TVjUY!N:u SHƤ8:UB˒KHÌTVjժ0ݝnSPK,Z~7qFF-B)nĒew!7G[Rթe-97oܠoT([:5kc,< EF/c'n `D%>>'}ҤQcv¡}c@~t҅Sgϱg~Nu"+C!қܾiԪU <{ҺMsWMd3t0:tYK\+a,e~R( Il{zz٠A4j *Ą[;NNT^ϟi&ƍZHrC.s .7mfw>m:}?K…Qdnֽ>t4&Mlj #/cK S?%w;>e"Ruq|>I1Ra])ϟ>}pPqcXlS=L8~!zjhc_Sꈘ:vDR1Qhoߠ>MORx1&N|ڎK~#g>q^2Rxx8|ED 4l}{LWou]Nq=b9x:v[6^JE \H޴iS6mbBY2Rz9d PlIZ!"ſ L )I!w !xčY.$}6. 5c+}OuR1%::ڄ !ijyF\(euҔTZ%xf,!ѺH]df&/{zF3Jb'6H5nJۋ.jlP殂LvztڲqQcn[ìy$z4"%ן_6Nmc_Lx!⧖ytoܭ߮;3=^K>ʒ50TsuDR錪KPǜ/]D*S}VL]B!D=eɃE-f`:=Pꌪh׾=^*Udh4̝3+ KjY)\B!L&]H[^30|yˋ㏏amaVj5U*t>:RVV䶶[>p@<ֈDGGouzvWcamm 5kyp>vDQƄg-ӕ3 !qYjծd+V5* B2 ̗GSvBJBͳ'U*>, ڒ\ ˜ y;ʗ-Ee˕c1A/\ cǎ{nL9?iP>ާN.T:y+W׿c( !`ԯ߀rrF\3o昁j KkKl,peZE. 5X)VGs+./#"pD yp~ڴikצM[8@3 *l/\Ƅg?krOoVZS0B7ظi3vv >֙VY)ރ2(3܅48=5 Z`e‚ckmIXY{;Kr C=8}4ކK?쌛RdI|}}bGjYIQLw0%.)i4/[Α0l0ѭ;ΡXbөCGۋ <`ql۱<===l 5j@B0qhXcƎeƍQti5! 9z(tу˗s7>Z .Q&Ǐ1)U!ҴY3VZg(šUhڬej{kSwRVn*@_ӾOx1ZZ`cBW9E78i!/?B-9ulU6/ hyxO>cy³r3%qyyyzXn-k׭;xyz( uP'Q Mz͛ԫtXje̙,YC?Lzu3{!sz=k֭ϟOоoHΝؽwvŅ+V$[7eBd/Mয়vRBy*Wݻw1cb0G*n 7^FA>?:H6m^ߪu+:_? .L=oj׮g0_nn|1z> @zut"'ҵ+'x"uM2Uf1cR`AlrУgO!ÿˆ/F&HEɕ+vv Ι3g9Bc:p \:QVQ_Bې>[Z,%JVr6lx-N*UB뱴`̘13ޫW/C³b߱NI3@@@\ a VCJY0o>!\~o'MW^r f|y˗\]]WJeqt7| **9q>ߺuU+WqBBBPIU!2sXzM50W7sR^B+J6s$|٠NY1dž>EQH"ٽbkkK2eؽkŋ*<˕+SԑR5|.xUǏ'2-Zy&|I&mB{r fWf ^1˜oS^+Թ(Pf:emMT^m?m͛5gɒ<{ϳg,Yf͛kש[Y&5kb-Ԯ]'zÏ? o#x1f6̤_fYl9lᑑΓ\66}{jj MߧOކkf钥ԬYPQ:+WvZTw7~,k׬cO>Tӷ7K,c@XXXбc.^h;n ˗`T޽ǏOBJ,M殆`2Qb [̈́w$íϓL[paCZEw)srj׮Cu32=ZYYY3ьr4_5'UveB!oofurʋV bBVprku+{1ϔY B*_hogWX"kz^/Æhߠ> 0wBwSm)^pi?ʼn$89ށŊ$hmۖm&&W!r*UK3ʐZE(OS‹.SjL0~/]&444k$̭P殂Lviyoٸ!c;,?0kBoݺ " ڱ3C#%+4i殂BB!D#f~}Vm5{ÖG*P ,>^sono{ 5*d'(Onc}NI%nZ?-$n1I|ҷ/M5k.:x9+piN:Mr5rDVo5s7mԙ.  ? s Iruu֎"E gJm=gӦ͙RVFy:iy߹}Ӧ1UAAAxu6Vܼq6'xu\~d"cD N?G5 &UqaZhɓ')^/\0mX'Nz'Ha4W?z=7lҸqcF9ܹ[hXp!GҒ=zbܳ{6n$((ҥK3yw,ӓ QF*T 'h4,_#@>`aXYY6faB IDATdK>Z .Q&Ǐ1c^M5cU|(Y͚P"*`cn1[ 3[_^Թ7nBף( H]M.O >a߱};.\`ђl߹V˚5k|'zx_'xm?=s4K.?S^]̞l7oޤ^/QyyzXn-k׭;xyz]^jۉt܉{k.\]\XbE\Bn?JS ޽SMr|ԙ]7Gf""[62^)Tooo(^x=_~ ޞcRLӨA׶v7>9\\\3 bۆ={/0 ''d0_nn|1z>ltyˋի+W.l4؝3g$[h>Ё+op >ЁFʔ.g.&'Je:;u`UT0h CqK-ɓ''^V'α?xmM&YN@@\ 󻹾VGG{g+K -?_|dx ȏV[nj*n߾CHH"ϔ+Ο;ǪkUI3w|s{ov,3lիMTT45jxr5ρ U*k.ؼeGΑGQ=bKH\cǏ'72E\>u:|.xUy>Rǔhт͛cl}zTXbbrޫXdǘHB >bl&}*{gz@ZX2eض};<~Ǽ;::ry=sh4Z޽Ti $Wy,[@YlyqS+CQw>zN&<4 (͝ϖ[prrgPqN;Vd(Z7ܧoo.Yƀc\x1ɸƔQ;?k1ŃӧoZ!~ӧV߱ư| zLٙݻq$J,M&Womova dc%fBvpU^x͛0aނQ6%W?\I:^%Jdڷ7w҅.]$_CǎtEdƔ?[YY3ьr4gÚT nuj[mEZk`ZGr/{TVm8ZmUnTD"$$1{&s=ܹs54l؈ щPBCC U_^; 00xdQ+90*xxhԨT̙=۶=+߿; u3{-5usi9|HwÇL=[F떯1q<|?PUcjoſg xy?ͷkQo3\r3fd\oqYSBafZcO?ۥ+;=K׳G%K[o1~X {>tid^:l0~ >@Yv- 4`t ʔ?=zd,}l-^!05m*$Ss/) 4CѠT =5pQni( y4 .]bܘ}o|}|2]2`dĬFTZX1l=zSS\y*r5j mڴezT7nDɸgZ1*3ݻo,al %FmfSW!6S#G( '9s(+_cǏw^4h___"3xs{ŋ TZ ѨquuYlټ FC-puuAQCAi4eԵo5}`l %֪0Eܽ;w7xCufS_?D`N||2Sʗ/O|b.dX^NxML̗_`ɼ曺tL4aGCA~Wt%B"y5`L{La<G9c.DP0r0T (PL>`zT֭[~^z둖^ܹs1uby!M+Ԟ{ѠA,\@Nܩ^'ܱX1† 66k׭RUE1ƄB2祵M7a}f+_xƎšhа!ǎRJE_XO˨;Mc{!5m!YtLNkg-[1(4[|i{}<{{~yY>Tdeg2DQ*z`FQ$Kg")YqcDZ`)lSXt݄Ο_det(|o&e3$fM?zI'Vo%K6@whkۏϨ%JХkWΟ;W_pڷ};§#r/x*i؞F-[bܽ{;w0{,ZjUdetX΄# 90vͤw~㘅 r ,ovӳ+W`ĉ̘93x߿uygup9͟fQ"cT}ykL3NDO| C%A ]IJyRBa^;P(HW(U,qfͳm9e/~<///4l|0|(^8QyM/Z0]ڶ>> /۶]_^S>~2':Eǀ ; ˒϶i@}'v8(-7ÞjN6ADD|˒dt}ykL>tśhE_XO rJ]ܼyl*剛;+U4IyB*UF @5iNNNoy뻔H*x"^^^FחWƔ/j1kL Y3Uv%mN{1*ɓ9}Wgݯ}ܺUkOa>}FSGִeQR%>b8QѴjט2-1YFԫ_)‹,,yErx<ӷ&DGMqpp 00XWjq35j`az͞=|k-_#(q kSjU-Yj²{:d4`oȇ wl7ېuǎN dC>XܹsͫmZn1:::Jhh+޼BaZi/#;fΘIwƌ3h֬UxH(Be}2046kJ޽-Rl-^!xe؉ˣG iNBEۘ娦ǎRcIII)∄tB 4[˗,w[C%vt[Pl %*c1$t/35kX4 ͛LRț*=!![E|6m̔6B!S!coߜDtЁǡh4\>}{ $55U~%{ރoΝ;zz?aө3e`d4MnM56Y–e.>>>ZBA/i4[?W(Cʖ-+}zf޽H^xNNNgp0G͵>ҁopmؖrY?>}֟Nl1K%Y>uwwwp)Ke4[lzZ0,mȣG;o>-׮]cP2~e:s,111w^2W_~Xbnnnߏ" &G-(W4fL_30d ۵'ORJ$%%N@ ~؈.\`İ\ Kr T*>#j%eRRRxW(a0fUղU+̞Mh4̝=ZY:,zf /˨h۶-HۛR`&޻2r\\\wuK74VZ5"=|,Y/em>}A96 p9͟fQ"Cƍ9z(+Vd]8::g:t#GhܤC2,^+^G+™;wߟH0”FK"§PBoQ4[?'>zm~b }o6QQQ$$$N\&LKOM}Hɒ%)^8׮]#:z^$$$8i T*@#s`Lzr2J1}m  o Ս4رXC.]سg7Gciܸaax{{g ֟6o'C燛!!ofxBd!t _8):0tH2oi~l=~"B6^aauiP(z*˗#((H>A̛7'LTҼȞ,sdtħÆs=PFoD tPF{JO=.S ד6xlrr2e}uy|˒*=fڔܽ_ŗ_}As/%SN1|Y-+ʕ+~^4J^9= :9sqqu``H ^~Q4[?͒y/$^לBAoo0~ԯ__o_cKJ#rugaޕ*CD*W ŋBD ذ~< ...ԬYQr%uue-#R &Noq0kb̙0ٳfRvm Ge<[lzZJQho=X`!w\Ȅ u[&**kגv-hZnKoب!˖-~h4P~-[NÆtDGO'))d;tIS@ZZ:wqc7X66ݔi8qfѬq#OL tXF-ϟǯw7j!Zjca̛;cRlYt`9|8C^kAA=t 6$:*YfѰQz^2GRѲUKzuץR`\|+AXZ*\`kl=~Kgke4`p!;aUްa#6ldGG'BCC 5^|yخU{wp L߾cB!lvڋ|9$B!,/B!(b D_7~I{삦:-ڳo/{eTRq[:$= K5stv P`;ȩau,ז8Fe}ApϞ?}* N'ھنo=zIyM[ڷgeze_>6my7lgܺy`On9e߬IB->mT&Msڷ6j|&EѰt¾KIJٲyMkkr2u-F}WѣDDEjjә;w.}$$xc}ze~vz7n:9s0͟[|`מڳ s5`##ᇦx|t¾w<4S:׿}]c#--9s{n `aL^c䧟~buܺuUʠAT\lj{_zèESNmK]M\-$4:(۶n`0h3'8(8߱T^ mN^CK>_؟6ړxFjj]czt#sh,}-lظg0qe&ƐQ=9s{eՠVkP*$x?0{lΜ9ݻwP*z1<O^jK_{e|y/l|.2"Ͽ2YX[~aݽUe)FB~1GQti!zDŽ R2N;Ybڂ'rfa ǵyHH*=^.]K;fߓ1c½{tQ)Pȶ/yŧP(EwBPPAKb,}-]O]"B:w>.quuUn"F͍7([oZFd sBsk >CL4A/_x-]W뭉Wfjj*%JĹxq\Yՙ[9*^yxxwÏ>tv 1!$3@LIIm;|ҥKsU*TXxիVQ¦z'0BQ|2+V :z:}znݺr]2cLƍGҥ֭+u)41(t)))ع=zl,]t>ݻ{kbxQs0kyW7o><y[E$$$PbESJl߱=   Կ6ObKڭ.aF4lH/o@`.=sJ˺stY5 !(!*uʜsJ19qҹν{ln2:C!ukӮ=YBጜɉАBC2&˯Z^Ne܀ !BQs9!yQϝ7Ν:yiҸUk힖B!l*϶14QU}#_c祺/y܉ҭ{|j2^S;_yrifo@zZ78;;[m{{x*\BBA|bYW"B*ӡC{)u!"nB۲, IDATq߆[mڢ-[^Z-B;bW!>|Eݺu֭-B!H3tyG0(4ur-VZ% "$Q !Ysuuӧ-BAUWԣ;3%,l.=--11.^yꅣc 'e߾AA=ذaxo؀3Jڵtdž (ǻZ?~ p"t֕6oiT6`5iʞ}{^g&MsL3WY,( q =jhQwQۙ Zx§M%|TXzMy& '88I'suϛK1oڻO/_z1} ]ڔSڭ+V`8&{g^f9B̚9}Z: c{!j|ɍ7s5oΨQ_oѣ{b Aɒ%ikDFFѣ{w3gݧJn\۷݂s7괴4fLZ:CȻ]1q$*UDRRᇍxyyqF ի!z7mFX|N >ϳbr(Ψѣ[n_B6j|___Kb7t|jTdJ*۷u 'ݸqC~~~\5nrss}!f}wlnw/XrW͍Q^eI4`p9͟fQ"Cƍ9z(+Vd]8::g:t#GhܤI mznh%''v:vɘѣi׮׮aΝDED2oAHLf0쌍!ըYÇ^ti;C_|2eJ<ɉ߼yt>Zj|,_~}i>> /۶иIc`=t҅={v{4V7hڴiCjj*=?w^s'TQҡ%%UHݺvee?pT._Bxœ9sHNN&999s+,zj߰T^Jf{I'$R^hð;6ͭSjU̢K x{{nnnݺ0&!ТEsrlH@Yf-tԉ%ƍ7r-)*Сf(3Tƫ \%*/Fɉ *ay\\\Y&׭rJ8::=[=k ! !ڽk \T"̫uYԯ_Lsrrb@ `z˦+Wɓ~-tv@ۼUVzwNPpfϞÇ>ൖCaÆDGES~=@C/3k,6jbȫC\ZgyJڄbun=}G/t %44`j4U{;ɫz 6!˓ B!,.B!Bȇ !EI; hs@3/U[-q^9b{{8)))Er~~Aa!f+{nK\p(Mġ˙W!jua]tZzMmٸAK~oLJOtB!\$^#B[w7jA˨6nu-̫J vQ-M#zo>f͚Ʌ ^ݮ]n֤){uN?/9VK$QY{ c]S_9vY?Aܸq1z [% 1k fϝg;K{R^Hru0Uc2kFLL }EU+WϿݠҘ1}֯8::pafDO'..ҥK~^Z͒ŋٲy )))+ dKЕ_Xb{bu߼i3vS ̞5GRW>#FӃM0@6j|___Y{mJ"4n;}4M6ۗuzΟ?Ǽ7=ˢEcm+3ןVZѣGd՚դ3w<]EIH'f"͟}ŚS\9/l/N~֭_3gDѰknvͮ=s6kɀ?흥ϿoI2FdJ*eԱ۶nc¤x0xH>}@rr27oޤlٲl.M\P-$4:(4|?q޺k<-5ߋgEt7?ASmN^]o,}~KQJ.*c31Uzq2ek8v|rr2e}u|˒{7_xb_;>QF\rA%jP5( ]ޤle?~}g}R/k̖/g̙ܽ{Ri|Q0|ŗv[-GB2-"c-2//^ܤEgVxgؿo?1KڭGP ,d=ܿK0a.=[&**kגv-hZnK?k.B~gu؁ɓwtƎ\뭉NRR2IIDGMk- ?55%K\8W\e)z]ȱk٬UdD8~o,}~kclFiHQFùs00///3TR>bg옱-[ c{0{>1쵖C޴YSF}5WRr%s];( F˗XqA=N}ppp[9r8r~9/xa?e;ҥKӭ[W]{cP RRRرs{.CV]g;K{ߒ4dTǽuF#FQ\  fP޽KRUV 6aFپc1B!,C `zOlȨĨP|15T(f=c^rʦo!m)>ʜ7Fi!tFdž6e;J*GL!"?mchF2;n-=Φ),hԙsSnJ eR(8zp?΀i޳cIII)\\@Pa>/Y6B4/kȜBmN|< >L5^LS.&/SXuؖ$6hd!;ʭc4NgiJ7_BaSHok׸~U0E!J0UO\{`f6.B1ݎ4jl2e3ݨA/^">>,7a}oiگ\@a3х y4`˭i&zϟ;GwСCr4˴i&4m܄͚=_~%E1zmm3$A<޷̳ |ބ_LYs>..ts,b'N0bKׯϞ}{RϞ}{NϜA͚5?m\Z>uwwwp)K% !0q8;;ĝMPɮ?v|7{{94 ͚49sy' 6oɊ }o:tdU888P|y bႅc5i+ @ͲŒc.o޿=EyM[5ҽ%EӲU+̞ݻwsg΢eVf c�~k!W!V?FWMSbEJt=y&V,_pҵ.YcLjݝ w^[FA-r|rk-[b ̞;///Ene%''v:vɘѣi׮׮aΝDED2o|ը1c@D4W?X8*QTo-dh񒞞ΥK9H'Ldg#e~OP|yz׭gĉL<-Z~//l ;qڴiCjj*=?w\z}:pS:$,`�~kq/$}ځ\05J1ݜ_Tizχ~ )ի=ڵk͖Wkiۆ5xLN_z777^eJg;PY,*= "󴴴<ʩC=g.. /[8*QToq_Shy,bg& ρi׮}aH_4c.^p~+V<;vRNls6DTׯcuw~1fj1kLܹÝ;w9cj6LX/{[ %:vfK[h xi4f6Ͽ4hӶ Q$&^ΝDGO+˛p~Yt^KOWqR"˖.gUg;&VfMVZŃ$&^fzr+3؞͐)9q87YFLnOvxEkx^ZĮY/~ue'[9Y+U4 .VO@*U׾C1<7B4` #!$fm s_d/ !^x"Q1L_))tP 1!¢2;P43Mݿ3>4ިaC #/BE6&/71q^ɎI 88f߯QJc^~ʧ#F +VGرxb϶hxeB!? le/_8mx'ᇯJLh4JohԠJxtP[m@DT4nDLBFL[-73{º#>> !VCn%`/hN*TQp"> !Xt1S!2J,[0zjw3/^d-rI8)*B'B!(6K淯̥d'4Rh/q˫M܀Ѩپc'zMə\&\ԣ;쌟B!,Q5HFRC#P3ŠWU(@g#GмY3]RJt !Bz`VFdV2#(pP*:i"5WdB$+E1'ZKԏB 3(S\B-®h}Y4 [RdP:JCr~L ƍH!(rҀ1FcwνQB:F!|/[=U(XɒB!" 0#_Q-B!Ba#BS ?{츙kB!=d6Z~Ku_4wB!3 YɅ5B!6Y2UHB!m+B9$]0B!~i/#B# !B؜!$AB! !B؜B-d'+'y폼Bkq+ ! Iw!mB!l4`Bas^HB!z UB!B!lUeB*BQXU9Tu`Z!BTa:C2dB!li!dY2BB!l+Bd'B맷B!m2F!–d !d%;!B"И`!;{"#))ҡ ŕ z|^KI;EmpՍUX8! 'c3p'))ɬ7..ἐ@f"LXAKT3#w/hXj'OxmJ(RÇ$&&믿aΞ=˻ݺ jޫ"j$h4v˹<{+4oT1BXPFBU*V=KhӧN7p!:l]ﺲ̚9w߽{ӧGI{nMRhGݳOOݛW_}jğZ1ǘZNu|َׄ,Ő}Kjx7 jUƍrJ4iXW k{zzR1r$?:ޫYk"IDAT3g>9fs-,^ǹwիW' zйS'֮[W$T:DL")WIÆ u;ѿ_?ʖ-KB6m=|cƌeM'k}9rsquu~|A/܀1[Q(ն-={!uK^s90GyE/JZ..b ^tܙ}M޵@u5j5׭r%2Nr%֬Y;Θa&jj׮СFgQtiVY eʕc'NYlPa6CuZ"ڌY)-))ŋӦMʕ+;vdɒ鉗]tDO$%%N؉lܴUϬ2Ր[nܽˁSWWW\\\r<NBQxxx0y/Y{֭[?Hzߓ˖ҫDDFq9lĖ͛=k&+Vdiz?oʓC֭/PLںrqF dDFFiyV;NdD88˶_~)P,‚laiԩ|4p xxx]4;1 0Jco>ˉر-[zcǘ2u*%Kz/ru?G~HpϞ4mÇ8&FV:?dH͟76BV1r$%J0*_/d\qgyQGSzu^zEuY`[g^t4(n"88eRD 9s 'ou2"((֭⁌W}֭>pQ>tt5jWGT*ؾ=~AכΛ)]t^kF ."OgϞΝ;ztѢEܻw[nq=T*L4 x|NϞ=/Ͱ)^8תj/YĤtɘ٬Y3qttMPT4oт^zQt^4lЀ{k0rĈlǻӵKzKoڵ?h5:L 8yc?|ŋӻ|_ozXj5m|1k^.*$+TwiXe֩!aܹSKju/ʴ420_~5{y""p!`61e$=J#--ɓ&ɧ8{ #8{Lo钥>tYs-1ctÜyٱ75kǣVkr3<ִ[6ߐc>s|^.舧'899T*uqqqL0p޽%Jggg.dܨnܸɼs3Ӈ ]mV}|Ս6m۲vݱVxz2anW\vNҸqW^ҥK$$$^rbjXlW\Vv:au֑0q".\`L'gL6KX`(p@F8sܹ5k_ժz۵cu+VбC{c 'Qy||<5sc-[@` ?ltءH?/OnqqqT*W^%))+W?ʑ#GP*899QLbR]Tw,cǍ3Xz䈋KIw45{`ڵ=BQcv~mxrsȵkHNN$&&rusxO%]bW_38pnܸkݻ}PLʔ)C>}tZtҔ.]z70͛xxxw}|2d^zٲe-}8x nTPs9ΝGh@ݾP+<0{,JMM;4kJּE n߽MjjCB*Q$_M2e3v,onUQXvmy Bڣ<{*͈1bgܼqEg3k8ZnhR< 2z^Oset%]\cT:@RuϝyauZۗSw...7X) JFRq1.\[TeʔAѠP(tǩT*>b0'>uHfj? ~~U6 oنÇ6l:7 $&&re(W@sI߿?of 3n\enܸ5fK7ҥJqmtn߾qLmߞ B=w2o^N$\wNpvvՕSdI3cΩ_knGPOwҥzG˔5իͥf͚8xvo۷|UѣGH~vh4|~OΜ9CjܹTRE'S'k>)˗'>1 2oJ֛e3Tg^yѰL'UP،/O??j5xxxd,30t(xZMrr2nݢbŊyeMv;;9sR"ӣҟ{1ctzɭ*9U[RѣG899~g=/}QWw~KǎQ&æMTVMŋO7o΂ `4o\/ 襷hl".]:ըx{{SV-+VdL5sw0I/ƍafkT[dɒTL[d)oV<}zyYiC⏨*0ժ}tyꚱc e]F8e]˥xu+T*_F.P]_;v$9zvk;Na/j߿ϯ;w(Q.Syٳgq꯿pqqK/1zl͙ÀP(2Cɴp{_>ܹܽ3 ÇHJ?`ܼҵ:':cˌ)^֭[ٰa5jԠx(J~mu_14f͚uXϿۻ𨪻{'dH E $% T- ^ "eyY@ѶBUh &$@’%Y r'~ggfΝ3'73gߙP@NǏeKgv{:cs8-4;;ݭk/f`Z>#YfǔS#FDVf&*++yGƇ|fjnYj$ IIi\hqqq2y26oڌ.@e>oŤXg=tv ^hO>9AK1e40_A~RϪ;alJq/Z7[γH Y .ٶ,~}Xos29[0t0VZ -0yrF۶YMֳo9"^OIp)!Cn-`iXrEFv8_ݻ[11vXt:sXC⨮֭[{nݻ#%qZeElقW5Դ= gΜUݦ]:w6ϣ/"ϘeKT}_?ڧ;,:́k..ΡavvUHT0} e$`J|2_ g"ˈAlLaBr`E_z{s?>Z-!"JKKqu`t(KM5@jJ DQibYMڃ > ƞ\moyq/K$N[((8YR aO_8ӪU+G*L,E55Bj-9/QOѿ?dΝv + Dc|#0A2j-RSSѥK<9bԷ/zVB e8<3_wĹ]ZĄtxѐچgڵ+Z7i{'Q4 .XI >>qb<$IN4rh+.ƿ˭%]9%]qΏtr8SP`Gn]Q1_^,#??Ab;ZTt:,#ug$4ZBbU%^BH^6.bbq\1= ˯:Bz}0z ۩ivbqqzN V~AgUHLjk* V(ٓ`<y S&v`CDDD!$"""T Q0vY .B"""""LdGDDDb391Tݞ """RBru-Ta";"""Pa<D0DDDLv}v_J.CQ?(]$ϟGee%ʮ9f-U(Z"22ǚ&!""ϑ[O Gt&*;1JJЬy ~=pkD5:0LKD=Y]]2K ]m Hcڨor2v~ BLI$"zU(e~7FQ/+RF)R_,vŨѳc6۷mk4b !yYQ?:7e ѫWo|wgeb ةi㱣G1,,zOxk7]l8btee7/իW~: ]>EitȎȋȊˆD$YHJM' ǘꙛo+G]Z(Ƒ{\ggcIh ゅgb藜>SZGnxV ޽lF *4ܫA"o_|yLv~Ԥ$uTUV^C̑""щ|$Zܗ' ͷ`b-5.n]V9QPdfSO=/v%Zn+VXe8Ǟ\$%%ᭅ 7lwlct钹/~Çamz|sݻ{ (v{eeeCpp0ʮ\oX wi}usMEbJYYV[|1q$NO8~nf&BBBc}6n4gXl"" f̜i.۾S,[mۆMq=iӧ[W{hg0DD=# WuXW!$Efgf9s.U5T|AcRIHh(]֭[[?`8unݼ Ezܹc}eDDF[RNOx_uJc#0DD^D99>r1"}9oQ!ÆCcɊUԹ+ @ =.8o?QoyVf&^ze,^QQQ'~=뫋龰0+F;M6Xj5}n )\6b p""o.>;m% PHDߵz\P`;ݺBldXȲ|im~{֊Rmćg}q6?Ո "118{םX;ϥ#(H=YXĄܼ^j/$^y_SD ĄۦCc1;"""r?\],DDDDp`}@c\.ȜDDD&j !,` !201QiᑡlDDDBFZ!$ 3DDDD.c-lT7=ԄB"""r.5a!{A6.Tr"""r5a!*I^8ܚ MO' "W{R|~Z_m;)Z\ZMDDDu*9%|w%OoK9CDDDuI?CwgIENDB`kmetronome-1.0.1/doc/PaxHeaders.3594/manpage.xml0000644000000000000000000000013213560310264016251 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/manpage.xml0000644000175000001440000001351013560310264017120 0ustar00pedrousers00000000000000 ]> Drumstick Metronome User's Manual Pedro Lopez-Cabanillas plcl@users.sourceforge.net 2009-2014 Pedro Lopez-Cabanillas 2009-06-27 Drumstick Metronome kmetronome 1 kmetronome MIDI metronome using ALSA sequencer and &Qt; user interface kmetronome Standard options... Description Drumstick Metronome is a MIDI metronome with &Qt; 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 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-1.0.1/doc/PaxHeaders.3594/kmetronome_1.png0000644000000000000000000000013213560310264017225 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/doc/kmetronome_1.png0000644000175000001440000014171313560310264020103 0ustar00pedrousers00000000000000PNG  IHDRSsBIT|d pHYs+$tEXtDescriptionWindow Class: kmetronomed>tEXtTitleDrumstick MetronomexD IDATxwxTUNO$&HPPi*X]AE`]ZU{vU`P@@zR$g2z0RfIy;3{rΑujN@ $R{YNKNN!-9Y'cDmy @fpbe%| =ilcQPZWZ@  $.&g,YC$=@rR X$VP44MC$$Ij@ %ǃ 1 dɟRUaPQvͮ]Q{&t:Q40ĢhPit:QU2 ӜxSMmCK{+S>_\ ZF෕+0-Laa7`rpB^kI4Maef`A0cǍmm1@sAOE MA/CKC0Ku 3dռ+k9aC_W^f<,.W qݔUx I\.N'.ƚɧ ;Nʫ&h׵1##뮿o0dP/_ݺ?٫W11o|MU^t+om0{\&OSex{g>ǠSN>n]kS4{y6DUUJKKбg֯騢CǎIMz<0b0vڵga_]w͋/DOpw{r󭷲zZ>c,Yŗ_{^C~ZʣYnO>4?$LSKWZM\͟ĉCoصk7}!?.^`>kPޚo:t_|ɂ/$///Xlٺ>Vso>ԖM߿"D߷/"]RZ+LG~ئTmmxٹc=,N_z~ǟ|264 0ǃlbpR~'`61 x:Uш垻ۍ|ٳgGKS7&9|ISb6ټڽ)zj>Ąng^ͪտi@h./XH=}Ƞ_߾vmo\veGt:_/XQl$PFRO6UUqW=T7pBο~!qqq̘q#vZX(,,$b[))* qe>%B ^W wޅw ?&GjeQϯx/b($U ~\Nbp7M-Mm瞻'^fV$Kj;ݻ9\u%^vin)jkMLlz_/s$Tӆ: :Y(>lnP Uv^/x.xQ+^/n/'hyVZCޫ1L!먪~RyW<#} Vر#99uB/}UzsNlٶwmN ꒷kʁssrHMM,} -QS*ʘ{$$Z6uWO>aXԼ6}Dzd )1O?`hzf.9իVߒ=y_J::=ޫWO2239u n1}͞{U#^l6Qx8TM ل^kPAQCY +nz?,Z5N}{?֭e^lGckRu;n_ygl󩬬dܹ!U{|3 ~Ѡ,NG_-ZWt=ĉyudɲ-喛f-1c0{(**bϋP.Us6l|r(Hv+']M紎qSGB|,0MGq&>d>7YY;aP^vcۉ KPÁ8dDlȳFp7\`2[غe]vAnqeʠAxHO`BV+70_Ө_p̜9ÇӵkWf͜7m4A*++kwn硇t2uڴP{ϴiP^yrwi3g|ӹ[Ö5W_f{= 0i$*mu#iS[.]qٷw~g6{wmT .Y{:PޑNA[SaСu}8:P5) Kqn45!:juÏ?㏅%S<]!{\EE;wl23plzlٲ E}IHHKAktR^Z 9f`4Ү}&⥼jSqX}!@o?5)Yk$IXO@eJ t:;cQVZRs+_s_BD7e%ŁIC$v`QZ\#vNvGr~CצDsAOlCbRNGEcۑh6lץ ^pIn~ǎ;ylg׮]$&$@n^EQ:z-[RYYI߾}IرM&AМxSnpz]zS[IUw6t}rt:&^u5O?Ngpp]w E$ ٌd0;wAoW"b݆t:zEuF%ǃv u l+yӆvvφy*^x^Lz|zsa z zbci׾=Xԇ!ͩK=6luu78$Iwipt:QN|h9AќxShpKzzce? I0  HBI {4.9T4ڠU[1pDrG@ K#-@ :]I ?a-TzmU.AK h[jAj1ݷ7ܢM]J%\卦쥥lܴJzCD,W%꒯-?ΣIk᷆2h=KW^'{t_#66ݻwŗ_m8E(_@D}||]=IMӘ`K/^UùX$)x^̙ˊ_EqYJ]5{.MU;wG o 0 Q,uWc[XŗqBqt -<{\~7߳R7o'V+W^y^pAC8D;n<7\=-BQUFT/9o[1s̝3Eɧ,XHdZ-LcԩZ)S`Y~Y 3f %%vqӌYUxGx饗))9Cs=nfveddf-[ӧLrr278=\YQR\Byy9۷;h9KءCܳ!V+z z e|ŗŗ@=kɄzd:=c|3cƍ~iM丟HE;v腘Aby鐚R %%v@~~~6DzS=v{Cϣ6Y*_rr2WOR_PgϞ<#h^>l=!FYP@JJrs'j U/7x\^/YYټGfΜS\\9s<6!!:G<ömpTTT0zM7z(}JJJ;ݐxErrsQh>CZH9s9{-"@gǯZ7n,$Yйs'&Ok5+`vu:.elڴ&Nv{_t1){!&&s߽7l83Bׄ'>~7r wu7^EaԨ\qS hpqKVV><έ kkACב٪,̙;R>̜2bI cQS2:v{0lpLNP ypi?~Ǐkm1S XI paa #IjjԿI%6KÁy Cv51q "B<%W18@&!qdv@ 8 q "s-PUVp`-$ѹS;t@=ŋI8l3F Ƿ<<&x=Ę-$'ZU>@يO;Nnln7jȽm6$!2;wh4ң{7? Uy9xPANwsz)~ytzczt}rEɔR^QNII1ddf2g<4 <$ h Gox 8Eaܽۃrp(ȲNh4?ݹk7ѯO?)j{p\@'4T$Opڮ)َXsrp8O>FױC"?d8^/& դp_7n&MCWp5k}<+,ִZ5߫؞=Q;vC ht.,BQN'vYIKK#==xbccl68CPUXf37o!A={tԼMYY,!I56!{vN#ά㉏,-q_y9'Pd0`xM=LTݎWUp{< =%%d=wIZZG C ۍyzÆ;7r-׈"2K `2E14{fvSUUdȐ!ӇDf3'(n `ͬ[LLL %jm02D|m,Bu= Vvu,n[m|x^dvM82KJFUUz ֭k.vso펎uJ{K !">MLnbp:TTT_L׮]ZL>r-( ^J>}KII rKX,$rxׁku$Y*~;š 5N:OG޲hwCM5R@ܜ\z:MZZYhis=a{B-l6>V.4Am]fK+KRVVMz 2;bXt:t:]@IePUUUx< , SLaժU[.`X~\_蜇vRѨXH>(!R6ìۥ㙏ͨBqq1uqy2]<*v{ݺveժ iqѹS'4MfS\Ro>@QQb8J\.LjWrXtY()*YVrZq\.:t(Æ sΘL& ChȲ(סa,Nѣ$UV!I߸hYCRiyN ƈ6o8r͏b0q-Ao4bMd%6]eΝz꩘IrBb4P Gg`_fkxxNbaͯRy3 ՝F$4MCVV!dxlߵ^ׇMv$''3dӱX,L&F#FbD & Ʉb!66FEJJ vͦ[WU5qe87H.*{4QTr%Y7$ěX?'FJBbb"֤dzqQ^/ݻ`!Lf FGa__R}t#vYHDLL gO@^RcjnV+gO@LL $1lH,#FQ={ ֣A1lZ_Ǻ?p:qVowfFc'|ž={G̀qp:Y?6Gb3>S*++C^Rf3;ws Tkm߹ 0U#2 DgJX*;=t`2nvX}`$Nsl,IIu8Xv)t҅-@S5t:q̛?5gq4M >*382 3{>x]1\{fЅ+MӨڷ~qAy0@в{ &wͰCU8Nn7~\=ED$I>ᠪիWa&M駟f1 (aXۍ,{奚& ȠxrQs^‚<.a )0\KɄAob6$E~Q!;UFI'e$0+p]]< sG̡ԩO8!03^礿 xYt!IU|=Ԡ΀pP}@ h,Ǎ4T73EQp\t=Pr_O 餬W^yÇsדPS^>bbbѣ ffFl8z FRaSg&d qxROOQQq4 ݎ`1~nwvQU_~-[0c V,wۗ۷cX(**!F~CS83'.6M2s9^EQbƟC2webb1L$&&6~Tv#p8drjV,_5JvxϛGIQ{.ݻu%)) ܤjR=mL dv:n [!2 iHEQ9R'I( oC hM3uwM|uyf뺰l{ v npp8(,,䥗^7 L|7~]vmkš!z̗1'q󫩬D4ƜZ´KTL)l Sȉ$%%\`Z$#k?.dѢE(Nsw3wlF -73FNlll4M @ˉv"{HJ2z-k0T{s}\ ~OpU"y:tҮNj/v4QU% 9:Ñ*l2 j6ߏ E\.SXL[ɲLrrr`Ċm!䡠NU\Ųfs'L&رcVTT{_,d5UL>-YOk.|TM(ٱllDo4_DrA{: [HD?kBB }5Cl ,(Ze 2.Inn.唕Q^^i$&&6,jN |ȓڑ3nbUهm$'Yyx26'VXth ܣ9%l۽y/`붭ȲɷwzKzO(UrspVVIXb&Xę01 #[>`Y>^\՛ OLd4y@ @'Tsמ@x*u]zPG^ۏ=`0B3gN o zr.CF"=zlVYT:d YqPJ ]0xg:c.pT &zfЃ^W]}BsUСCj}]111QVV=*4Js隦 k׎~#G<*eNk%0iaVlA:!㩗50t(3ZMfuFJJʑ6>x 6l`_( !!*:}zG4CUd Y)yfЁި%30!?KNSna^OҗT{Z^qh-Td z`*T"%9Nx<^?Al<bcc1vX>ZFv#jUx2ەW~ ^+2Ν;өz#=5MC^_i'C9TyƈɱhI_:/; dY&%wl UU 6Dgw]Y@Кc1 vE# U MӉ\@Um?U\\t֍^{YfaF_ot:4MO^?B8?++K9Pș.hyGs88Fis0]O &&4FAuǃƆTĥGyZo-!SИL&Nz  t!הt/9.ZC-ߩi![׮F^/[;/0 %'uYu]G lzznVXAUUqqqFuqxp^C$\(60 z*5y/FoAU}cVbcc;cVذXb4¢b*UlX$kӁh=Ol6HYCC%$!uh7˨h4ݻ b}tw===0 N6M_}ɭ K $TwOZ)Gق*laTUzNПd2tR @LLL`*[ebbbZp qTxp_b2eo져$I8+KpV8_NmKD䦱UhXE_(coy7߉lѐ$ _q4d}\7^OʽS!og2g=Q=P8k8T{/֣^ga=̛7X 51_~Vl0^ٳ!1^gE 3pW|?.[6sEM(ntޝSN9SO=V{ F UUel߳^-X#K2ޗ؋.&55m&A!\(v7lO-;۬)=VF4ti zK:Z_VUḡSHKKb( p ׮aI'Eh۰{D+NUٹ}9lwbSK~Mq ?$̒so%X&k< EUVǴ pTRAk2r$*VV M}UZux|JIMD_$_U6"RSiT>yn-Zŋ۷/'55$IBo۩ &e.靹+b4j2":^בͺ3_@R.@Q: N;u0e`o{n,GƏ5)1kw21S AdAlh*H**WϘ(:$,H"/7cuײlů}MbFQ6oS@M!71|gՅ+~ꛘIBd$*'iEUXD+WqFB||Xz]~9[?xW0Ѿw܁ԈAhez={Æ/e֭8NzQ ֜l6s3z$QVݻu4XN;u0f)RAzά]& AQi1yYyL&MM$Y&~FV^6~CJL@JH@j"@CmƐnU[o~vCaQ1J6[%qӾ] }=Ztնi޳~ ׋*g%о}V)^4Mc܁4<>DzxbX@$C>}Z[@ Q_>@ "·(AM8@Sq@Pq1ԸnظAG 1gsn #OEYiJ@ A8@p " (AHsF(@ 8#@(|CL-[ q "|C$9@&ZV/v -qK툋#=slܴ%!Cvn.8λ`LD7o+V{ .H?@@ h tX%)xʑBUUUUwhp8E-@ 4  Pź:&PEJKKٱc9x :u"cGN:$z@e8Qq5C4֭[?Lee%, Mؠ,_s=!Cؕ\ q@SըMӘ7>[nl63fRSSX,Ȳ,]EUW^$ndY1l85իgƍٓ?c2tHҳgOk6nH]1bx'xmZ4x0>;\A>ՓF=h6m+,,?l /SN$$$믿Cll,Vv1qD,  شe+loG>YQPXXHii)| 7n;dРAFRRR i)'<n6&N\}5tLZz=??.z "R%W޳(h`@@ԦMΦ]iH8NQc}2|sxuvލpiu,Y .?֭{ ,@ 8iΝ;w^<jPy` &&I7nO<B%??=zQ-o<̴әGee%/L_~;2p@FC=Q+}m8OOOgƍ瓖t: *EEEѥKZ=w8b2;țoI7:mzs Xժ,-ZDee%EQ⋙?~PohdРSjG7Źm Su\Mށ <(TJ /T{P&ώ>%qc/a̟?ɓ'0cƌ@٨8ϟOff&W^1))\^Y>Çp!r U3hb@ 8 V=BTM #Gd׮ݬYnf[oEff&N9#G6J͛ko,DY@ 8h\9E7>}TXw'|ҐeCQVVlf=jT 0jHdY殻]GM4IL9"]Q*x~FE~'~zrrrk.yvio mڎe+V^7G#r\@p ` UGMڥ$s׹Xqxh@ HJUV,U-@ 4 @ G|\<[7oadUUٺu+ -@ 4r֭+Y9];e$GRuڢAЂq#_н[ $Ԇ$;6VO4P<@F4[n_%Kl([1ͼ;:%e;FC|JX@S}J5$ dp% GxK4HQ$>.r㌆kQKWwsD rL 1۶`խ,P4z؅(\ټE| 6 ŇwTU|0{&\g+V ϵn˨Jhl0޹Vcn7M=~$W^¢/p#O&үo_} 'EiY7L;wPmGKpJ hs*x>P{q:t-kh7K #qtIOgoINJj!ϨgѾ};sr)lڼݻGv!U6mP)j6oo>gPP'f ͟$VQU^|gUUIHH_AA Ui+iZшl |^,Aȹ򊉼İa&&MBnݻX%絕CXvAQGۋYKhڢ; =HrOQ[?!YP.>K/+bUoZ(?0Σ?Ǎj2gq<̳FY${ヒi7\?-r t>?|Ys۾c~'EEE{T+ǍWQi#&6ӆ llؾ[I2jq*t-+v4JJK펻ؼeK!ml3RE9b4j-_YdeeSZVC>7}S?F.]6t(|o3wEi^hdsrј xxB濓$n7~r{N~Y{!G!M UMaĿ:G_59֯_D>CfdEy`ڷoGJJ {+~&^FV϶9f秪*/J%$''7FMX)kb;@yY9e%$YI&ҩs:I^@TE@}ʟTV5sgF=^uA4'Agչo=\=:n6Yӻw6"nzm{Ƒ GlkԚsI4ȅ(Mؿo;wlv`2ɆصkN@N8-}C{Y-syy~osRk"ӏ OzʎºVx'v?,]Բ~^Mo@"nj7MXw8__ƺn***ص{77|~lcY?9G!paԐ~eoFFDc в_TWZSBU51ᓙANN۵o>$$$e* IDAT9޸j]vlٲ,RRR٫W6~ 9}裏3$gtã0QWQTur0Lѓ'<&tr6@VVh$ơkkjYJm݂`䤓aZTU*zSOϿ,c-v 6ΗXp!;v[ol6s@.+{ FIrۑMΏa҄Po!a"YD`Qb-qdee71 :w?~p /̫HCmǑ*BBBF+Wrp8\.4UEe8CNgٲddѯI0i$F_^[nt MSyxGxgz,Y[0p@?zߣxǹ Xr%r'3fEtMhaVoeGXGؓF|a^/=~=/1zznha_׮]B:c$8[n$Eˋ| fz=z`WQYY ɲhj)*,BwZZ',Y°aÏ*1{gx'xg2,_̘q3}9sfddrM׋X|9g}N{a9¢(!=fjf{euf:t-߈X&r,#!gjjj#ǨM$8c2 R*++rUU>!e^O\\%%ŁL8E1kLr!!Q{oٲ1cG||c\Ė-[B !7onrh[GAA8VL֜[׮DOӻ\LYFK~Gھz/רPUS=џ ϧr***HHH њ8\p~b墋.ᢋ.njJ Yl$&Z[Il!OLX5cb,5qSZzk)))">>>! a(|(.]х;fMѬi30Vˋ/ȋ/h1͛dۊC\ɼUBXb cDull,iiiB45XeX{T}. ʛd;VQ؛sZj2an2O8xx*UD53oaաq \Mc=s0~Sjk|3usp&1SmXÑ%.='[?'7DRSSquuqԬY=bGD@=>7lR`xy5Lg4_/OڏzgJX ߏgic1N0nhxGeirߏ>ӡ'7c\tĂysVieW@PS$ $ԬYE/`V:ul2+W :לU)j4gP{ 9K#(x*6d0Yx-Y|<== r# Z-ϛK߷…Jsgͤ},@`7\i,[PիW&$%0* ;}h=#5lv=sF) ]n?lZчr.jnތ%8(pFWhʆ '))u0w,J;N5Z4Y!acL=bM5Ff;:{ xmƍm؃Ԙ; ¤|e /OO7o0֬ur_7 Y2e1* GͅQ%\\\xg8̛=>Fiwnk=9sMuG!*>Vv4iܨpNt.>۞ȲaD`N3, aMVZZãJF hPyة)gMsYϧǢl㈈"%9YVR%PHȣd(<^xv4ZEih] Bk?ɾߡye1k Z dGxd$=x!OЁDFESY(2 ٓK wQgU)0eㄽcwhɥвeKLqZjERr; 0^ 󩩩lU&1ٰ>acGSY||g vÝ? qq+[ls.0&// &gv #QRIO<6t/gYנPdB?Α[l=\6y/ɹ2d9so5ג| '%%oH*Uy,x\ŲRN6R9fLa&(I%7B$/eixzzMTPP6|Y{p.\^쬓Y\*7تe׹Z~6pMnܸIbb"C޽{HօL833pOR ZuFwߟ#GVYFR_[ yofX S?@@p$IfZTTSN\r겊%.$j։Gg%o8$1~_`Gf ?=ޝv3p03j؇;:Ld2|۶0}xb/՛g\c$>9-6+?l0޻MFk{'OGi1ӡw36oő?( OY0ihͨ}Ljj*#ͷ[X?=w,#˒+##HHOO׷,͛7ã4`^N||'3mxIcߏ}~W]K8,rٳ4GdTdfXIejcSPn۷_UY⫯QύcǏ,Mo4m>?gcOZ6+IRwݾ} A?~P!/ƽIy6tʖews >~.@Uة3a˴%GnxTوUq ǎFU=M굫q9jSxf U3iw\kzqqԬYei&(iO:!C([WWX|gjthߎ6Z,K4n8>N㆏f -yK4o֔~}pҿJi̜ϴn =˗_5?ګ4o֔۽y, 8k4bTe/{xL㣰iġ$I7w>ɓ\2ҿ)֭Dz%K Xަ8~8Z͎]+$'Op)N1<ޠ~CsУGw%ys`Pi݊SUmI'QB0^=fyK={)Dža̸/_1v8:8n߾E``O8AKUMCXz5:qv?gf|s~ #.8nGDƮgør:i= 22s!TS'#efrA6nD'1fhJ)|2ivnlrL߸qW{yӦ4oڔڶ%669a~~eJx+ThE_ѻ7ݻuСCba ֨~\4 fddo:G8(̔Bx沍+ y\{'F gϞeM̝;_~KC\r+ϗҡ}{%MPPK-#888rgY\]\8q"'N޽[x,ʓ>]8ً {`eddz$$Vp_P8;x GwU̫ .`5K$BzF&O>՜1txed(&eKҧO32Xt)[i)M1Gm\c_DD4LYc˶.ޯ%RSSSasT׮]7MaLwjC6Ux!6>V[^qt V["g $d233iժ!!!6ݗ\9#Ŷ7ؿ u yZl!Z.GQuuuԜlD뉊7C8E|QZuuZwO:2Kn=zGϞfa68$4g G3=Y;4"GoGݻ;wMW FWT =u`;﮷VY8Ok8<>t{Ѕ0nR2ZzvܣJE#VjuIv¾*LθFxFšƽ ;}7p#Iaaax{( 'wssS,W+/V9p jͭ Sqhl\9^jG?s*CUuzl Uʕl۷¬j$ԯfSe'ܞۍ;)U>jqXGBx={)S&4v;.V@iL2YL2Z'I*^vo{T Wp^x9ڷ{)4Ve9TUR%9<4F%ŕ R /ut: @cUTfE A@K F-jW׹  JLT6(c|=~dVqe2{ZM7q$""" #kz].c̻xak~V">>|A5f,kV~NRXzKL̍ԏ8FiN5@3ͱ'r,la24∈"%9!?yc?nEg0dѨR׍hիUcԈEi2{~e+>%""R|c`G̚ʕMOʳzai<Ơt"zAQ^lV/ /ԾD*:pȨh*?Ccjl n-3zH#"u^%*3 H&);<<46k?0YF`rWy~ݻw9ݸBC΄X/cDiyzuu[U8nYLa^Zq'%G4z_m"88ɓ&~1SFu05q<Rw\ɂ8v8:u7>#']F>wwEb6G[@Ӫc|bjժ.FJÄFkh|L^V)IvUWɢ|劺̲lrrt.i'=j$->鰪 Vò$ՂΝȲDㆆ 7| 5L%LVѦUK>x=RR gk"M5T¾۲۽DfM׷.9~U7k^bxb;.z9.,Uy.y&O$Gfp [)e߾}5WXH̄qy^˯X$IS8y'O&I26n|j5;v&##OW0߸T>̪5k}lْ3f(yNHd_rȉF?@`+6)=,#Ч@)\fs*oEjpssIchҘݺre,oy9rJ^a۶ɓP!oo/F_<&L|rfaSBC ݽ}JN#>.۷o#@P);޳ѓJμ|sþn^T4:QfE*W_G(/ $Is,[/raBN՚W3q ^3K*annxXf5VħLƍOĈC qX26}2G-'ټ'ty7*^z<9,ʧNa@Hsˋ$ھްy^KaAAA,Y<͹NŒ\ڵcȲ̑Ç1}:{~Bzg|dsU#17vӽU*T]pT贺RSS[)c=sY2\z,¬3zs%)C~aBrU3s=Zc@ #LM8rMF!)YCTg_e\/-f̘AٲeIJJbŧ+xwo#ЩSYd SCP|yӇMI߯ }ga={D0ybbbR 67хmZ3yDn޸Ajp#@PѴ_wTѬ"56;x0{@7QzNLUϮ~)\]=)؁rzIrr2-K=9-:m[Һ8y4M7rTQƚv窮<ˏE۾Wcwܸΐ! ^ݻwIJJbE(yW L 9IF,:vDj4Z}t :w@```rqbC rC.;.9G6=t$G={#70`;.[ ZZgQi(<.J VK^ShZ2z|Z@ MU^ބ>C( G$)jQ@Up=<ɝ;w K/>TRE0Mk49^j #⃰5 *UhA(5(4@ q@ aX9n#"*d+xyzQRŢE l8##)ŋ/H%CMe<A1jő‹m={NHVعc[iN: i6C*!>$'@!Nmݫʐ>gK$m3 0i/OP>lkPPep$VB,Nar4NwߑZ7idljqy EGDT6@@yx[(9jw\g^2\\&%Af&7$ӓ ,Kyx edp˵$Pʷ F9Ξ=1cdj6n`fI'N&9qTylGh@,Z,c͢v;]]#E˽\ʔ;NI$T)Ùz= 94 OH?q/ȐL~ǛY9x{_κ^@)))ж$nՊ],J6|Z?4ⰲA׈#S#i$YeIM+xɝ۷u+s$@R;Vd(WX#8{LYCFK*GS)}4lHIFjj ܺux/9GF AvYܮcgҼ|[![6yUIh5{_ /rЭF# .񙷎v hᨠo1jHiܤ Nb,ZXISn]6moΝ;|hA 2\zjժvbݐW@kč4rjw\q]@5i{|ʗGFn4kp-WϿンxCpSj1%4˗$I[:u(i&NȜ9sXne˖ogS`lRE-xa6HX6 >ʗ#7q=?ܽ@A7Ń($q+f2jْV-[:e ׮\Q^:V2{nJQ>Ջ޽z)j/d'_9njݻmXh1-b샌ds)t N:IFm4iLGSaaE.vqrJw\Y.ʠuw%3=ct#^-4OFR&$x A҉ՙ WLKF[^ GdЁrXN{)&^{Ulذ3aaz5jQF*w-[^SRhѢCR:uBHo[صs:wa|ܽ{ի3rVj=ɒls:w,ܾo5iԐϘ75idHqzCt|_~v1)  q+U{+W.azJ.ͬsOβK8~z|I|}}s?zή];INJbAUMPv¤+l3UI]z>&)-FZHt &)45*CP` v6>{؄)hZ|WY3ݹ 'w5[cƌ`J777ǰ#._~eڴʼɀwafcРfJ`{tw}ouݖ:u@:uؿw^l,riϏ,^D)s„ ;C+iGi^~efL͙oW{T6i|p!+w7PAIOfAt%ߊmus/Tc9ai4 '7KYnW^%)) m.E\\Æ L.rѮ|&PT)9;FwcǎJxǎٵkϿY>KeO *gIpqqzzs,[/r=?kXll,+UGwBɢ$'SOO/ `߀IX=%SF @Ւ[ԢXywo&O'ɼF%ޒRX??N`@@uaW۷?9|0鸕pe\c,G7'*2F3_Dxf  aΜxyyD_ȳf͚j̛;Gl7bVGO-Xw7a K:V\*/Y8s4miiݝ8/_aCddda:t`ٲeDFF̛@eu# Y\?vѣf:?!ɒaϦ$$Ŝٳ2rUr۾ ~؛܌ɢ?55Jr#:&ٳf[:DFEx/EWɽ&LĄIMg9Up=<ɝ;w狷UT.jQQ#Yf-sϯ,=w#J=_a$''+#Ka;wB0kb{n㏌3&Ǩ/ż֫&Ndnֵ?qA%O~8`III|-V,_of%KJrxO~<Ϛ7 %%aC#3lkگ;*lLum;$8[E p*t:۷mu'ʲ 69@ xIMAqCH (I6xG9  ق;@𨣵Ȳr\ (r@Aբqa^ޜ9}7i@P$0tqJ<…\ IArJ6ժV)j+@hbZ0( @ *@ AW@ T!LU@ -p@ 9dYXC018 1(a޵ݻvqz6jETyf&^_ba:'}s#&u#&۬d1Y)p Jҥڥ 7oQdYf-u/))hт!@tt46lLXzF1rp|||тiqiK"WhKJǎ7/Mu `ܺunD,\1}.eY2(ݺӵ[|iBq #Jjj*vVZJ؎; ;ٳXzz}&Z3w;vd//(W,o* ӈExkl͝ DGGS^}UUagYcEid5ʼsxQf˲'tk.9Fyys(˯L6@cǍ'd;,_TIF~6|Di:nߺMbb"5R;~87EJ>54eɓ\pfۭL{a:a8 i4Ξ={Xf-sŸ8 V,M^tuqU=iS|7x{{3h@>:F%-g+M/tʳB|J4nnnoߞ 7)aLh:_0{fIxzzoQ-yԬYiSCeOdR6nXOfSO3tyr/s }/ʕ*1~8۬*?QC2qtڕ[ܼy,>((;)4qM*)jY%A0iDj֨QԢpa VbXŪ>s׮fa˖.%%)/OFeؾu+[tGi:I /V~J8};#Fsѡs1bt0U N1c猞a8IP[\$VKfrDG]AӓViU_,q)|}Zl#T%&9%J*Ͷ+V:{ʗǻ *DGNJS"D (ĐC yc~@ PUh7@ ä+ĈC V!@ ¸r (RO(jQ߿<^^T2[X!(GFRË_j_ԢNšV9E(A'%%۶ h٪;wl:POB|,+ HOڵcg J:lغm=w@AcY}1AIG*eYX%[ T%pj:uo^dI*#.mEoYԹݝڏ=Ɛ!\ϯ!Wcm-Y,Ȳ,λ~>YpTѣygmW% 4ٳZbR>#'xs..Z'TY:Q/+4/^ihDSN8ɩ IDAT+WQNV-&xjmĔ.]]y%Le6o_B-2xDGGaF΄iԨ#G G͘ZۻϯN0|P޽K9rUV ##Up!t:ݻuuؽkgO^v]zCM6nӚCfj/X@F8yYa,[ǎɓO>{|vlڸ8ָJ9$voFRR=<&Ot)۞XcI('&55?HZ;vvٳgUׄ x9s1h@ƍKFF&7md 9Bim5W7O2glmvVyX|?YKT{?T#g2zXm< ,e 0n<'L`Yddd,d ߸I9K&9qY96n|j5,?OW`q#϶?p6̲ɲaFtBm߻%qNЩs^}7oaJϿСC ˋÑ#G˖Ұ㸹A~8v+J`@ޝW(q'$de˖lٲ ޼Tia˅t o6Q~o6MOO Α#Ҏ0Y涭?0i$*TۋѣG7rUnݻdFdҵK8.wBL=t5k;g6qqq 60Mfؗ.]fݺu\z$Ze_~~~RJm|΋T;zrĈ\ܺe~n[s,[/r=e߸qW{/*GPy'$O-"99OOO {Fٰq`1ywo&O'ɼF%?Yȯ([,TT f-?UU^=O, hب͍e^֭[F SC0 $9sERRm_x![kR4MXl淒G9cF3os^]Y۪;1^*Z:l2"##p_ħ=wwwX|Y>>>DFF$O~u3mڰfZn߾۷Yfme꾜&*.UWܿXz5Wԩ[M7BTT4sfFT<<<)VfϜe*իº fkTbY?T%x$VJQ {L+Ÿ] VaTbC ab!0$8@Fq*;@P̈"%9EPӓJ*ZW({i/ڶk_ԢJ 2*V*«J ($'bȒxgUؾU}q@PHO; JB|ԮmU^UA1Khle3AqAWjŋ9>  8b,8:og#&1!KdY8N==w?¤ɓqss˒Oy ;v_|7sgfe0NLL [miru1eU+WreݲSz* nG!3a5nL=,X99n+,!Ioujש?L %88///ƌ޽{=?ȸ)W<ʗWJֲ&NH啰wfĉ,'Oݻs,.^=zBPPpEPP0]uVq!UAqaΝtY ܥ ;wŶmeCnݔpIjJ|\|<*TPXbbŊJXJ,"I[q]qܺu?L Uu: +WNɗ `)*TQ3ZDFE(+DFEQF #"0q=k9nwRMU:w)jYij/: ^U=?:pfWΝiaJsW{2ct^Bz./'MT۷o?&..X~ ײY0o7o,?H'»2%4TUZ+}@!(#F*gff7+a/#FwՅƝ;wXh1I0i:vL/n?¼ys;o?[XPԹrFf̜IlllQeYͮݻvT;v]5_{mڴaqi՚{?`@U:5bYYT^o}Q&3 G:q9e  iC\$0 N< i۶-ΟORbEٱcaag={kVBdW_+e͙;;{U6)I&J(kTHvU7pT]EWQwUtA@ $fLy~ {nys9)97,fEdffo6o/=ΌU7{ƛorœGkVWxa/^;  M,_^`C66lJܥ ӦަG0 9~9ŗ_믿2i}/sϘ1c:$%%q7as}3<^ObNemf޼x/f!*kbba5/PYYin###1m4ijW̚9ܜ0~<{u[ ##nl-BJJ Çck]֮#0eu ~w9455qݵ׺~!7IcOAqQ18(V[O8UW'z8T:""F7d}'##}mVfΘ@yy93gg:mݗݳ7,Y}%˲g#WqyҧOH@ZZf`T{s~]YYI\\<**< Pzz︸8L&n?+_qGQF rm6]&".`C&k@,cSldd1)))z),Z3ΰy,\N;Uhdg7@e5HCC㚧描~8 ƌ /Ga~ƙgЃ;v,si,[uMSS3xYxq♧#bڸT' 8餓hjj⃕+ݻBII /ƌ믿_Ϙcc,X2/X00~XW\AMM ϟ _`9I{ɑ PUUEyy9,dСI `E9s}Xf ԩ'p3.Lr`A'(q*@Jh@u9."G\ p*#v*W%@8l}CIX@ 9y냺 %~ Iؽ7/wp){EnH!#:Q99pa:嵑D"  G8:u4P<|صw{C':kql[^׹Sg{͡åtYulظ1h[ώ/6"=6s"JNLJe+81:>B8HMm ͦfl (U9,1cHWK r T2:6RAMIl8`7IA]Ñja=Ëlܴ?K ɐEJj*Gپ}+?#G,/GKU=~BXOڄMJ|{!3LJ ̿́ڵ 歛2s I$>]͌le}_ӻ,PZVyIuT9Fr`dI,)جO K6) ȡRL&~)ߟ~B~|nzqx~H`ճߨk.*(@$$4ba5|~=}O|ec/EmTBEQPȒ,adʏaoQ__O^ΜzꩠT;v%G7uPN-7[nn: #3JHm #++ !&cIIh$^d䭥ollѣILLJ~-QcӱJ$vZrs0$&`$.NE_Vlm0 phz_qc#?8dnNb6Re U,]6F 7' rrs(/;BaQflf4 C gh4j :/\*jBOraVY͈&=-,ٿw/}8 Gc 囪ʅF_o=M7\Ocs3𬍢(H@z∋CqꩧpH9F#$ !B]}=;NmmMMM^exZaϣZZBB駟ݫ:V^GqR>9Bɵt['DVm䤑<‹/Dž}ddsṿh/ؽqXmTԐVEբjd=$ !Q_Wϩ}2K`Շ|?ӥsgew/IINAѡiuheDeUR ms#'<.Uj:d6n~WϞt:l݂@cѣKšjt4 0Irtu;M&uFaƍtV{n>ZםVZc14$˞H?h9r&#iin]Iv1dl6k'jZWU58ں1as7 Bĭ?YCo,a$]vQ057yp9Hgɿ"ldggjbVs/V];nXүdfQS[b%3+,aZ;~$k0[,78pIɉ8CmA 4M yp\@66v'ݻ11 Sum{?o&79 HNNl6,Tgc#W")1@ll:6٢0rZ8^n:Uѫ9Wz:Q/1)֬EYE5i~$a4X*tZ Fc#={0{3/dáŤ0Lz677sQU]Fn;fa6;!9緔9{ѽ;4LG˚gfh00q$:?yyy :#Fx :لغcFV5=efeQSNa 8rVn 5l6&N#GһO?BhnblV^n4)(PZ4 O%F#ݺvaBLf]~aϞ=))9 (cA٣5S~/$$ $>@.;\XW^dS {EKM݃zQ|JrWpgad199a˿6o+|ҮTxo7c$33N9T{_xS]) εR Jյ9_u[mNQl ƦfFNii,難ѣTTT|gX?pf dY8#Gblo 6PY[boiXm64._~%Ax}ȟ>K/_B=ٱI'g%ss3K;GL&7>Y)Ϝ﬘?!. ?WTTP~zY'̔-3~2g&lZ{t$JccuXm6t#'33S@?cCC租~bSNu4׵{k^Iw8 bkd=F#> Ƌݻ@~کxJ{ZKJm^p#{pwLwY&';{~#//ͭi^kQ)$L,~"..N~ uӗO>U06vk<-ֆo+EQ[񧟼p-aag/[t5ղzG;XQ!lܨ%'7Ͼz[τ2%xfL<3.JfF[0nWI׏ 6al2ߪLt$$ п:}N5Vl+j蔛ǰ#jtՑq㨮".N߮-Z(;,.5o(.)9//MIHHHQygHjb-k93bPHHHPEԯN?t B~~>%Edeet:zEK? u1]%1.R[Ɂq|;mUY9X-~_:w:%Cqu_~a붝|r_z= hLUis(uuN~l8"ƛLFFsQ P!$䍜iӷ|.rsrg*~ȴ:RQYEK8wcoh`0`0TK'k7V"WcgxPKy߀zTAj_@ZZ*{~9yy3"m^2q5<*+?sՄ :~@L,Whocy*5p>1~G|-&Od pjzzt'>.Ï֍{^ ϷO3IW%充~BhRAXՈ@8_%d%}?Y)G*zZ-L^l?LSSٸ->|%YS\233ӵ|׌{+S&'%a0HHH`Ƞlܸ"z~^2:u}$Ql#B$ڵ466v)hWTVo]rE\9 t)7x6j@x&A9Y}/ߙgy kjnvK 0o0RЀ1#eFYHJI&9)6}-\Cr}eٕ)y=:S'km߱yŅ9~/q~8eV(k7t MnEcF ރLBKe,X:)M[׮e{{書F#?oa9綔; G6yZUbF#[w젰p?bwFCC#lb`StZ ZŦٲe+mJFz:@c0H4TzS'=(wZYQ~(¤WG\p;;v.}^=y_ojV+g ߢeGxU1rm &WZ%_{P\R"FFJR ddd*8rUU|kzA~n^Negqqdeg?JA}}=\ɥ\"~grn#]¢"f3}z~K?Gͽ^' o >jk#[u/`@k?sD&]5,(XVV+6۱)I,hh4^.<|CrK[A+Яkr[du@V=d2ȟ] 8=F_aQ995B/(IIrLR>#3bsxm),}fq'#G ';++GYm6|j,[ƥcҷOdY͛՗Ah?uxi w~[K];CNÑ1ÑNJ99Q)t뗖Z B *kFipvcb*Kʋ/dbݺHJL QFo %%bQ 8unſ K$&&sev͇ x??4Cή6A[Ow/dpNW5QL&O]˙y]@9rwO?:βу)]_ .Z![Nf'Ζ_ˀ6YyX&khuV4\V+7v;۶o?._~'駞zt.=.2pFruƫտRjcu\U)IldwO(*.Zh9FKV^AMMTBj@ [(ۭDES~5?XQ@֘#g8eY&??rtH4W#CE#}\xEOwΝta릊Pp !{;Hpۥ>n5 >m[ @މb7III!#==!2<*6CDXfϙm1';m1'7PQQ3\]"ONє_;}J]]k>:z Ԍp5i^Pg ׹ hYVVC /bܸK*KHDtB#(WBg<:Vm渢(,[?Fۧ؍̔)ױrz5b>X8>N?4׵7x#+Wj1fhnZfK0z(nF 7oa܍޸.gx}ճ'wyA- oh4/x^By?`Z9묳Y[UTTT8kYz;wdѢŔ8@ZZ&M /gtwlKg<#g51f87ơF7?x:u UQMMUV=)[o/ŋ2u{y**+X`>^; z\}v^ye}| Wز)..^^WB z̙3oŀxvZڣ0 &ݟ‹/2qD<=_կ!{#P̝g>ٿo_Pi3b7Pd2qk/ukauhሶm? 3f̘Nnn.IIIrlذ)S`0sΡ뮽iӦIff&n/W6mYYYdeeqi|+דWY3gC||<Ə緽{}^W_s?}3<^ObNemLvGך7ϑe Ԑ]w!{#P,'))VGU^$It{l~ouWhպ˙9s`oMt#99եl\S]NtoIRRu~NwsYd2ž=dG}[I9yߟwwHNNfڴ싯_:~o]JC0S i[՘_TWnnG77/3ڮpт:ӇryU۠n\gffddx>|#%=z~cȖMU^Oss3qqqTUUy?ܳL~!ihh`y\Ӳ &[WPP}EQزe+*z KpVJpsϞ٫¶((?rzjFtQ_g;sRRRbg}.͟ ***?96fh^u=ѣGy= ]a̘1>Gx>X&ʘkMM )//gF ٱc+|̝֬;+#--Ms}ם,Xy &а]}Օ444tÉC2ٔ9B]^/Ns5 gEE7n▛ons}&={7/"]dlrm\>D"1?d;!>GU뤽i Skxjzk w~g;k"pl)ue<9j {(vNN"dlq r0ڸ(kj攓O湧p=bق*nF ڵ:5}蠟6555̘u'/RSSVa#'[!9$e-Q ~ߝ} `0jd6-tsP2&h-jK$ڱY_XDAEEn}:g֭'_cE-n8@+kl6G---\A5ѝijb7V6FNQ|C^>_}En]wlwSq ɀگ%/< -m;9|NAuUŴFtUMMMrcZ^?r(9M[S(ʱ>vH~h6]puMMTUTa6N*05 !=VWݟklhV[KcwŦ$IL&6nDRR,!$ zv'Ͼ1ATiWջ?ג7<ɢM5pc6kІN#-55 ڈ}8[AcIRB2 M1H4d IDAT^6 %w@D^G\> ڎږV h,Gv"99 3U;(Fj*ptSD p\wZ*K:uW|<4qjڂ3N͛cz-@ 23{ڲTUWk׏ج  h4Bm}Ct7ExRRXH~,HIM%A E.pIKIa- vsfmJV'ڎD%??b>s|^Izzݺt@`U%=??bq8@ hO!Pp\지5qsA{A8@25@a+lRN&~~bS[n^پc'g;+ NTB*0Զ*긨2 P 8ZWة$AhZ :'hmmlGL4C  nJbC@ Ȑ4p @ BȡA eB/q( @ sF^Һ2O2+' d C ǣ>h!Eg2FhfHщ@p"SkV(nTJ l7~)M!ȉxO^ +IENDB`kmetronome-1.0.1/PaxHeaders.3594/data0000644000000000000000000000013213560310264014206 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/data/0000755000175000001440000000000013560310264015132 5ustar00pedrousers00000000000000kmetronome-1.0.1/data/PaxHeaders.3594/CMakeLists.txt0000644000000000000000000000013213560310264017023 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/data/CMakeLists.txt0000644000175000001440000000011513560310264017667 0ustar00pedrousers00000000000000INSTALL( FILES drums.ins samples.pat DESTINATION share/kmetronome ) kmetronome-1.0.1/data/PaxHeaders.3594/samples.pat0000644000000000000000000000013213560310264016435 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/data/samples.pat0000644000175000001440000000410613560310264017305 0ustar00pedrousers00000000000000[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-1.0.1/data/PaxHeaders.3594/drums.ins0000644000000000000000000000013213560310264016130 xustar0030 mtime=1572966580.124362634 30 atime=1572966580.140362634 30 ctime=1572966580.124362634 kmetronome-1.0.1/data/drums.ins0000644000175000001440000005110313560310264016777 0ustar00pedrousers00000000000000; ---------------------------------------------------------------------- .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-1.0.1/PaxHeaders.3594/NEWS0000644000000000000000000000013213560310264014051 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/NEWS0000644000175000001440000000025313560310264014720 0ustar00pedrousers00000000000000There 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-1.0.1/PaxHeaders.3594/translations0000644000000000000000000000013213560310264016016 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/translations/0000755000175000001440000000000013560310264016742 5ustar00pedrousers00000000000000kmetronome-1.0.1/translations/PaxHeaders.3594/es.ts0000644000000000000000000000013213560310264017052 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/translations/es.ts0000644000175000001440000016725213560310264017736 0ustar00pedrousers00000000000000 About <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style="font-family:'Sans Serif'; font-size:12pt; font-style:normal;"><p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version: %1<br/>Build date: %2<br/>Build time: %3<br/>Compiler: %4</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style="font-family:'Sans Serif'; font-size:12pt; font-style:normal;"><p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Versión: %1<br/>Fecha de compilación: %2<br/>Hora de compilación: %3<br/>Compilador: %4</p></body></html> AboutClass About Acerca de <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Drumstick Metronome</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Metrónomo Drumstick </span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">This program is free software; you can redistribute 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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">Este programa es software libre; usted puede redistribuirlo bajo las condiciones de la Licencia Pública General GNU publicada por la Free Software Foundation; ya sea la versión 2 de la licencia o (a su elección) cualquier versión posterior.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">Este programa se distribuye SIN NINGUNA GARANTIA, incluso sin la garantía implícita MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO. Vea la Licencia Pública General GNU para mas detalles.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">Usted debería haber recibido una copia de la Licencia Pública General GNU junto con este programa. En caso contrario escriba a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></p></body></html> DrumGrid Rows: Filas: Use this button to add new rows (sounds) to the current pattern definition Utilice este botón para añadir nuevas filas (sonidos) a la definición de patrón actual Add Añadir Use this button to remove the selected row (sound) from the pattern definition Utilize este botón para eliminar la fila seleccionada (sonido) de la definición de patrón Remove Eliminar Beats: Partes: Highligh the grid columns while playing Destacar las columnas de la tabla durante la reproducción Highlight Columns Destacar Columnas This is the current beat number Este es el número de parte actual Pattern: Patrón: Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. This button stores the current pattern definition with the name given Este botón almacena la definición del patrón actual con el nombre proporcionado Save Guardar This button deletes the current pattern definition Este botón borra la definición del patrón actual Delete Eliminar Number of beats per measure (bar) Número de partes rítmicas por compás This is the beat length for the pattern column. Esta es la duración de cada columna del patrón. Whole Redonda Half Blanca Quarter Negra Eighth Corchea Sixteenth Semicorchea Thirty-Second Fusa Sixty-Fourth Semifusa This button starts playing the current pattern Este botón inicia la reproducción del patrón rítmico Play Reproducir This button stops the playback Este botón termina la reproducción Stop Parar QPM: quarters per minute NPM: negras por minuto QPM: Quarters per Minute NPM: This is the current tempo in quarters per minute Este es el tempo actual (en negras por minuto) Drag the slider handle to change the tempo, in quarters per minute Arrastre el deslizador para cambiar el tempo, en negras por minuto This is the pattern table, beats as columns and sounds as rows Esta es la tabla de patrones, partes como columnas y sonidos como filas Pattern Editor Editor de patrones Cut Cortar Copy Copiar Paste Pegar Remove Pattern Eliminar patrón Do you want to remove the current pattern? ¿Desea eliminar el patrón actual? Sample Pattern name of an automatically created pattern Patrón de ejemplo Insert Pattern Row Insertar fila en el patrón Drum Key: Sonido de percusión: Sorry Please select one, and only one row Por favor seleccione una fila, y sólamente una Remove Row Eliminar fila Do you want to remove the selected pattern row? ¿Desea eliminar la fila seleccionada del patrón? KMetroPreferences Preferences Preferencias KMetroPreferencesBase 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. 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. Automatic ports connection on startup Conexión automática de los puertos al iniciar Optional input port conn: Conexión de la entrada: This is the optional connection for the MIDI IN port. Esta es la conexión opcional del puerto MIDI IN. Output port connection: Conexión de la salida: This is the mandatory connection for the MIDI OUT port Esta es la conexión obligatoria del puerto MIDI OUT Output instrument: Instrumento receptor: This is the definition of the instrument connected to the MIDI OUT port Esta es la definición del instrumento conectado al puerto MIDI OUT Bank: Banco: This is the Bank of the selected MIDI program Este es el banco del programa MIDI seleccionado Channel: Canal: This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Este es el canal MIDI, entre 1 y 16. General MIDI utiliza el canal 10 para sonidos de percusión. Program: Programa: This is the MIDI program Este es el programa MIDI Resolution: Resolución: This is the MIDI time resolution (number of ticks in a quarter note) Esta es la resolución de tiempo MIDI (número de tics por negra) Weak note: Nota débil: This is the sound of the weak notes for the automatic patterns Este es sonido de las notas débiles en el patrón rítmico automático Note duration: Duración: This is the note duration in ticks, when using NOTE OFF events Esta es la duración de las notas en tics, cuando se utilizan eventos NOTE OFF Strong note: Nota fuerte: This is the sound of the strong notes for the automatic patterns Este es el sonido de las notas fuertes en el patrón rítmico automático Optional setting to send NOTE OFF events Opción para emitir eventos NOTE OFF Send NOTE OFF events Emitir eventos NOTE OFF KMetronome 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 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 Error Error Import Patterns Importar patrones Pattern Files (*.pat) Archivos de patrones (*.pat) Export Patterns Exportar patrones Tempo Tempo Enter new Tempo: Introducir nuevo tempo: Automatic the pattern is created automatically Automático Language Changed Idioma cambiado The language for this application is going to change to %1. Do you want to continue? El idioma para esta aplicación va a cambiar a %1. ¿Quiere continuar? KMetronomeWindow Drumstick Metronome Metrónomo Drumstick This button starts playing the rhythm pattern Este botón inicia la reproducción del patrón rítmico Play Reproducir This button stops playing the rhythm pattern Este botón detiene la reproducción del patrón rítmico Stop Parar This button opens the configuration window Este botón abre la ventana de configuración Settings Preferencias This button opens the pattern editor Este botón abre el editor de patrones Patterns Patrones This button exits the program Este botón termina el programa Quit Salir Number of measures (bars) and beats played from beginning Número de compases y partes ejecutadas desde el principio Pattern: Patrón: This is the pattern definition to play, either "Automatic" or a custom defined one. Esta es la definición de patrón que se reproducirá, bien "Automático" o bién una definición personalizada. Beats/Bar: Partes/Compás: 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. Este es el número de partes de cada compás. Valores admisibles entre 1 y 32. Este es el numerador de la especificación de ritmo. Beat Length: Figura rítmica: This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Esta es la duración de una parte rítmica. Los valores significan 1, 2, 4, 8, 16, 32 y 64. Es el denominador de la especificación de ritmo. Whole Redonda Half Blanca Quarter Negra Eighth Corchea Sixteenth Semicorchea Thirty-Second Fusa Sixty-Fourth Semifusa Weak weak notes MIDI velocity Débil Strong strong notes MIDI velocity Fuerte Volume audio volume level Volumen Pan audio panning Balance This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Esta es la velocidad de las notas débiles en el patrón rítmico automático (todas ellas excepto la primera) This is the velocity of the strong note in the automatic rhythm pattern (the first one) Esta es la velocidad de las notas fuertes en el patrón rítmico automático (la primera) This is the MIDI volume control (CC7) Este es el control de volumen (CC7) This is the MIDI pan control (CC10) Este es el control de balance (CC10) This is the musical name of the tempo value Esta es la denominación musical del valor del tempo The current <i>tempo</i> value El valor actual del <i>tempo</i> Tempo (in quarters per minute) Tempo (en negras por minuto) 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>). Este deslizador cambia el <i>tempo</i>, o velocidad del ritmo. Los valores van desde 25 hasta 250 negras por minuto. (<i>unidades del Metrónomo de Mälzel</i>). File Archivo Edit Edición Help Ayuda language idioma toolBar barra de herramientas Import Patterns Importar patrones Export Patterns Exportar patrones Play/Stop Comenzar/Parar Edit Patterns Editar patrones Configuration Configuración about acerca de Ctrl+Q Ctrl+Q Show Action Buttons Mostrar botones de acción Show Toolbar Mostrar barra de herramientas about Qt acerca de Qt Help Contents Contenidos de ayuda QObject Cakewalk Instrument Definition File Archivo de definición de instrumentos de Cakewalk File Archivo Date Fecha SequencerAdapter No connection Sin conexión po/rc.cpp:101 Drag the slider handle to change the tempo, in quarters per minute Arrastre el deslizador para cambiar el tempo, en negras por minuto po/rc.cpp:104 MIDI Metronome Metrónomo MIDI po/rc.cpp:107 This button starts playing the rhythm pattern Este botón inicia la reproducción del patrón rítmico po/rc.cpp:110 Play Reproducir po/rc.cpp:113 This button stops playing the rhythm pattern Este botón detiene la reproducción del patrón rítmico po/rc.cpp:116 Stop Parar po/rc.cpp:119 This button opens the configuration window Este botón abre la ventana de configuración po/rc.cpp:12 Save Guardar po/rc.cpp:122 Settings Preferencias po/rc.cpp:125 This button opens the pattern editor Este botón abre el editor de patrones po/rc.cpp:128 Patterns Patrones po/rc.cpp:131 This button exits the program Este botón termina el programa po/rc.cpp:134 Quit Salir po/rc.cpp:137 Number of measures (bars) and beats played from beginning Número de compases y partes ejecutadas desde el principio po/rc.cpp:140 Pattern: Patrón: po/rc.cpp:143 This is the pattern definition to play, either "Automatic" or a custom defined one. Esta es la definición de patrón que se reproducirá, bien "Automático" o bién una definición personalizada. po/rc.cpp:146 Beats/Bar: Partes/Compás: po/rc.cpp:149 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. Este es el número de partes de cada compás. Valores admisibles entre 1 y 32. Este es el numerador de la especificación de ritmo. po/rc.cpp:15 This button deletes the current pattern definition Este botón borra la definición del patrón actual po/rc.cpp:154 Beat Length: Figura rítmica: po/rc.cpp:157 This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Esta es la duración de una parte rítmica. Los valores significan 1, 2, 4, 8, 16, 32 y 64. Es el denominador de la especificación de ritmo. po/rc.cpp:162 Whole Redonda po/rc.cpp:165 Half Blanca po/rc.cpp:168 Quarter Negra po/rc.cpp:171 Eighth Corchea po/rc.cpp:174 Sixteenth Semicorchea po/rc.cpp:177 Thirty-Second Fusa po/rc.cpp:18 Delete Eliminar po/rc.cpp:180 Sixty-Fourth Semifusa po/rc.cpp:183 Weak Débil po/rc.cpp:186 Strong Fuerte po/rc.cpp:189 Volume Volumen po/rc.cpp:192 Pan Balance po/rc.cpp:195 This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Esta es la velocidad de las notas débiles en el patrón rítmico automático (todas ellas excepto la primera) po/rc.cpp:198 This is the velocity of the strong note in the automatic rhythm pattern (the first one) Esta es la velocidad de las notas fuertes en el patrón rítmico automático (la primera) po/rc.cpp:201 This is the MIDI volume control (CC7) Este es el control de volumen (CC7) po/rc.cpp:204 This is the MIDI pan control (CC10) Este es el control de balance (CC10) po/rc.cpp:207 This is the musical name of the tempo value Esta es la denominación musical del valor del tempo po/rc.cpp:21 Rows: Filas: po/rc.cpp:210 The current <i>tempo</i> value El valor actual del <i>tempo</i> po/rc.cpp:213 Tempo (in quarters per minute) Tempo (en negras por minuto) po/rc.cpp:216 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>). Este deslizador cambia el <i>tempo</i>, o velocidad del ritmo. Los valores van desde 25 hasta 250 negras por minuto. (<i>unidades del Metrónomo de Mälzel</i>). po/rc.cpp:220 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. 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. po/rc.cpp:223 Automatic ports connection on startup Conexión automática de los puertos al iniciar po/rc.cpp:226 Optional input port conn: Conexión de la entrada: po/rc.cpp:229 This is the optional connection for the MIDI IN port. Esta es la conexión opcional del puerto MIDI IN. po/rc.cpp:232 Output port connection: Conexión de la salida: po/rc.cpp:235 This is the mandatory connection for the MIDI OUT port Esta es la conexión obligatoria del puerto MIDI OUT po/rc.cpp:238 Output instrument: Instrumento receptor: po/rc.cpp:24 Use this button to add new rows (sounds) to the current pattern definition Utilice este botón para añadir nuevas filas (sonidos) a la definición de patrón actual po/rc.cpp:241 This is the definition of the instrument connected to the MIDI OUT port Esta es la definición del instrumento conectado al puerto MIDI OUT po/rc.cpp:244 Bank: Banco: po/rc.cpp:247 This is the Bank of the selected MIDI program Este es el banco del programa MIDI seleccionado po/rc.cpp:250 Channel: Canal: po/rc.cpp:253 This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Este es el canal MIDI, entre 1 y 16. General MIDI utiliza el canal 10 para sonidos de percusión. po/rc.cpp:257 Program: Programa: po/rc.cpp:260 This is the MIDI program Este es el programa MIDI po/rc.cpp:263 Resolution: Resolución: po/rc.cpp:266 This is the MIDI time resolution (number of ticks in a quarter note) Esta es la resolución de tiempo MIDI (número de tics por negra) po/rc.cpp:269 Weak note: Nota débil: po/rc.cpp:27 Add Añadir po/rc.cpp:272 This is the sound of the weak notes for the automatic patterns Este es sonido de las notas débiles en el patrón rítmico automático po/rc.cpp:275 Note duration: Duración: po/rc.cpp:278 This is the note duration in ticks, when using NOTE OFF events Esta es la duración de las notas en tics, cuando se utilizan eventos NOTE OFF po/rc.cpp:281 Strong note: Nota fuerte: po/rc.cpp:284 This is the sound of the strong notes for the automatic patterns Este es el sonido de las notas fuertes en el patrón rítmico automático po/rc.cpp:287 Optional setting to send NOTE OFF events Opción para emitir eventos NOTE OFF po/rc.cpp:290 Send NOTE OFF events Emitir eventos NOTE OFF po/rc.cpp:293 If this option is activated, the knobs are drawn using a custom style Si esta opción está seleccionada, los botones rotatorios se dibujarán con un estilo personalizado po/rc.cpp:296 Styled Knobs Botones decorados po/rc.cpp:297 Your names Pedro López-Cabanillas po/rc.cpp:298 Your emails plcl@users.sf.net po/rc.cpp:3 Pattern: Patrón: po/rc.cpp:30 Use this button to remove the selected row (sound) from the pattern definition Utilize este botón para eliminar la fila seleccionada (sonido) de la definición de patrón po/rc.cpp:33 Remove Eliminar po/rc.cpp:36 Beats: Partes: po/rc.cpp:39 Highligh the grid columns while playing Destacar las columnas de la tabla durante la reproducción po/rc.cpp:42 Highlight Columns Destacar Columnas po/rc.cpp:46 This is the current beat number Este es el número de parte actual po/rc.cpp:49 This is the pattern table, beats as columns and sounds as rows Esta es la tabla de patrones, partes como columnas y sonidos como filas po/rc.cpp:52 Number of beats per measure (bar) Número de partes rítmicas por compás po/rc.cpp:55 This is the beat length for the pattern column. Esta es la duración de cada columna del patrón po/rc.cpp:58 Whole Redonda po/rc.cpp:6 Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. po/rc.cpp:61 Half Blanca po/rc.cpp:64 Quarter Negra po/rc.cpp:67 Eighth Corchea po/rc.cpp:70 Sixteenth Semicorchea po/rc.cpp:73 Thirty-Second Fusa po/rc.cpp:76 Sixty-Fourth Semifusa po/rc.cpp:79 This button starts playing the current pattern Este botón inicia la reproducción del patrón rítmico po/rc.cpp:82 Play Reproducir po/rc.cpp:85 This button stops the playback Este botón termina la reproducción po/rc.cpp:88 Stop Parar po/rc.cpp:9 This button stores the current pattern definition with the name given Este botón almacena la definición del patrón actual con el nombre proporcionado po/rc.cpp:91 QPM: quarters per minute NPM: negras por minuto po/rc.cpp:94 QPM: NPM: po/rc.cpp:97 This is the current tempo in quarters per minute Este es el tempo actual (en negras por minuto) src/drumgrid.cpp:278 Do you want to remove the current pattern? ¿Desea eliminar el patrón actual? src/drumgrid.cpp:279 Remove Pattern Eliminar patrón src/drumgrid.cpp:333 Sample Pattern Patrón de ejemplo src/drumgrid.cpp:364 Insert Pattern Row Insertar fila en el patrón src/drumgrid.cpp:365 Drum Key: Sonido de percusión: src/drumgrid.cpp:386 Please select one, and only one row Por favor seleccione una fila, y sólamente una src/drumgrid.cpp:388 Do you want to remove the selected pattern row? ¿Desea eliminar la fila seleccionada del patrón? src/drumgrid.cpp:389 Remove Row Eliminar fila src/drumgrid.cpp:51 Pattern Editor Editor de patrones src/drumgrid.cpp:67 Cut Cortar src/drumgrid.cpp:68 Copy Copiar src/drumgrid.cpp:69 Paste Pegar src/kmetronome.cpp:114 Play/Stop Comenzar/Parar src/kmetronome.cpp:118 Show Action Buttons Mostrar botones de acción src/kmetronome.cpp:125 Patterns Patrones src/kmetronome.cpp:130 Import Patterns Importar patrones src/kmetronome.cpp:135 Export Patterns Exportar patrones src/kmetronome.cpp:497 *.pat|Pattern Files (*.pat) *.pat|Archivos de patrones (*.pat) src/kmetronome.cpp:498 Import Patterns Importar patrones src/kmetronome.cpp:510 *.pat|Pattern Files (*.pat) *.pat|Archivos de patrones (*.pat) src/kmetronome.cpp:511 Export Patterns Exportar patrones src/kmetronome.cpp:527 Patterns Patrones src/kmetronome.cpp:87 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 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 Error Error src/kmetronomeview.cpp:145 Tempo Tempo Enter new Tempo: Introducir nuevo tempo: src/kmetronomeview.cpp:179 Automatic Automático src/kmetropreferences.cpp:29 Preferences Preferencias src/main.cpp:29 KDE MIDI metronome using ALSA sequencer Metrónomo MIDI de KDE utilizando el secuenciador de ALSA src/main.cpp:41 KMetronome KMetronome src/main.cpp:43 (C) 2005-2012 Pedro Lopez-Cabanillas (C) 2005-2012 Pedro Lopez-Cabanillas src/main.cpp:45 Pedro Lopez-Cabanillas Pedro Lopez-Cabanillas src/sequenceradapter.cpp:65 No connection Sin conexión kmetronome-1.0.1/translations/PaxHeaders.3594/CMakeLists.txt0000644000000000000000000000013213560310264020633 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/translations/CMakeLists.txt0000644000175000001440000000041113560310264021476 0ustar00pedrousers00000000000000SET( TRANSLATIONS_FILES cs.ts de.ts es.ts fr.ts tr.ts ) QT5_ADD_TRANSLATION(QM_FILES ${TRANSLATIONS_FILES}) ADD_CUSTOM_TARGET(translations ALL DEPENDS ${QM_FILES}) INSTALL( FILES ${QM_FILES} DESTINATION share/kmetronome/locale ) kmetronome-1.0.1/translations/PaxHeaders.3594/cs.ts0000644000000000000000000000013213560310264017050 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/translations/cs.ts0000644000175000001440000016265013560310264017731 0ustar00pedrousers00000000000000 About <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style="font-family:'Sans Serif'; font-size:12pt; font-style:normal;"><p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version: %1<br/>Build date: %2<br/>Build time: %3<br/>Compiler: %4</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style="font-family:'Sans Serif'; font-size:12pt; font-style:normal;"><p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Verze: %1<br/>Datum sestavení: %2<br/>Čas sestavení: %3<br/>Překladač: %4</p></body></html> AboutClass About O programu <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Drumstick Metronome</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Drumstick Metronome</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">This program is free software; you can redistribute 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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">Tento program je svobodným softwarem; můžete jej rozdávat a/nebo upravovat za podmínek GNU General Public License (GPL), jak jsou zveřejněny Free Software Foundation; buď ve verzi 2 licence, nebo (podle své volby) v kterékoli pozdější verzi.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">Tento program je šířen v naději, že bude užitečný, ale BEZ JAKÉKOLI ZÁRUKY; také bez předpokládané záruky PRODEJNOSTI nebo POUŽITELNOSTI PRO NĚJAKÝ URČITÝ ÚČEL: Více podrobností naleznete v GNU Library General Public License.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">Kopii GNU Library General Public License byste měl obdržet společně s tímto balíkem; a pokud ne, napište Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.</span></p></body></html> DrumGrid Rows: Řádky: Use this button to add new rows (sounds) to the current pattern definition Použijte toto tlačítko pro přidání nových řádků (zvuků) do vymezení současného vzoru Add Přidat Use this button to remove the selected row (sound) from the pattern definition Toto tlačítko použijte pro odstranění vybraného řádku (zvuku) z vymezení současného vzoru Remove Odstranit Beats: Doby: Highligh the grid columns while playing Zvýraznit sloupce mřížky při přehrávání Highlight Columns Zvýraznit Sloupce This is the current beat number Toto je číslo nynější doby Pattern: Vzor: Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. This button stores the current pattern definition with the name given Tímto tlačítkem se ukládá vymezení současného vzoru se zadaným názvem Save Uložit This button deletes the current pattern definition Tímto tlačítkem se maže vymezení současného vzoru Delete Smazat Number of beats per measure (bar) Počet dob na takt This is the beat length for the pattern column. Toto je délka doby pro sloupec vzoru. Whole Celá Half Půlová Quarter Čtvrtina Eighth Osmina Sixteenth Šestnáctina Thirty-Second Dvaatřicetina Sixty-Fourth Čtyřiašedesátina This button starts playing the current pattern Tímto tlačítkem se spouští přehrávání současného vzoru Play Přehrát This button stops the playback Tímto tlačítkem se zastavuje přehrávání Stop Zastavit QPM: quarters per minute ČZM: čtvrtin za minutu QPM: Quarters per Minute ČZM: This is the current tempo in quarters per minute Toto je nynější tempo ve čtvrtinách za minutu Drag the slider handle to change the tempo, in quarters per minute Táhněte posuvníkem pro změnu tempa, ve čtvrtinách za minutu This is the pattern table, beats as columns and sounds as rows Toto je tabulka vzoru, doby jako sloupce a zvuky jako řádky Pattern Editor Editor vzorů Cut Vyjmout Copy Kopírovat Paste Vložit Remove Pattern Odstranit vzor Do you want to remove the current pattern? Chcete odstranit současný vzor? Sample Pattern name of an automatically created pattern Ukázkový vzor Insert Pattern Row Vložit řádek se vzorem Drum Key: Tónina bubnu: Sorry Promiňte Please select one, and only one row Vyberte, prosím, jeden, a pouze jeden řádek Remove Row Odstranit řádek Do you want to remove the selected pattern row? Chcete odstranit vybraný vzor nyní? KMetroPreferences Preferences Nastavení KMetroPreferencesBase 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. 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. Automatic ports connection on startup Automatické spojení přípojek při spuštění Optional input port conn: Volitelné spojení vstupní přípojky: This is the optional connection for the MIDI IN port. Toto je volitelné spojení pro vstupní přípojku MIDI. Output port connection: Spojení výstupní přípojky: This is the mandatory connection for the MIDI OUT port Toto je povinné spojení pro výstupní přípojku MIDI Output instrument: Výstupní nástroj: This is the definition of the instrument connected to the MIDI OUT port Toto je vymezení nástroje spojeného s výstupní přípojkou MIDI Bank: Banka: This is the Bank of the selected MIDI program Toto je banka vybraného programu MIDI Channel: Kanál: This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Toto je kanál MIDI, mezi 1 a 16. Obecné MIDI používá pro zvuky bicích nástrojů kanál 10. Program: Program: This is the MIDI program Toto je program MIDI Resolution: Rozlišení: This is the MIDI time resolution (number of ticks in a quarter note) Toto je rozlišení času MIDI (počet tiknutí ve čtvrťové notě) Weak note: Slabá nota: This is the sound of the weak notes for the automatic patterns Toto je zvuk slabých not pro automatické vzory Note duration: Doba trvání noty: This is the note duration in ticks, when using NOTE OFF events Toto je doba trvání noty v tiknutích, když se používají události NOTA VYPNUTA Strong note: Silná nota: This is the sound of the strong notes for the automatic patterns Toto je zvuk silných not pro automatické vzory Optional setting to send NOTE OFF events Volitelné nastavení pro poslání událostí NOTA VYPNUTA Send NOTE OFF events Poslat události NOTA VYPNUTA KMetronome 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 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 Error Chyba Import Patterns Zavést vzory Pattern Files (*.pat) Soubory se vzory (*.pat) Export Patterns Vyvést vzory Tempo Tempo Enter new Tempo: Zadat nové tempo: Automatic the pattern is created automatically Automaticky Language Changed Jazyk změněn The language for this application is going to change to %1. Do you want to continue? Jazyk tohoto programu bude změněn na %1. Chcete pokračovat? KMetronomeWindow Drumstick Metronome Drumstick Metronome This button starts playing the rhythm pattern Tímto tlačítkem se spouští přehrávání rytmického vzoru Play Přehrát This button stops playing the rhythm pattern Tímto tlačítkem se zastavuje přehrávání rytmického vzoru Stop Zastavit This button opens the configuration window Tímto tlačítkem se otevírá okno s nastavením Settings Nastavení This button opens the pattern editor Tímto tlačítkem se otevírá editor vzoru Patterns Vzory This button exits the program Tímto tlačítkem se program ukončuje Quit Ukončit Number of measures (bars) and beats played from beginning Počet taktů a dob přehrávaných od začátku Pattern: Vzor: This is the pattern definition to play, either "Automatic" or a custom defined one. Toto je vymezení vzoru pro hru, stanoveného buď "Automaticky", nebo uživatelsky. Beats/Bar: Doby/Takt: 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. Toto je počet dob pro každý takt Hodnoty jsou od 1 do 32 Je to čitatel zadání taktového označení. Beat Length: Délka doby: This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Toto je délka doby. Hodnoty znamenají 1, 2, 4, 8, 16, 32 a 64. Je to jmenovatel zadání taktového označení. Whole Celá Half Půlová Quarter Čtvrtina Eighth Osmina Sixteenth Šestnáctina Thirty-Second Dvaatřicetina Sixty-Fourth Čtyřiašedesátina Weak weak notes MIDI velocity Slabá Strong strong notes MIDI velocity Silná Volume audio volume level Hlasitost Pan audio panning Vyvážení This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Toto je síla tónu slabých not v automatickém rytmickém vzoru (všechny kromě první) This is the velocity of the strong note in the automatic rhythm pattern (the first one) Toto je síla tónu silné noty v automatickém rytmickém vzoru (první) This is the MIDI volume control (CC7) Toto je ovládání hlasitosti MIDI (CC7) This is the MIDI pan control (CC10) Toto je ovládání vyvážení MIDI (CC10) This is the musical name of the tempo value Toto je hudební název pro hodnotu tempa The current <i>tempo</i> value Nynější hodnota pro <i>tempo</i> Tempo (in quarters per minute) Tempo (ve čtvrtinách za minutu) 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>). Posuvníkem se mění <i>tempo</i>, nebo rychlost rytmu. Hodnoty jsou 25 až 250 čtvrtin za minutu. (<i>jednotky metronomu Mälzel</i>). File Soubor Edit Úpravy Help Nápověda language Jazyk toolBar Nástrojový pruh Import Patterns Zavést vzory Export Patterns Vyvést vzory Play/Stop Přehrát/Zastavit Edit Patterns Upravit vzory Configuration Nastavení about O programu Ctrl+Q Ctrl+Q Show Action Buttons Ukázat tlačítka činností Show Toolbar Ukázat nástrojový pruh about Qt O Qt Help Contents Obsah nápovědy QObject Cakewalk Instrument Definition File Soubor s definicí nástroje Cakewalk File Soubor Date Datum SequencerAdapter No connection Žádné spojení po/rc.cpp:101 Drag the slider handle to change the tempo, in quarters per minute Táhněte posuvníkem pro změnu tempa, ve čtvrtinách za minutu po/rc.cpp:104 MIDI Metronome MIDI metronom po/rc.cpp:107 This button starts playing the rhythm pattern Tímto tlačítkem se spouští přehrávání rytmického vzoru po/rc.cpp:110 Play Přehrát po/rc.cpp:113 This button stops playing the rhythm pattern Tímto tlačítkem se zastavuje přehrávání rytmického vzoru po/rc.cpp:116 Stop Zastavit po/rc.cpp:119 This button opens the configuration window Tímto tlačítkem se otevírá okno s nastavením po/rc.cpp:12 Save Uložit po/rc.cpp:122 Settings Nastavení po/rc.cpp:125 This button opens the pattern editor Tímto tlačítkem se otevírá editor vzoru po/rc.cpp:128 Patterns Vzory po/rc.cpp:131 This button exits the program Tímto tlačítkem se program ukončuje po/rc.cpp:134 Quit Ukončit po/rc.cpp:137 Number of measures (bars) and beats played from beginning Počet taktů a dob přehrávaných od začátku po/rc.cpp:140 Pattern: Vzor: po/rc.cpp:143 This is the pattern definition to play, either "Automatic" or a custom defined one. Toto je vymezení vzoru pro hru, stanoveného buď "Automaticky", nebo uživatelsky. po/rc.cpp:146 Beats/Bar: Doby/Takt: po/rc.cpp:149 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. Toto je počet dob pro každý takt Hodnoty jsou od 1 do 32 Je to čitatel zadání taktového označení. po/rc.cpp:15 This button deletes the current pattern definition Tímto tlačítkem se maže vymezení současného vzoru po/rc.cpp:154 Beat Length: Délka doby: po/rc.cpp:157 This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Toto je délka doby. Hodnoty znamenají 1, 2, 4, 8, 16, 32 a 64. Je to jmenovatel zadání taktového označení. po/rc.cpp:162 Whole Celá po/rc.cpp:165 Half Půlová po/rc.cpp:168 Quarter Čtvrtina po/rc.cpp:171 Eighth Osmina po/rc.cpp:174 Sixteenth Šestnáctina po/rc.cpp:177 Thirty-Second Dvaatřicetina po/rc.cpp:18 Delete Smazat po/rc.cpp:180 Sixty-Fourth Čtyřiašedesátina po/rc.cpp:183 Weak Slabý po/rc.cpp:186 Strong Silný po/rc.cpp:189 Volume Hlasitost po/rc.cpp:192 Pan Vyváženost po/rc.cpp:195 This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Toto je rychlost slabých not v automatickém rytmickém vzoru (všechny kromě první) po/rc.cpp:198 This is the velocity of the strong note in the automatic rhythm pattern (the first one) Toto je rychlost silné noty v automatickém rytmickém vzoru (první) po/rc.cpp:201 This is the MIDI volume control (CC7) Toto je ovládání hlasitosti MIDI (CC7) po/rc.cpp:204 This is the MIDI pan control (CC10) Toto je ovládání vyrovnání MIDI (CC10) po/rc.cpp:207 This is the musical name of the tempo value Toto je hudební název pro hodnotu tempa po/rc.cpp:21 Rows: Řádky: po/rc.cpp:210 The current <i>tempo</i> value Nynější hodnota pro <i>tempo</i> po/rc.cpp:213 Tempo (in quarters per minute) Tempo (ve čtvrtinách za minutu) po/rc.cpp:216 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>). Posuvníkem se mění <i>tempo</i>, nebo rychlost rytmu. Hodnoty jsou 25 až 250 čtvrtin za minutu. (<i>jednotky metronomu Mälzel</i>). po/rc.cpp:220 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. 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. po/rc.cpp:223 Automatic ports connection on startup Automatické spojení přípojek při spuštění po/rc.cpp:226 Optional input port conn: Volitelné spojení vstupní přípojky: po/rc.cpp:229 This is the optional connection for the MIDI IN port. Toto je volitelné spojení pro vstupní přípojku MIDI. po/rc.cpp:232 Output port connection: Spojení výstupní přípojky: po/rc.cpp:235 This is the mandatory connection for the MIDI OUT port Toto je povinné spojení pro výstupní přípojku MIDI po/rc.cpp:238 Output instrument: Výstupní nástroj: po/rc.cpp:24 Use this button to add new rows (sounds) to the current pattern definition Použijte toto tlačítko pro přidání nových řádků (zvuků) do vymezení současného vzoru po/rc.cpp:241 This is the definition of the instrument connected to the MIDI OUT port Toto je vymezení nástroje spojeného s výstupní přípojkou MIDI po/rc.cpp:244 Bank: Banka: po/rc.cpp:247 This is the Bank of the selected MIDI program Toto je banka vybraného programu MIDI po/rc.cpp:250 Channel: Kanál: po/rc.cpp:253 This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Toto je kanál MIDI, mezi 1 a 16. Obecné MIDI používá pro zvuky bicích nástrojů kanál 10. po/rc.cpp:257 Program: Program: po/rc.cpp:260 This is the MIDI program Toto je program MIDI po/rc.cpp:263 Resolution: Rozlišení: po/rc.cpp:266 This is the MIDI time resolution (number of ticks in a quarter note) Toto je rozlišení času MIDI (počet tiknutí ve čtvrťové notě) po/rc.cpp:269 Weak note: Slabá nota: po/rc.cpp:27 Add Přidat po/rc.cpp:272 This is the sound of the weak notes for the automatic patterns Toto je zvuk slabých not pro automatické vzory po/rc.cpp:275 Note duration: Doba trvání noty: po/rc.cpp:278 This is the note duration in ticks, when using NOTE OFF events Toto je doba trvání noty v tiknutích, když se používají události NOTA VYPNUTA po/rc.cpp:281 Strong note: Silná nota: po/rc.cpp:284 This is the sound of the strong notes for the automatic patterns Toto je zvuk silných not pro automatické vzory po/rc.cpp:287 Optional setting to send NOTE OFF events Volitelné nastavení pro poslání událostí NOTA VYPNUTA po/rc.cpp:290 Send NOTE OFF events Poslat události NOTA VYPNUTA po/rc.cpp:293 If this option is activated, the knobs are drawn using a custom style Pokud je zapnuta tato volba, otočné knoflíky se vykreslují za použití vlastního stylu po/rc.cpp:296 Styled Knobs Stylizované knoflíky po/rc.cpp:297 Your names Pavel Fric po/rc.cpp:298 Your emails fripohled.blogspot.com po/rc.cpp:3 Pattern: Vzor: po/rc.cpp:30 Use this button to remove the selected row (sound) from the pattern definition Toto tlačítko použijte pro odstranění vybraného řádku (zvuku) z vymezení současného vzoru po/rc.cpp:33 Remove Odstranit po/rc.cpp:36 Beats: Doby: po/rc.cpp:39 Highligh the grid columns while playing Zvýraznit sloupce mřížky při přehrávání po/rc.cpp:42 Highlight Columns Zvýraznit Sloupce po/rc.cpp:46 This is the current beat number Toto je číslo nynější doby po/rc.cpp:49 This is the pattern table, beats as columns and sounds as rows Toto je tabulka vzoru, doby jako sloupce a zvuky jako řádky po/rc.cpp:52 Number of beats per measure (bar) Počet dob na takt po/rc.cpp:55 This is the beat length for the pattern column. Toto je délka doby pro sloupec vzoru. po/rc.cpp:58 Whole Celá po/rc.cpp:6 Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. po/rc.cpp:61 Half Půlová po/rc.cpp:64 Quarter Čtvrtina po/rc.cpp:67 Eighth Osmina po/rc.cpp:70 Sixteenth Šestnáctina po/rc.cpp:73 Thirty-Second Dvaatřicetina po/rc.cpp:76 Sixty-Fourth Čtyřiašedesátina po/rc.cpp:79 This button starts playing the current pattern Tímto tlačítkem se spouští přehrávání současného vzoru po/rc.cpp:82 Play Přehrát po/rc.cpp:85 This button stops the playback Tímto tlačítkem se zastavuje přehrávání po/rc.cpp:88 Stop Zastavit po/rc.cpp:9 This button stores the current pattern definition with the name given Tímto tlačítkem se ukládá vymezení současného vzoru se zadaným názvem po/rc.cpp:91 QPM: quarters per minute ČZM: čtvrtin za minutu po/rc.cpp:94 QPM: ČZM: po/rc.cpp:97 This is the current tempo in quarters per minute Toto je nynější tempo ve čtvrtinách za minutu) src/drumgrid.cpp:278 Do you want to remove the current pattern? Chcete odstranit současný vzor? src/drumgrid.cpp:279 Remove Pattern Odstranit vzor src/drumgrid.cpp:333 Sample Pattern Ukázkový vzor src/drumgrid.cpp:364 Insert Pattern Row Vložit vzor nyní src/drumgrid.cpp:365 Drum Key: Tónina bubnu: src/drumgrid.cpp:386 Please select one, and only one row Vyberte, prosím, jednu, a pouze jeden řádek src/drumgrid.cpp:388 Do you want to remove the selected pattern row? Chcete odstranit vybraný vzor nyní? src/drumgrid.cpp:389 Remove Row Odstranit řádek src/drumgrid.cpp:51 Pattern Editor Editor vzorů src/drumgrid.cpp:67 Cut src/drumgrid.cpp:68 Copy src/drumgrid.cpp:69 Paste Vzory src/kmetronome.cpp:114 Play/Stop Přehrát/Zastavit src/kmetronome.cpp:118 Show Action Buttons Ukázat tlačítka činností src/kmetronome.cpp:125 Patterns Vzory src/kmetronome.cpp:130 Import Patterns Zavést vzory src/kmetronome.cpp:135 Export Patterns Vyvést vzory src/kmetronome.cpp:497 *.pat|Pattern Files (*.pat) *.pat|Soubory se vzory (*.pat) src/kmetronome.cpp:498 Import Patterns Zavést vzory src/kmetronome.cpp:510 *.pat|Pattern Files (*.pat) *.pat|Soubory se vzory (*.pat) src/kmetronome.cpp:511 Export Patterns Vyvést vzory src/kmetronome.cpp:527 Patterns Vzory src/kmetronome.cpp:87 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 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 Error Chyba src/kmetronomeview.cpp:145 Tempo Tempo Enter new Tempo: Zadat nové tempo: src/kmetronomeview.cpp:179 Automatic Automaticky src/kmetropreferences.cpp:29 Preferences Nastavení src/main.cpp:29 KDE MIDI metronome using ALSA sequencer Metronom MIDI pro prostředí KDE používající sekvencer ALSA src/main.cpp:41 KMetronome KMetronome src/main.cpp:43 (C) 2005-2012 Pedro Lopez-Cabanillas (C) 2005-2012 Pedro Lopez-Cabanillas src/main.cpp:45 Pedro Lopez-Cabanillas Pedro Lopez-Cabanillas src/sequenceradapter.cpp:65 No connection Žádné spojení kmetronome-1.0.1/translations/PaxHeaders.3594/tr.ts0000644000000000000000000000013213560310264017070 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/translations/tr.ts0000644000175000001440000016364213560310264017753 0ustar00pedrousers00000000000000 About <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style="font-family:'Sans Serif'; font-size:12pt; font-style:normal;"><p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version: %1<br/>Build date: %2<br/>Build time: %3<br/>Compiler: %4</p></body></html> AboutClass About <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Drumstick Metronome</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">This program is free software; you can redistribute 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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p></body></html> DrumGrid Rows: Sıralar: Use this button to add new rows (sounds) to the current pattern definition Bu düğmeyi şu anki kalıp tanımına yeni sıralar (sesler) eklemek için kullanın Add Ekle Use this button to remove the selected row (sound) from the pattern definition Bu düğmeyi şu anki kalıp tanımından seçilmiş sırayı (sesleri) kaldırmak için kullanın Remove Kaldır Beats: Vuruşlar: Highligh the grid columns while playing Çalarken ızgara sütünlarını vurgula Highlight Columns Sütunları Vurgula This is the current beat number Şu anki vuruş sayısıdır Pattern: Kalıp: Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. This button stores the current pattern definition with the name given Bu düğme şu anki kalıp tanımını yükler ve verilen başlığı kullanır Save Kaydet This button deletes the current pattern definition Bu düğme şu anki kalıp tanımını siler Delete Sil Number of beats per measure (bar) Ölçü başına düşen vuruş sayısı This is the beat length for the pattern column. Bu, kalıp sütununda yer alan vuruş uzunluğudur. Whole Birlik süre Half İkilik süre Quarter Dörtlük süre Eighth Sekizlik süre Sixteenth Onaltılık süre Thirty-Second Otuz-ikilik süre Sixty-Fourth Atmış-dörtlük süre This button starts playing the current pattern Bu düğme bu kalıbın çalmasını başlatır Play Çal This button stops the playback Bu düğme çalmayı durdurur Stop Dur QPM: quarters per minute QPM: dakika başına düşen vuruş sayısı QPM: Quarters per Minute QPM: This is the current tempo in quarters per minute Bu, dakika başına düşen şu anki tempodur Drag the slider handle to change the tempo, in quarters per minute Tempoyu değiştirmek için dakika başına dörtlük olarak kaydırgaçı sürükleyiniz, This is the pattern table, beats as columns and sounds as rows Bu, vuruşların sütunlarla ve seslerin sıralar halinde gösterildiği kalıp tablosudur Pattern Editor Kalıp Düzenleyici Cut Copy Paste Kalıplar Remove Pattern Kalıbı Kaldır Do you want to remove the current pattern? Bu kalıbı kaldırmak istiyor musunuz? Sample Pattern name of an automatically created pattern Örnek Kalıp Insert Pattern Row Kalıp Sırası Ekle Drum Key: Davul Tuşu Sorry Please select one, and only one row Lütfen, sadece ve sadece bir sıra seçiniz Remove Row Sırayı Kaldır Do you want to remove the selected pattern row? Seçili kalıbı sırasını kaldırmak istiyor musunuz? KMetroPreferences Preferences Tercihler KMetroPreferencesBase 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. 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. Automatic ports connection on startup Yeniden başlarken otomatik port bağlantıları yapılsın Optional input port conn: Opsiyonel giriş portu conn değeri: This is the optional connection for the MIDI IN port. Bu MIDI IN portu için opsiyonel bağlantıdır. Output port connection: Çıkış portu bağlantısı: This is the mandatory connection for the MIDI OUT port MIDI OUT portu için zorunlu bağlantıdır Output instrument: Çıkış çalgısı: This is the definition of the instrument connected to the MIDI OUT port Bu, MIDI OUT portuna bağlı olan çalgının tanımıdır Bank: Ses Bankası: This is the Bank of the selected MIDI program Bu, seçili MIDI programının Ses Bankasıdır Channel: Kanal: This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Bu, 1 ile 16 arasındaki MIDI kanalıdır. General MIDI vurma çalgı sesleri için 10 numaralı kanalı kullanır. Program: Program: This is the MIDI program Bu MIDI programıdır Resolution: Çözünürlük: This is the MIDI time resolution (number of ticks in a quarter note) Bu, MIDI zaman çözünürlüğüdür (dörtlük notadaki tıkların sayısı) Weak note: Zayıf nota: This is the sound of the weak notes for the automatic patterns Bu, otomatik kalıplardaki zayıf notaların sesidir Note duration: Nota süresi: This is the note duration in ticks, when using NOTE OFF events BU, NOTE OFF seçeneği kullanıldığında, tıklardaki nota süresidir Strong note: Kuvvetli nota: This is the sound of the strong notes for the automatic patterns Bu, otomatik kalıplardaki kuvvetli notaların sesidir Optional setting to send NOTE OFF events NOTE OFF seçimi gönderildiğindeki seçimlik ayarlar Send NOTE OFF events NOTE OFF olaylarını gönder KMetronome 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 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 Error Hata Import Patterns Kalıpları İçeri Aktar Pattern Files (*.pat) Export Patterns Kalıpları Dışarı Aktar Tempo Tempo Enter new Tempo: Yeni Tempo Giriniz: Automatic the pattern is created automatically Otomatik Language Changed The language for this application is going to change to %1. Do you want to continue? KMetronomeWindow Drumstick Metronome This button starts playing the rhythm pattern Bu düğme ritm kalıbının çalmasını başlatır Play Çal This button stops playing the rhythm pattern Bu düğme ritm kalıbının çalmasını durdurur Stop Dur This button opens the configuration window Bu düğme yapılandırma penceresini açar Settings Ayarlar This button opens the pattern editor Bu düğme kalıp düzenleyicisini açar Patterns Kalıplar This button exits the program Bu düğme programdan çıkılmasını sağlar Quit Çık Number of measures (bars) and beats played from beginning Baştan itibaren çalınan ölçü ve vuruşların sayısı Pattern: Kalıp: This is the pattern definition to play, either "Automatic" or a custom defined one. Bu, çalınacak kalıbın tanımıdır, bunu "Otomatik" olarak ayarlayabileceğiniz gibi tanımı kendiniz de oluşturabilirsiniz. Beats/Bar: Vuruşlar/Ölçüler: 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. Bu, her ölçüdeki vuruşların sayısıdır. Değerler 1 ile 32 arasındadır. Ölçü birimi özelliğinin sayısal göstergesidir. Beat Length: Vuruş Uzunluğu: This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Bu, vuruş süresidir. Değerler 1, 2, 4, 8, 16, 32 ve 64 arasındadır. Bunlar, ölçü birimi içindeki alt sürelerin özellikleridir. Whole Birlik süre Half İkilik süre Quarter Dörtlük süre Eighth Sekizlik süre Sixteenth Onaltılık süre Thirty-Second Otuz-ikilik süre Sixty-Fourth Atmış-dörtlük süre Weak weak notes MIDI velocity Zayıf Strong strong notes MIDI velocity Kuvvetli Volume audio volume level Gürlük Pan audio panning Pan This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Bu, otomatik ritm kalıbındaki zayıf notanın seslendirme gücüdür (ilki dışındaki tüm notaların) This is the velocity of the strong note in the automatic rhythm pattern (the first one) Bu, otomatik ritm kalıbındaki kuvvetli notanın seslendirme gücüdür (ilk vuruşun) This is the MIDI volume control (CC7) Bu MIDI ses denetimidir (CC7) This is the MIDI pan control (CC10) Bu MIDI pan denetimidir (CC10) This is the musical name of the tempo value Bu, tempo değerinin müziksel adıdır The current <i>tempo</i> value Geçerli <i>tempo</i> değeri Tempo (in quarters per minute) Tempo (dakika başına dörtlük süre) 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>). Kaydırgaç, <i>tempoyu</i>, veya ritmin hızını değiştirir. Değerler dakika başına 25 ile 250 dörtlüktür. (<i>Maelzel Metronom birimine göre</i>) File Edit Help language toolBar Import Patterns Kalıpları İçeri Aktar Export Patterns Kalıpları Dışarı Aktar Play/Stop Çal/Dur Edit Patterns Configuration about Ctrl+Q Show Action Buttons Eylem Düğmelerini Göster Show Toolbar about Qt Help Contents QObject Cakewalk Instrument Definition File File Date SequencerAdapter No connection Bağlantı Kurulamadı po/rc.cpp:101 Drag the slider handle to change the tempo, in quarters per minute Tempoyu değiştirmek için dakika başına dörtlük olarak kaydırgaçı sürükleyiniz, po/rc.cpp:104 MIDI Metronome MIDI Metronome po/rc.cpp:107 This button starts playing the rhythm pattern Bu düğme ritm kalıbının çalmasını başlatır po/rc.cpp:110 Play Çal po/rc.cpp:113 This button stops playing the rhythm pattern Bu düğme ritm kalıbının çalmasını durdurur po/rc.cpp:116 Stop Dur po/rc.cpp:119 This button opens the configuration window Bu düğme yapılandırma penceresini açar po/rc.cpp:12 Save Kaydet po/rc.cpp:122 Settings Ayarlar po/rc.cpp:125 This button opens the pattern editor Bu düğme kalıp düzenleyicisini açar po/rc.cpp:128 Patterns Kalıplar po/rc.cpp:131 This button exits the program Bu düğme programdan çıkılmasını sağlar po/rc.cpp:134 Quit Çık po/rc.cpp:137 Number of measures (bars) and beats played from beginning Baştan itibaren çalınan ölçü ve vuruşların sayısı po/rc.cpp:140 Pattern: Kalıp: po/rc.cpp:143 This is the pattern definition to play, either "Automatic" or a custom defined one. Bu, çalınacak kalıbın tanımıdır, bunu "Otomatik" olarak ayarlayabileceğiniz gibi tanımı kendiniz de oluşturabilirsiniz. po/rc.cpp:146 Beats/Bar: Vuruşlar/Ölçüler: po/rc.cpp:149 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. Bu, her ölçüdeki vuruşların sayısıdır. Değerler 1 ile 32 arasındadır. Ölçü birimi özelliğinin sayısal göstergesidir. po/rc.cpp:15 This button deletes the current pattern definition Bu düğme şu anki kalıp tanımını siler po/rc.cpp:154 Beat Length: Vuruş Uzunluğu: po/rc.cpp:157 This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Bu, vuruş süresidir. Değerler 1, 2, 4, 8, 16, 32 ve 64 arasındadır. Bunlar, ölçü birimi içindeki alt sürelerin özellikleridir. po/rc.cpp:162 Whole Birlik süre po/rc.cpp:165 Half İkilik süre po/rc.cpp:168 Quarter Dörtlük süre po/rc.cpp:171 Eighth Sekizlik süre po/rc.cpp:174 Sixteenth Onaltılık süre po/rc.cpp:177 Thirty-Second Otuz-ikilik süre po/rc.cpp:18 Delete Sil po/rc.cpp:180 Sixty-Fourth Atmış-dörtlük süre po/rc.cpp:183 Weak Zayıf po/rc.cpp:186 Strong Kuvvetli po/rc.cpp:189 Volume Gürlük po/rc.cpp:192 Pan Pan po/rc.cpp:195 This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Bu, otomatik ritm kalıbındaki zayıf notanın seslendirme gücüdür (ilki dışındaki tüm notaların) po/rc.cpp:198 This is the velocity of the strong note in the automatic rhythm pattern (the first one) Bu, otomatik ritm kalıbındaki kuvvetli notanın seslendirme gücüdür (ilk vuruşun) po/rc.cpp:201 This is the MIDI volume control (CC7) Bu MIDI ses denetimidir (CC7) po/rc.cpp:204 This is the MIDI pan control (CC10) Bu MIDI pan denetimidir (CC10) po/rc.cpp:207 This is the musical name of the tempo value Bu, tempo değerinin müziksel adıdır po/rc.cpp:21 Rows: Sıralar: po/rc.cpp:210 The current <i>tempo</i> value Geçerli <i>tempo</i> değeri po/rc.cpp:213 Tempo (in quarters per minute) Tempo (dakika başına dörtlük süre) po/rc.cpp:216 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>). Kaydırgaç, <i>tempoyu</i>, veya ritmin hızını değiştirir. Değerler dakika başına 25 ile 250 dörtlüktür. (<i>Maelzel Metronom birimine göre</i>) po/rc.cpp:220 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. 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. po/rc.cpp:223 Automatic ports connection on startup Yeniden başlarken otomatik port bağlantıları yapılsın po/rc.cpp:226 Optional input port conn: Opsiyonel giriş portu conn değeri: po/rc.cpp:229 This is the optional connection for the MIDI IN port. Bu MIDI IN portu için opsiyonel bağlantıdır. po/rc.cpp:232 Output port connection: Çıkış portu bağlantısı: po/rc.cpp:235 This is the mandatory connection for the MIDI OUT port MIDI OUT portu için zorunlu bağlantıdır po/rc.cpp:238 Output instrument: Çıkış çalgısı: po/rc.cpp:24 Use this button to add new rows (sounds) to the current pattern definition Bu düğmeyi şu anki kalıp tanımına yeni sıralar (sesler) eklemek için kullanın po/rc.cpp:241 This is the definition of the instrument connected to the MIDI OUT port Bu, MIDI OUT portuna bağlı olan çalgının tanımıdır po/rc.cpp:244 Bank: Ses Bankası: po/rc.cpp:247 This is the Bank of the selected MIDI program Bu, seçili MIDI programının Ses Bankasıdır po/rc.cpp:250 Channel: Kanal: po/rc.cpp:253 This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Bu, 1 ile 16 arasındaki MIDI kanalıdır. General MIDI vurma çalgı sesleri için 10 numaralı kanalı kullanır. po/rc.cpp:257 Program: Program: po/rc.cpp:260 This is the MIDI program Bu MIDI programıdır po/rc.cpp:263 Resolution: Çözünürlük: po/rc.cpp:266 This is the MIDI time resolution (number of ticks in a quarter note) Bu, MIDI zaman çözünürlüğüdür (dörtlük notadaki tıkların sayısı) po/rc.cpp:269 Weak note: Zayıf nota: po/rc.cpp:27 Add Ekle po/rc.cpp:272 This is the sound of the weak notes for the automatic patterns Bu, otomatik kalıplardaki zayıf notaların sesidir po/rc.cpp:275 Note duration: Nota süresi: po/rc.cpp:278 This is the note duration in ticks, when using NOTE OFF events BU, NOTE OFF seçeneği kullanıldığında, tıklardaki nota süresidir po/rc.cpp:281 Strong note: Kuvvetli nota: po/rc.cpp:284 This is the sound of the strong notes for the automatic patterns Bu, otomatik kalıplardaki kuvvetli notaların sesidir po/rc.cpp:287 Optional setting to send NOTE OFF events NOTE OFF seçimi gönderildiğindeki seçimlik ayarlar po/rc.cpp:290 Send NOTE OFF events NOTE OFF olaylarını gönder po/rc.cpp:293 If this option is activated, the knobs are drawn using a custom style Eğer bu seçenek etkinse, düğmeler özelleştirilmiş stili kullanacaklardır po/rc.cpp:296 Styled Knobs Stilize Düğmeler po/rc.cpp:297 Your names Server Acim po/rc.cpp:298 Your emails serveracim@gmail.com po/rc.cpp:3 Pattern: Kalıp: po/rc.cpp:30 Use this button to remove the selected row (sound) from the pattern definition Bu düğmeyi şu anki kalıp tanımından seçilmiş sırayı (sesleri) kaldırmak için kullanın po/rc.cpp:33 Remove Kaldır po/rc.cpp:36 Beats: Vuruşlar: po/rc.cpp:39 Highligh the grid columns while playing Çalarken ızgara sütünlarını vurgula po/rc.cpp:42 Highlight Columns Sütunları Vurgula po/rc.cpp:46 This is the current beat number Şu anki vuruş sayısıdır po/rc.cpp:49 This is the pattern table, beats as columns and sounds as rows Bu, vuruşların sütunlarla ve seslerin sıralar halinde gösterildiği kalıp tablosudur po/rc.cpp:52 Number of beats per measure (bar) Ölçü başına düşen vuruş sayısı po/rc.cpp:55 This is the beat length for the pattern column. Bu, kalıp sütununda yer alan vuruş uzunluğudur. po/rc.cpp:58 Whole Birlik süre po/rc.cpp:6 Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. po/rc.cpp:61 Half İkilik süre po/rc.cpp:64 Quarter Dörtlük süre po/rc.cpp:67 Eighth Sekizlik süre po/rc.cpp:70 Sixteenth Onaltılık süre po/rc.cpp:73 Thirty-Second Otuz-ikilik süre po/rc.cpp:76 Sixty-Fourth Atmış-dörtlük süre po/rc.cpp:79 This button starts playing the current pattern Bu düğme bu kalıbın çalmasını başlatır po/rc.cpp:82 Play Çal po/rc.cpp:85 This button stops the playback Bu düğme çalmayı durdurur po/rc.cpp:88 Stop Dur po/rc.cpp:9 This button stores the current pattern definition with the name given Bu düğme şu anki kalıp tanımını yükler ve verilen başlığı kullanır po/rc.cpp:91 QPM: quarters per minute QPM: dakika başına düşen vuruş sayısı po/rc.cpp:94 QPM: QPM: po/rc.cpp:97 This is the current tempo in quarters per minute Bu, dakika başına düşen şu anki tempodur src/drumgrid.cpp:278 Do you want to remove the current pattern? Bu kalıbı kaldırmak istiyor musunuz? src/drumgrid.cpp:279 Remove Pattern Kalıbı Kaldır src/drumgrid.cpp:333 Sample Pattern Örnek Kalıp src/drumgrid.cpp:364 Insert Pattern Row Kalıp Sırası Ekle src/drumgrid.cpp:365 Drum Key: Davul Tuşu src/drumgrid.cpp:386 Please select one, and only one row Lütfen, sadece ve sadece bir sıra seçiniz src/drumgrid.cpp:388 Do you want to remove the selected pattern row? Seçili kalıbı sırasını kaldırmak istiyor musunuz? src/drumgrid.cpp:389 Remove Row Sırayı Kaldır src/drumgrid.cpp:51 Pattern Editor Kalıp Düzenleyici src/drumgrid.cpp:67 Cut src/drumgrid.cpp:68 Copy src/drumgrid.cpp:69 Paste Kalıplar src/kmetronome.cpp:114 Play/Stop Çal/Dur src/kmetronome.cpp:118 Show Action Buttons Eylem Düğmelerini Göster src/kmetronome.cpp:125 Patterns Kalıplar src/kmetronome.cpp:130 Import Patterns Kalıpları İçeri Aktar src/kmetronome.cpp:135 Export Patterns Kalıpları Dışarı Aktar src/kmetronome.cpp:497 *.pat|Pattern Files (*.pat) *.pat|Kalıp Dosyaları (*.pat) src/kmetronome.cpp:498 Import Patterns Kalıpları İçeri Aktar src/kmetronome.cpp:510 *.pat|Pattern Files (*.pat) *.pat|Kalıp Dosyaları (*.pat) src/kmetronome.cpp:511 Export Patterns Kalıpları Dışarı Aktar src/kmetronome.cpp:527 Patterns Kalıplar src/kmetronome.cpp:87 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 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 Error Hata src/kmetronomeview.cpp:145 Tempo Tempo Enter new Tempo: Yeni Tempo Giriniz: src/kmetronomeview.cpp:179 Automatic Otomatik src/kmetropreferences.cpp:29 Preferences Tercihler src/main.cpp:29 KDE MIDI metronome using ALSA sequencer KDE MIDI metronom ALSA sekvansır kullanıyor src/main.cpp:41 KMetronome KMetronom src/main.cpp:43 (C) 2005-2012 Pedro Lopez-Cabanillas (C) 2005-2012 Pedro Lopez-Cabanillas src/main.cpp:45 Pedro Lopez-Cabanillas Pedro Lopez-Cabanillas src/sequenceradapter.cpp:65 No connection Bağlantı Kurulamadı kmetronome-1.0.1/translations/PaxHeaders.3594/de.ts0000644000000000000000000000013213560310264017033 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/translations/de.ts0000644000175000001440000016444413560310264017717 0ustar00pedrousers00000000000000 About <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style="font-family:'Sans Serif'; font-size:12pt; font-style:normal;"><p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version: %1<br/>Build date: %2<br/>Build time: %3<br/>Compiler: %4</p></body></html> AboutClass About <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Drumstick Metronome</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">This program is free software; you can redistribute 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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p></body></html> DrumGrid Rows: Zeilen: Use this button to add new rows (sounds) to the current pattern definition Dieser Knopf fügt der aktuellen Definition des Rhythmusschemas neue Zeilen (Töne) hinzu Add Hinzufügen Use this button to remove the selected row (sound) from the pattern definition Dieser Knopf entfernt die ausgewählte Zeile (Töne) aus der Definition des Rhythmusschemas Remove Entfernen Beats: Taktzahl: Highligh the grid columns while playing Markiere die Gitterspalten während der Wiedergabe Highlight Columns Markiere Spalten This is the current beat number Dies ist die aktuelle Anzahl Grundschläge Pattern: Rhythmusschema: Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. This button stores the current pattern definition with the name given Dieser Knopf speichert die aktuelle Definition des Rhythmusschemas mit dem gegebenen Namen Save Speichern This button deletes the current pattern definition Dieser Knopf entfernt die aktuelle Definition des Rhythmusschemas Delete Entfernen Number of beats per measure (bar) Anzahl Grundschläge pro Takt This is the beat length for the pattern column. Dies ist die Dauer des Grundschlags für die Spalte des Rhythmusschemas. Whole Ganze Half Halbe Quarter Viertel Eighth Achtel Sixteenth Sechzehntel Thirty-Second Zweiundreissigstel Sixty-Fourth Vierundsechzigstel This button starts playing the current pattern Dieser Knopf startet die Wiedergabe des Rhythmusschemas Play Wiedergabe This button stops the playback Dieser Knopf beendet die Wiedergabe Stop Stopp QPM: quarters per minute QPM: Tempo (in Viertel pro Minute) QPM: Quarters per Minute QPM: This is the current tempo in quarters per minute Dies ist das aktuelle Tempo in Viertel pro Minute Drag the slider handle to change the tempo, in quarters per minute Ziehen Sie den Schieberegler um das Tempo zu ändern, in Viertel pro Minute This is the pattern table, beats as columns and sounds as rows Dies ist die Tabelle des Rhythmusschemas, Grundschläge als Spalten und Töne als Zeilen Pattern Editor Editor für Rhythmusschema Cut Copy Paste Rhythmusschema Remove Pattern Rhythmusschema entfernen Do you want to remove the current pattern? Möchten Sie das aktuelle Rhythmusschema entfernen? Sample Pattern name of an automatically created pattern Muster für Rhythmusschema Insert Pattern Row Zeile in Rhythmusschema einfügen Drum Key: Schlagzeug Taste: Sorry Please select one, and only one row Bitte wählen Sie eine, und nur eine Zeile aus Remove Row Zeile entfernen Do you want to remove the selected pattern row? Möchten Sie die ausgewählte Zeile des Rhythmusschemas entfernen? KMetroPreferences Preferences Einstellungen KMetroPreferencesBase 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. Aktivieren Sie dieses Ankreuzfeld, damit das Programm sich an den Eingangs- und Ausgangs-Port erinnert, und diese beim nächsten Programmstart wieder verbindet. Automatic ports connection on startup Automatische Verbindung der Ports beim Start Optional input port conn: Opt.Verbindung Eingangs-Port: This is the optional connection for the MIDI IN port. Dies ist die optionale Verbindung für den MIDI Eingangs-Port Output port connection: Verbindung für Ausgabe-Port: This is the mandatory connection for the MIDI OUT port Dies ist die notwendige Verbindung für den MIDI Ausgabe-Port Output instrument: Ausgabe Instrument: This is the definition of the instrument connected to the MIDI OUT port Dies ist die Definition des Instrumentes das mit dem MIDI Ausgabe-Port verbunden ist Bank: Bank: This is the Bank of the selected MIDI program Dies ist die Bank des ausgewählten MIDI Programms Channel: Kanal: This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Dies ist der MIDI Kanal, zwischen 1 und 16. Allgemeines MIDI braucht den Kanal 10 für das Schlagzeug. Program: Programm: This is the MIDI program Dies ist das MIDI Programm Resolution: Auflösung: This is the MIDI time resolution (number of ticks in a quarter note) Dies ist die MIDI Zeitauflösung (Anzahl Ticks in einer Viertel Note) Weak note: Schwache Note: This is the sound of the weak notes for the automatic patterns Dies ist die Lautstärke der schwachen Note im automatischen Rhythmusschema Note duration: Dauer der Note: This is the note duration in ticks, when using NOTE OFF events Dies ist die Dauer der Note in Anzahl Ticks, wenn NOTE OFF Ereignisse benutzt werden. Strong note: Starke Note: This is the sound of the strong notes for the automatic patterns Dies ist die Lautstärke der starken Note im automatischen Rhythmusschema Optional setting to send NOTE OFF events Optionale Einstellung zum Senden von NOTE OFF Ereignissen Send NOTE OFF events Sende NOTE OFF Ereignisse KMetronome 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 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 Error Fehler Import Patterns Rhythmusschema importieren Pattern Files (*.pat) Export Patterns Rhythmusschema exportieren Tempo Tempo Enter new Tempo: Neues Tempo eingeben: Automatic the pattern is created automatically Automatisch Language Changed The language for this application is going to change to %1. Do you want to continue? KMetronomeWindow Drumstick Metronome This button starts playing the rhythm pattern Dieser Knopf startet die Wiedergabe des Rhythmusschemas Play Wiedergabe This button stops playing the rhythm pattern Dieser Knopf stoppt die Wiedergabe des Rhythmusschemas Stop Stopp This button opens the configuration window Dieser Knopf öffnet den Einrichtungsdialog Settings Einstellungen This button opens the pattern editor Dieser Knopf öffnet den Editor für das Rhythmusschema Patterns Rhythmusschema This button exits the program Dieser Knopf beendet das Programm Quit Beenden Number of measures (bars) and beats played from beginning Anzahl Noten (Takte) und Schläge seit Beginn der Wiedergabe Pattern: Rhythmusschema: This is the pattern definition to play, either "Automatic" or a custom defined one. Dies ist die Definition des Rhythmusschemas für die Wiedergabe, entweder "Automatisch" oder Benutzerdefiniert. Beats/Bar: Taktzahl: 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. Dies ist die Anzahl Grundschläge für jeden Takt. Die Werte sind von 1 bis 32. Dies ist der Zähler der Taktart-Spezifikation. Beat Length: Länge Grundschlag. This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Dies ist die Dauer des Grundschlags. Die Werte sind 1, 2, 4, 8, 16, 32 und 64. Es ist der Nenner der Taktart-Spezifikation. Whole Ganze Half Halbe Quarter Viertel Eighth Achtel Sixteenth Sechzehntel Thirty-Second Zweiundreissigstel Sixty-Fourth Vierundsechzigstel Weak weak notes MIDI velocity Schwach Strong strong notes MIDI velocity Stark Volume audio volume level Volumen Pan audio panning Balance This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Dies ist die Lautstärke der schwachen Noten im Rhythmusschema (alle von ihnen, ausser der ersten) This is the velocity of the strong note in the automatic rhythm pattern (the first one) Dies ist die Lautstärke der starken Note im Rhythmusschema (die erste) This is the MIDI volume control (CC7) Dies ist die MIDI Lautstärkenregelung (CC7) This is the MIDI pan control (CC10) Dies ist die MIDI Balance Steuerung (CC10) This is the musical name of the tempo value Dies ist der musikalische Name des Tempos The current <i>tempo</i> value Der aktuelle Wert für das <i>Tempo</i> Tempo (in quarters per minute) Tempo (in Viertel pro Minute) 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>). Dieser Schieberegler ändert das <i>Tempo</i>, oder Geschwindigkeit des Rhythmus. Die Werte sind von 25 bis 250 Viertel pro Minute (<i>Maelzel Metronom Einheiten</i>). File Edit Help language toolBar Import Patterns Rhythmusschema importieren Export Patterns Rhythmusschema exportieren Play/Stop Wiedergabe/Stopp Edit Patterns Configuration about Ctrl+Q Show Action Buttons Aktionsknopf anzeigen Show Toolbar about Qt Help Contents QObject Cakewalk Instrument Definition File File Date SequencerAdapter No connection Keine Verbindung po/rc.cpp:101 Drag the slider handle to change the tempo, in quarters per minute Ziehen Sie den Schieberegler um das Tempo zu ändern, in Viertel pro Minute po/rc.cpp:104 MIDI Metronome MIDI Metronom po/rc.cpp:107 This button starts playing the rhythm pattern Dieser Knopf startet die Wiedergabe des Rhythmusschemas po/rc.cpp:110 Play Wiedergabe po/rc.cpp:113 This button stops playing the rhythm pattern Dieser Knopf stoppt die Wiedergabe des Rhythmusschemas po/rc.cpp:116 Stop Stopp po/rc.cpp:119 This button opens the configuration window Dieser Knopf öffnet den Einrichtungsdialog po/rc.cpp:12 Save Speichern po/rc.cpp:122 Settings Einstellungen po/rc.cpp:125 This button opens the pattern editor Dieser Knopf öffnet den Editor für das Rhythmusschema po/rc.cpp:128 Patterns Rhythmusschema po/rc.cpp:131 This button exits the program Dieser Knopf beendet das Programm po/rc.cpp:134 Quit Beenden po/rc.cpp:137 Number of measures (bars) and beats played from beginning Anzahl Noten (Takte) und Schläge seit Beginn der Wiedergabe po/rc.cpp:140 Pattern: Rhythmusschema: po/rc.cpp:143 This is the pattern definition to play, either "Automatic" or a custom defined one. Dies ist die Definition des Rhythmusschemas für die Wiedergabe, entweder "Automatisch" oder Benutzerdefiniert. po/rc.cpp:146 Beats/Bar: Taktzahl: po/rc.cpp:149 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. Dies ist die Anzahl Grundschläge für jeden Takt. Die Werte sind von 1 bis 32. Dies ist der Zähler der Taktart-Spezifikation. po/rc.cpp:15 This button deletes the current pattern definition Dieser Knopf entfernt die aktuelle Definition des Rhythmusschemas po/rc.cpp:154 Beat Length: Länge Grundschlag. po/rc.cpp:157 This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Dies ist die Dauer des Grundschlags. Die Werte sind 1, 2, 4, 8, 16, 32 und 64. Es ist der Nenner der Taktart-Spezifikation. po/rc.cpp:162 Whole Ganze po/rc.cpp:165 Half Halbe po/rc.cpp:168 Quarter Viertel po/rc.cpp:171 Eighth Achtel po/rc.cpp:174 Sixteenth Sechzehntel po/rc.cpp:177 Thirty-Second Zweiundreissigstel po/rc.cpp:18 Delete Entfernen po/rc.cpp:180 Sixty-Fourth Vierundsechzigstel po/rc.cpp:183 Weak Schwach po/rc.cpp:186 Strong Stark po/rc.cpp:189 Volume Volumen po/rc.cpp:192 Pan Balance po/rc.cpp:195 This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Dies ist die Lautstärke der schwachen Noten im Rhythmusschema (alle von ihnen, ausser der ersten) po/rc.cpp:198 This is the velocity of the strong note in the automatic rhythm pattern (the first one) Dies ist die Lautstärke der starken Note im Rhythmusschema (die erste) po/rc.cpp:201 This is the MIDI volume control (CC7) Dies ist die MIDI Lautstärkenregelung (CC7) po/rc.cpp:204 This is the MIDI pan control (CC10) Dies ist die MIDI Balance Steuerung (CC10) po/rc.cpp:207 This is the musical name of the tempo value Dies ist der musikalische Name des Tempos po/rc.cpp:21 Rows: Zeilen: po/rc.cpp:210 The current <i>tempo</i> value Der aktuelle Wert für das <i>Tempo</i> po/rc.cpp:213 Tempo (in quarters per minute) Tempo (in Viertel pro Minute) po/rc.cpp:216 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>). Dieser Schieberegler ändert das <i>Tempo</i>, oder Geschwindigkeit des Rhythmus. Die Werte sind von 25 bis 250 Viertel pro Minute (<i>Maelzel Metronom Einheiten</i>). po/rc.cpp:220 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. Aktivieren Sie dieses Ankreuzfeld, damit das Programm sich an den Eingangs- und Ausgangs-Port erinnert, und diese beim nächsten Programmstart wieder verbindet. po/rc.cpp:223 Automatic ports connection on startup Automatische Verbindung der Ports beim Start po/rc.cpp:226 Optional input port conn: Opt.Verbindung Eingangs-Port: po/rc.cpp:229 This is the optional connection for the MIDI IN port. Dies ist die optionale Verbindung für den MIDI Eingangs-Port po/rc.cpp:232 Output port connection: Verbindung für Ausgabe-Port: po/rc.cpp:235 This is the mandatory connection for the MIDI OUT port Dies ist die notwendige Verbindung für den MIDI Ausgabe-Port po/rc.cpp:238 Output instrument: Ausgabe Instrument: po/rc.cpp:24 Use this button to add new rows (sounds) to the current pattern definition Dieser Knopf fügt der aktuellen Definition des Rhythmusschemas neue Zeilen (Töne) hinzu po/rc.cpp:241 This is the definition of the instrument connected to the MIDI OUT port Dies ist die Definition des Instrumentes das mit dem MIDI Ausgabe-Port verbunden ist po/rc.cpp:244 Bank: Bank: po/rc.cpp:247 This is the Bank of the selected MIDI program Dies ist die Bank des ausgewählten MIDI Programms po/rc.cpp:250 Channel: Kanal: po/rc.cpp:253 This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Dies ist der MIDI Kanal, zwischen 1 und 16. Allgemeines MIDI braucht den Kanal 10 für das Schlagzeug. po/rc.cpp:257 Program: Programm: po/rc.cpp:260 This is the MIDI program Dies ist das MIDI Programm po/rc.cpp:263 Resolution: Auflösung: po/rc.cpp:266 This is the MIDI time resolution (number of ticks in a quarter note) Dies ist die MIDI Zeitauflösung (Anzahl Ticks in einer Viertel Note) po/rc.cpp:269 Weak note: Schwache Note: po/rc.cpp:27 Add Hinzufügen po/rc.cpp:272 This is the sound of the weak notes for the automatic patterns Dies ist die Lautstärke der schwachen Note im automatischen Rhythmusschema po/rc.cpp:275 Note duration: Dauer der Note: po/rc.cpp:278 This is the note duration in ticks, when using NOTE OFF events Dies ist die Dauer der Note in Anzahl Ticks, wenn NOTE OFF Ereignisse benutzt werden. po/rc.cpp:281 Strong note: Starke Note: po/rc.cpp:284 This is the sound of the strong notes for the automatic patterns Dies ist die Lautstärke der starken Note im automatischen Rhythmusschema po/rc.cpp:287 Optional setting to send NOTE OFF events Optionale Einstellung zum Senden von NOTE OFF Ereignissen po/rc.cpp:290 Send NOTE OFF events Sende NOTE OFF Ereignisse po/rc.cpp:293 If this option is activated, the knobs are drawn using a custom style Beim Aktivieren dieser Option werden die Knöpfe mit einem benutzerdefinierten Stil dargestellt po/rc.cpp:296 Styled Knobs Stilvolle Knöpfe po/rc.cpp:297 Your names Rene Landert po/rc.cpp:298 Your emails rene.landert@bluewin.ch po/rc.cpp:3 Pattern: Rhythmusschema: po/rc.cpp:30 Use this button to remove the selected row (sound) from the pattern definition Dieser Knopf entfernt die ausgewählte Zeile (Töne) aus der Definition des Rhythmusschemas po/rc.cpp:33 Remove Entfernen po/rc.cpp:36 Beats: Taktzahl: po/rc.cpp:39 Highligh the grid columns while playing Markiere die Gitterspalten während der Wiedergabe po/rc.cpp:42 Highlight Columns Markiere Spalten po/rc.cpp:46 This is the current beat number Dies ist die aktuelle Anzahl Grundschläge po/rc.cpp:49 This is the pattern table, beats as columns and sounds as rows Dies ist die Tabelle des Rhythmusschemas, Grundschläge als Spalten und Töne als Zeilen po/rc.cpp:52 Number of beats per measure (bar) Anzahl Grundschläge pro Takt po/rc.cpp:55 This is the beat length for the pattern column. Dies ist die Dauer des Grundschlags für die Spalte des Rhythmusschemas. po/rc.cpp:58 Whole Ganze po/rc.cpp:6 Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. po/rc.cpp:61 Half Halbe po/rc.cpp:64 Quarter Viertel po/rc.cpp:67 Eighth Achtel po/rc.cpp:70 Sixteenth Sechzehntel po/rc.cpp:73 Thirty-Second Zweiundreissigstel po/rc.cpp:76 Sixty-Fourth Vierundsechzigstel po/rc.cpp:79 This button starts playing the current pattern Dieser Knopf startet die Wiedergabe des Rhythmusschemas po/rc.cpp:82 Play Wiedergabe po/rc.cpp:85 This button stops the playback Dieser Knopf beendet die Wiedergabe po/rc.cpp:88 Stop Stopp po/rc.cpp:9 This button stores the current pattern definition with the name given Dieser Knopf speichert die aktuelle Definition des Rhythmusschemas mit dem gegebenen Namen po/rc.cpp:91 QPM: quarters per minute QPM: Tempo (in Viertel pro Minute) po/rc.cpp:94 QPM: QPM: po/rc.cpp:97 This is the current tempo in quarters per minute Dies ist das aktuelle Tempo in Viertel pro Minute src/drumgrid.cpp:278 Do you want to remove the current pattern? Möchten Sie das aktuelle Rhythmusschema entfernen? src/drumgrid.cpp:279 Remove Pattern Rhythmusschema entfernen src/drumgrid.cpp:333 Sample Pattern Muster für Rhythmusschema src/drumgrid.cpp:364 Insert Pattern Row Zeile in Rhythmusschema einfügen src/drumgrid.cpp:365 Drum Key: Schlagzeug Taste: src/drumgrid.cpp:386 Please select one, and only one row Bitte wählen Sie eine, und nur eine Zeile aus src/drumgrid.cpp:388 Do you want to remove the selected pattern row? Möchten Sie die ausgewählte Zeile des Rhythmusschemas entfernen? src/drumgrid.cpp:389 Remove Row Zeile entfernen src/drumgrid.cpp:51 Pattern Editor Editor für Rhythmusschema src/drumgrid.cpp:67 Cut src/drumgrid.cpp:68 Copy src/drumgrid.cpp:69 Paste Rhythmusschema src/kmetronome.cpp:114 Play/Stop Wiedergabe/Stopp src/kmetronome.cpp:118 Show Action Buttons Aktionsknopf anzeigen src/kmetronome.cpp:125 Patterns Rhythmusschema src/kmetronome.cpp:130 Import Patterns Rhythmusschema importieren src/kmetronome.cpp:135 Export Patterns Rhythmusschema exportieren src/kmetronome.cpp:497 *.pat|Pattern Files (*.pat) *.pat|Rhythmusschema Dateien (*.pat) src/kmetronome.cpp:498 Import Patterns Rhythmusschema importieren src/kmetronome.cpp:510 *.pat|Pattern Files (*.pat) *.pat|Rhythmusschema Dateien (*.pat) src/kmetronome.cpp:511 Export Patterns Rhythmusschema exportieren src/kmetronome.cpp:527 Patterns Rhythmusschema src/kmetronome.cpp:87 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 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 Error Fehler src/kmetronomeview.cpp:145 Tempo Tempo Enter new Tempo: Neues Tempo eingeben: src/kmetronomeview.cpp:179 Automatic Automatisch src/kmetropreferences.cpp:29 Preferences Einstellungen src/main.cpp:29 KDE MIDI metronome using ALSA sequencer KDE MIDI Metronom mit dem ALSA Sequenzer src/main.cpp:41 KMetronome KMetronome src/main.cpp:43 (C) 2005-2012 Pedro Lopez-Cabanillas (C) 2005-2012 Pedro Lopez-Cabanillas src/main.cpp:45 Pedro Lopez-Cabanillas Pedro Lopez-Cabanillas src/sequenceradapter.cpp:65 No connection Keine Verbindung kmetronome-1.0.1/translations/PaxHeaders.3594/fr.ts0000644000000000000000000000013213560310264017052 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/translations/fr.ts0000644000175000001440000016306013560310264017727 0ustar00pedrousers00000000000000 About <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; }</style></head><body style="font-family:'Sans Serif'; font-size:12pt; font-style:normal;"><p style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version: %1<br/>Build date: %2<br/>Build time: %3<br/>Compiler: %4</p></body></html> AboutClass About <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Drumstick Metronome</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://kmetronome.sourceforge.net"><span style=" text-decoration: underline; color:#0057ae;">http://kmetronome.sourceforge.net</span></a></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright © 2002-2014, </span><a href="mailto:plcl@users.sf.net?subject=VMPK"><span style=" text-decoration: underline; color:#0057ae;">Pedro Lopez-Cabanillas &lt;plcl@users.sf.net&gt;</span></a></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">This program is free software; you can redistribute 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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:10pt;">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.</span></p></body></html> DrumGrid Rows: Lignes : Use this button to add new rows (sounds) to the current pattern definition Utilisez ce bouton pour ajouter de nouvelles lignes (sons) à la définition actuelle de figure rythmique Add Ajouter Use this button to remove the selected row (sound) from the pattern definition Utilisez ce bouton pour supprimer la ligne (le son) sélectionnée de la figure rythmique Remove Retirer Beats: Notes : Highligh the grid columns while playing Met les colonnes de la grille en surbrillance durant la lecture Highlight Columns Mettre les colonnes en surbrillance This is the current beat number Numéro de battement actuel Pattern: Figure : Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. This button stores the current pattern definition with the name given Ce bouton enregistre la figure actuelle avec le nom indiqué Save Enregistrer This button deletes the current pattern definition Ce bouton supprime la définition actuelle de figure Delete Supprimer Number of beats per measure (bar) Nombre de battements par mesure This is the beat length for the pattern column. Durée du battement pour cette colonne de la figure Whole Ronde Half Blanche Quarter Noire Eighth Croche Sixteenth Double croche Thirty-Second Triple croche Sixty-Fourth Quadruple croche This button starts playing the current pattern Démarre la lecture de la figure rythmique Play Lire This button stops the playback Interrompt la lecture Stop Stop QPM: quarters per minute Tempo (en noires par minute) QPM: Quarters per Minute Tempo : This is the current tempo in quarters per minute Tempo en noires par minute Drag the slider handle to change the tempo, in quarters per minute Déplacez le curseur pour modifier le tempo, en noires par minutes This is the pattern table, beats as columns and sounds as rows Table des figures rythmiques, les battements en colonnes et les sons sur les lignes. Pattern Editor Éditeur de figures rythmiques Cut Copy Paste Figures Remove Pattern Supprimer la figure Do you want to remove the current pattern? Voulez-vous supprimer la figure actuelle ? Sample Pattern name of an automatically created pattern Exemple de figure Insert Pattern Row Insérer une ligne Drum Key: Touche « tambour » : Sorry Please select one, and only one row Veuillez ne sélectionner qu’une seule ligne Remove Row Supprimer la ligne Do you want to remove the selected pattern row? Voulez-vous supprimer la figure rythmique de cette ligne ? KMetroPreferences Preferences Préférences KMetroPreferencesBase 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. 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. Automatic ports connection on startup Connexion automatique des ports au démarrage Optional input port conn: Connexion (optionnelle) du port d'entrée : This is the optional connection for the MIDI IN port. Connexion optionnelle du port d’entrée MIDI. Output port connection: Connexion du port de sortie : This is the mandatory connection for the MIDI OUT port Connexion obligatoire du port MIDI de sortie Output instrument: Instrument de sortie : This is the definition of the instrument connected to the MIDI OUT port Définition de l’instrument relié au port MIDI de sortie Bank: Banque : This is the Bank of the selected MIDI program Banque du programme MIDI sélectionné Channel: Canal : This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Canal MIDI, entre 1 et 16. Le programme « General » utilise le canal 10 pour les sons de percussion. Program: Programme : This is the MIDI program Programme MIDI Resolution: Résolution : This is the MIDI time resolution (number of ticks in a quarter note) Résolution MIDI (nombre de tics pour une noire) Weak note: Note du temps faible : This is the sound of the weak notes for the automatic patterns Son pour la note faible des figures rythmiques automatiques Note duration: Durée d'une note : This is the note duration in ticks, when using NOTE OFF events Durée d’une note, en nombre de tics d’horloge, lorsque vous utilisez les événements NOTE OFF Strong note: Note du temps fort : This is the sound of the strong notes for the automatic patterns Son pour le temps fort des figures rythmiques automatiques Optional setting to send NOTE OFF events Envoyer des évènements « NOTE OFF » (facultatif) Send NOTE OFF events Envoyer des évènements « NOTE OFF » KMetronome 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 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 Error Erreur Import Patterns Importer des figures Pattern Files (*.pat) Export Patterns Exporter des figures Tempo Tempo Enter new Tempo: Saisissez le nouveau tempo : Automatic the pattern is created automatically Automatique Language Changed The language for this application is going to change to %1. Do you want to continue? KMetronomeWindow Drumstick Metronome This button starts playing the rhythm pattern Démarre la lecture du motif rythmique Play Lire This button stops playing the rhythm pattern Arrête la lecture du motif rythmique Stop Stop This button opens the configuration window Affiche la fenêtre de configuration Settings Configuration This button opens the pattern editor Ce bouton ouvre l’éditeur de figures rythmiques Patterns Figures This button exits the program Quitte le programme Quit Quitter Number of measures (bars) and beats played from beginning Nombre de mesures et de notes jouées depuis le début Pattern: Figure : This is the pattern definition to play, either "Automatic" or a custom defined one. Définition de la figure à jouer, « automatique » ou personnalisée. Beats/Bar: Notes par mesure : 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. Nombre de temps dans une mesure Les valeurs vont de 1 à 32. C’est le numérateur de la signature rythmique. Beat Length: Durée de la note : This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Durée de la note. Les valeurs sont 1, 2, 4, 8, 16, 32 et 64. C'est le dénominateur de la signature rythmique. Whole Ronde Half Blanche Quarter Noire Eighth Croche Sixteenth Double croche Thirty-Second Triple croche Sixty-Fourth Quadruple croche Weak weak notes MIDI velocity Faible Strong strong notes MIDI velocity Fort Volume audio volume level Volume Pan audio panning Balance This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Intensité des temps faibles dans la figure rythmique (toutes les notes sauf la première) This is the velocity of the strong note in the automatic rhythm pattern (the first one) Intensité du temps fort dans la figure rythmique (la première note) This is the MIDI volume control (CC7) Contrôle du volume MIDI (CC7) This is the MIDI pan control (CC10) Contrôle de la balance MIDI (CC10) This is the musical name of the tempo value Nom musical de la valeur du tempo The current <i>tempo</i> value Valeur actuelle du <i>tempo</i> Tempo (in quarters per minute) Tempo (en noires par minute) : 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>). Ce curseur modifie le <i>tempo</i>, ou la vitesse du rythme. Les valeurs possibles vont de 25 à 250 noires par minute (<i>unités du métronome de Maelzel</i>) File Edit Help language toolBar Import Patterns Importer des figures Export Patterns Exporter des figures Play/Stop Lire/Stop Edit Patterns Configuration about Ctrl+Q Show Action Buttons Afficher les boutons d’action Show Toolbar about Qt Help Contents QObject Cakewalk Instrument Definition File File Date SequencerAdapter No connection Pas de connexion po/rc.cpp:101 Drag the slider handle to change the tempo, in quarters per minute Déplacez le curseur pour modifier le tempo, en noires par minutes po/rc.cpp:104 MIDI Metronome Métronome MIDI po/rc.cpp:107 This button starts playing the rhythm pattern Démarre la lecture du motif rythmique po/rc.cpp:110 Play Lire po/rc.cpp:113 This button stops playing the rhythm pattern Arrête la lecture du motif rythmique po/rc.cpp:116 Stop Stop po/rc.cpp:119 This button opens the configuration window Affiche la fenêtre de configuration po/rc.cpp:12 Save Enregistrer po/rc.cpp:122 Settings Configuration po/rc.cpp:125 This button opens the pattern editor Ce bouton ouvre l’éditeur de figures rythmiques po/rc.cpp:128 Patterns Figures po/rc.cpp:131 This button exits the program Quitte le programme po/rc.cpp:134 Quit Quitter po/rc.cpp:137 Number of measures (bars) and beats played from beginning Nombre de mesures et de notes jouées depuis le début po/rc.cpp:140 Pattern: Figure : po/rc.cpp:143 This is the pattern definition to play, either "Automatic" or a custom defined one. Définition de la figure à jouer, « automatique » ou personnalisée. po/rc.cpp:146 Beats/Bar: Notes par mesure : po/rc.cpp:149 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. Nombre de temps dans une mesure Les valeurs vont de 1 à 32. C’est le numérateur de la signature rythmique. po/rc.cpp:15 This button deletes the current pattern definition Ce bouton supprime la définition actuelle de figure po/rc.cpp:154 Beat Length: Durée de la note : po/rc.cpp:157 This is the beat length. Values mean 1, 2, 4, 8, 16, 32 and 64. It is the denominator in the time signature specification. Durée de la note. Les valeurs sont 1, 2, 4, 8, 16, 32 et 64. C'est le dénominateur de la signature rythmique. po/rc.cpp:162 Whole Ronde po/rc.cpp:165 Half Blanche po/rc.cpp:168 Quarter Noire po/rc.cpp:171 Eighth Croche po/rc.cpp:174 Sixteenth Double croche po/rc.cpp:177 Thirty-Second Triple croche po/rc.cpp:18 Delete Supprimer po/rc.cpp:180 Sixty-Fourth Quadruple croche po/rc.cpp:183 Weak Faible po/rc.cpp:186 Strong Fort po/rc.cpp:189 Volume Volume po/rc.cpp:192 Pan Balance po/rc.cpp:195 This is the velocity of the weak notes in the automatic rhythm pattern (all of them, except the first one) Intensité des temps faibles dans la figure rythmique (toutes les notes sauf la première) po/rc.cpp:198 This is the velocity of the strong note in the automatic rhythm pattern (the first one) Intensité du temps fort dans la figure rythmique (la première note) po/rc.cpp:201 This is the MIDI volume control (CC7) Contrôle du volume MIDI (CC7) po/rc.cpp:204 This is the MIDI pan control (CC10) Contrôle de la balance MIDI (CC10) po/rc.cpp:207 This is the musical name of the tempo value Nom musical de la valeur du tempo po/rc.cpp:21 Rows: Lignes : po/rc.cpp:210 The current <i>tempo</i> value Valeur actuelle du <i>tempo</i> po/rc.cpp:213 Tempo (in quarters per minute) Tempo (en noires par minute) : po/rc.cpp:216 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>). Ce curseur modifie le <i>tempo</i>, ou la vitesse du rythme. Les valeurs possibles vont de 25 à 250 noires par minute (<i>unités du métronome de Maelzel</i>) po/rc.cpp:220 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. 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. po/rc.cpp:223 Automatic ports connection on startup Connexion automatique des ports au démarrage po/rc.cpp:226 Optional input port conn: Connexion (optionnelle) du port d'entrée : po/rc.cpp:229 This is the optional connection for the MIDI IN port. Connexion optionnelle du port d’entrée MIDI. po/rc.cpp:232 Output port connection: Connexion du port de sortie : po/rc.cpp:235 This is the mandatory connection for the MIDI OUT port Connexion obligatoire du port MIDI de sortie po/rc.cpp:238 Output instrument: Instrument de sortie : po/rc.cpp:24 Use this button to add new rows (sounds) to the current pattern definition Utilisez ce bouton pour ajouter de nouvelles lignes (sons) à la définition actuelle de figure rythmique po/rc.cpp:241 This is the definition of the instrument connected to the MIDI OUT port Définition de l’instrument relié au port MIDI de sortie po/rc.cpp:244 Bank: Banque : po/rc.cpp:247 This is the Bank of the selected MIDI program Banque du programme MIDI sélectionné po/rc.cpp:250 Channel: Canal : po/rc.cpp:253 This is the MIDI channel, between 1 and 16. General MIDI uses the channel 10 for percussion sounds. Canal MIDI, entre 1 et 16. Le programme « General » utilise le canal 10 pour les sons de percussion. po/rc.cpp:257 Program: Programme : po/rc.cpp:260 This is the MIDI program Programme MIDI po/rc.cpp:263 Resolution: Résolution : po/rc.cpp:266 This is the MIDI time resolution (number of ticks in a quarter note) Résolution MIDI (nombre de tics pour une noire) po/rc.cpp:269 Weak note: Note du temps faible : po/rc.cpp:27 Add Ajouter po/rc.cpp:272 This is the sound of the weak notes for the automatic patterns Son pour la note faible des figures rythmiques automatiques po/rc.cpp:275 Note duration: Durée d'une note : po/rc.cpp:278 This is the note duration in ticks, when using NOTE OFF events Durée d’une note, en nombre de tics d’horloge, lorsque vous utilisez les événements NOTE OFF po/rc.cpp:281 Strong note: Note du temps fort : po/rc.cpp:284 This is the sound of the strong notes for the automatic patterns Son pour le temps fort des figures rythmiques automatiques po/rc.cpp:287 Optional setting to send NOTE OFF events Envoyer des évènements « NOTE OFF » (facultatif) po/rc.cpp:290 Send NOTE OFF events Envoyer des évènements « NOTE OFF » po/rc.cpp:293 If this option is activated, the knobs are drawn using a custom style Si cette option est activée, les boutons seront affichés avec un style personnalisé po/rc.cpp:296 Styled Knobs Jolis boutons po/rc.cpp:297 Your names Julien Richard-Foy po/rc.cpp:298 Your emails julien.rf@no-log.org po/rc.cpp:3 Pattern: Figure : po/rc.cpp:30 Use this button to remove the selected row (sound) from the pattern definition Utilisez ce bouton pour supprimer la ligne (le son) sélectionnée de la figure rythmique po/rc.cpp:33 Remove Retirer po/rc.cpp:36 Beats: Notes : po/rc.cpp:39 Highligh the grid columns while playing Met les colonnes de la grille en surbrillance durant la lecture po/rc.cpp:42 Highlight Columns Mettre les colonnes en surbrillance po/rc.cpp:46 This is the current beat number Numéro de battement actuel po/rc.cpp:49 This is the pattern table, beats as columns and sounds as rows Table des figures rythmiques, les battements en colonnes et les sons sur les lignes. po/rc.cpp:52 Number of beats per measure (bar) Nombre de battements par mesure po/rc.cpp:55 This is the beat length for the pattern column. Durée du battement pour cette colonne de la figure po/rc.cpp:58 Whole Ronde po/rc.cpp:6 Type a new name and press the "Save" button to create a new pattern, or choose an existing pattern from the drop-down list. 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. po/rc.cpp:61 Half Blanche po/rc.cpp:64 Quarter Noire po/rc.cpp:67 Eighth Croche po/rc.cpp:70 Sixteenth Double croche po/rc.cpp:73 Thirty-Second Triple croche po/rc.cpp:76 Sixty-Fourth Quadruple croche po/rc.cpp:79 This button starts playing the current pattern Démarre la lecture de la figure rythmique po/rc.cpp:82 Play Lire po/rc.cpp:85 This button stops the playback Interrompt la lecture po/rc.cpp:88 Stop Stop po/rc.cpp:9 This button stores the current pattern definition with the name given Ce bouton enregistre la figure actuelle avec le nom indiqué po/rc.cpp:91 QPM: quarters per minute Tempo (en noires par minute) po/rc.cpp:94 QPM: Tempo : po/rc.cpp:97 This is the current tempo in quarters per minute Tempo en noires par minute src/drumgrid.cpp:278 Do you want to remove the current pattern? Voulez-vous supprimer la figure actuelle ? src/drumgrid.cpp:279 Remove Pattern Supprimer la figure src/drumgrid.cpp:333 Sample Pattern Exemple de figure src/drumgrid.cpp:364 Insert Pattern Row Insérer une ligne src/drumgrid.cpp:365 Drum Key: Touche « tambour » : src/drumgrid.cpp:386 Please select one, and only one row Veuillez ne sélectionner qu’une seule ligne src/drumgrid.cpp:388 Do you want to remove the selected pattern row? Voulez-vous supprimer la figure rythmique de cette ligne ? src/drumgrid.cpp:389 Remove Row Supprimer la ligne src/drumgrid.cpp:51 Pattern Editor Éditeur de figures rythmiques src/drumgrid.cpp:67 Cut src/drumgrid.cpp:68 Copy src/drumgrid.cpp:69 Paste Figures src/kmetronome.cpp:114 Play/Stop Lire/Stop src/kmetronome.cpp:118 Show Action Buttons Afficher les boutons d’action src/kmetronome.cpp:125 Patterns Figures src/kmetronome.cpp:130 Import Patterns Importer des figures src/kmetronome.cpp:135 Export Patterns Exporter des figures src/kmetronome.cpp:497 *.pat|Pattern Files (*.pat) *.pat|Fichiers de figures rythmiques (*.pat) src/kmetronome.cpp:498 Import Patterns Importer des figures src/kmetronome.cpp:510 *.pat|Pattern Files (*.pat) *.pat|Fichiers de figures rythmiques (*.pat) src/kmetronome.cpp:511 Export Patterns Exporter des figures src/kmetronome.cpp:527 Patterns Figures src/kmetronome.cpp:87 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 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 Error Erreur src/kmetronomeview.cpp:145 Tempo Tempo Enter new Tempo: Saisissez le nouveau tempo : src/kmetronomeview.cpp:179 Automatic Automatique src/kmetropreferences.cpp:29 Preferences Préférences src/main.cpp:29 KDE MIDI metronome using ALSA sequencer Métronome MIDI KDE utilisant le séquenceur ALSA src/main.cpp:41 KMetronome KMetronome src/main.cpp:43 (C) 2005-2012 Pedro Lopez-Cabanillas (C) 2005-2012 Pedro Lopez-Cabanillas src/main.cpp:45 Pedro Lopez-Cabanillas Pedro Lopez-Cabanillas src/sequenceradapter.cpp:65 No connection Pas de connexion kmetronome-1.0.1/PaxHeaders.3594/ChangeLog0000644000000000000000000000013213560310264015124 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/ChangeLog0000644000175000001440000001007613560310264015777 0ustar00pedrousers000000000000002019-11-05 00:00 plcl * Fixed the LCD number component, to use the application palette instead of hardcoded colors. This fix provides better looking and usability with dark and light desktop themes. * Updated CMake buildsystem, requires CMake 3.1 or newer * Updated documentation. * Release 1.0.1 2014-10-12 00:00 plcl * Migration to Qt5 * Release 1.0.0 2012-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-1.0.1/PaxHeaders.3594/INSTALL0000644000000000000000000000013213560310264014403 xustar0030 mtime=1572966580.132362634 30 atime=1572966580.140362634 30 ctime=1572966580.132362634 kmetronome-1.0.1/INSTALL0000644000175000001440000000452313560310264015256 0ustar00pedrousers00000000000000You will need CMake 2.8.11 or newer. If your Linux distribution doesn't provide CMake, or if it provides an older version, you can get it here: https://cmake.org/download/ 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: https://cmake.org/install/ 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 .. Some variables you may want to set: * CMAKE_INSTALL_PREFIX: cmake .. -DCMAKE_INSTALL_PREFIX=/usr * CMAKE_PREFIX_PATH: cmake .. -DCMAKE_PREFIX_PATH=$HOME/Qt/5.12.5/gcc_64/ For example: $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr Look the configure.release and configure.debug scripts 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 .. 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 Dealing with Configuration Problems ----------------------------------- First, look for an answer in CMake FAQ: https://gitlab.kitware.com/cmake/community/wikis/FAQ You may want to read the documentation at: https://cmake.org/documentation If you can't solve your problem, open a request for support at the project site: https://sourceforge.net/p/kmetronome/ kmetronome-1.0.1/PaxHeaders.3594/icons0000644000000000000000000000013213560310264014410 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/icons/0000755000175000001440000000000013560310264015334 5ustar00pedrousers00000000000000kmetronome-1.0.1/icons/PaxHeaders.3594/CMakeLists.txt0000644000000000000000000000013213560310264017225 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/icons/CMakeLists.txt0000644000175000001440000000146213560310264020077 0ustar00pedrousers00000000000000install (FILES kmetronome_16x16.png DESTINATION share/icons/hicolor/16x16/apps RENAME kmetronome.png) install (FILES kmetronome_24x24.png DESTINATION share/icons/hicolor/24x24/apps RENAME kmetronome.png) install (FILES kmetronome_32x32.png DESTINATION share/icons/hicolor/32x32/apps RENAME kmetronome.png) install (FILES kmetronome_48x48.png DESTINATION share/icons/hicolor/48x48/apps RENAME kmetronome.png) install (FILES kmetronome_64x64.png DESTINATION share/icons/hicolor/64x64/apps RENAME kmetronome.png) install (FILES kmetronome_128x128.png DESTINATION share/icons/hicolor/128x128/apps RENAME kmetronome.png) install (FILES kmetronome.svgz DESTINATION share/icons/hicolor/scalable/apps ) kmetronome-1.0.1/icons/PaxHeaders.3594/kmetronome_128x128.png0000644000000000000000000000013213560310264020370 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/icons/kmetronome_128x128.png0000644000175000001440000001035213560310264021240 0ustar00pedrousers00000000000000PNG  IHDR>asBIT|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 `}BoރY jc1>Kj,3,ZBAØ !'%aNǪAXhM9CْRܗ52 {ЭFЖ"A2|DjprIa9]$.K#ژ5;ݤ>l6T©&OKa?40 _V?b7ZnIENDB`kmetronome-1.0.1/icons/PaxHeaders.3594/kmetronome.svgz0000644000000000000000000000013213560310264017560 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/icons/kmetronome.svgz0000644000175000001440000000121713560310264020430 0ustar00pedrousers00000000000000r0y 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-1.0.1/icons/PaxHeaders.3594/kmetronome_32x32.png0000644000000000000000000000013213560310264020214 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/icons/kmetronome_32x32.png0000644000175000001440000000165113560310264021066 0ustar00pedrousers00000000000000PNG  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-1.0.1/icons/PaxHeaders.3594/kmetronome_64x64.png0000644000000000000000000000013213560310264020226 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/icons/kmetronome_64x64.png0000644000175000001440000000371013560310264021076 0ustar00pedrousers00000000000000PNG  IHDR@@iqsBIT|d pHYsLLi9tEXtSoftwarewww.inkscape.org<EIDATxiTE+ ."rEH ~H<Ѩ1ƨ<M0<5D>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-1.0.1/icons/PaxHeaders.3594/kmetronome_16x16.png0000644000000000000000000000013213560310264020220 xustar0030 mtime=1572966580.128362634 30 atime=1572966580.140362634 30 ctime=1572966580.128362634 kmetronome-1.0.1/icons/kmetronome_16x16.png0000644000175000001440000000073613560310264021075 0ustar00pedrousers00000000000000PNG  IHDRasBIT|d pHYsSSbjtEXtSoftwarewww.inkscape.org<[IDAT8ӿjTQl\żK,k!,XLekge} ډ`U@7v.u\7j