diff --git a/harbour-sailtuner.desktop b/harbour-sailtuner.desktop new file mode 100644 index 0000000..3afc908 --- /dev/null +++ b/harbour-sailtuner.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Application +Icon=harbour-sailtuner +Exec=harbour-sailtuner +X-Nemo-Application-Type=silica-qt5 +Name=SailTuner +# translation example: +# your app name in German locale (de) +# +# Remember to comment out the following line, if you do not want to use +# a different app name in German locale (de). diff --git a/harbour-sailtuner.png b/harbour-sailtuner.png new file mode 100644 index 0000000..7ed80df Binary files /dev/null and b/harbour-sailtuner.png differ diff --git a/harbour-sailtuner.pro b/harbour-sailtuner.pro new file mode 100644 index 0000000..20a1a4b --- /dev/null +++ b/harbour-sailtuner.pro @@ -0,0 +1,20 @@ +QT += qml quick gui multimedia +TARGET = harbour-sailtuner + +CONFIG += c++11 sailfishapp sailfishapp_i18n + +DEFINES += TARGET=\""$(TARGET")\" + +RESOURCES += \ + qml/sailfish.qrc + +SOURCES += \ + src/sailfish.cpp \ + src/Tuner.cpp \ + src/audio/LinearFilter.cpp \ + src/audio/ZeroCross.cpp + +HEADERS += \ + src/Tuner.hpp \ + src/audio/LinearFilter.hpp \ + src/audio/ZeroCross.hpp diff --git a/qml/Sailfish.qml b/qml/Sailfish.qml new file mode 100644 index 0000000..ba25acb --- /dev/null +++ b/qml/Sailfish.qml @@ -0,0 +1,55 @@ +import QtQuick 2.0 +import Sailfish.Silica 1.0 +import harbour.sailtuner.tuner 1.0 + +/** + * Sailfish main page + * + */ + +ApplicationWindow { + id: app + allowedOrientations: Orientation.All + + property bool userRunning: true + property int dbFontSize: 100 + property QtObject tuner + + initialPage: Component { + ApplicationWindow { + Tuner { + id: tunerObject + running: Qt.application.active && app.userRunning + } + + property QtObject tuner: tunerObject + + Text { + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + text: tuner.freq.toFixed(2) + " Hz" + font.pixelSize: 90 + color: Theme.primaryColor + } + + Component.onCompleted: { + app.tuner = tunerObject + //togglePause.connect(app.togglePause) + } + } + } + + cover: Component { + CoverBackground { + Text { + color: Theme.primaryColor + font.pixelSize: 40 + text: app.tuner.freq.toFixed(2) + " Hz" + } + } + } + + function togglePause() { + app.userRunning = app.userRunning ? false : true + } +} diff --git a/qml/sailfish.qrc b/qml/sailfish.qrc new file mode 100644 index 0000000..c96b56f --- /dev/null +++ b/qml/sailfish.qrc @@ -0,0 +1,5 @@ + + +Sailfish.qml + + diff --git a/rpm/Makefile b/rpm/Makefile new file mode 100644 index 0000000..722ee0d --- /dev/null +++ b/rpm/Makefile @@ -0,0 +1,72 @@ +# helper to build for Sailfish with sdk engine + +SAILFISHOS_DIR = $(HOME)/SailfishOS + +SSH_KEYS_DIR = $(SAILFISHOS_DIR)/vmshare/ssh/private_keys +SSH_KEY_ENGINE = $(SSH_KEYS_DIR)/engine/mersdk +SSH_KEY_EMULATOR = $(SSH_KEYS_DIR)/SailfishOS_Emulator/nemo + +SSH_LOGIN_ENGINE = mersdk@localhost +SSH_LOGIN_EMULATOR = nemo@localhost +SSH_LOGIN_JOLLA = nemo@jolla + +HOME_ENGINE = /home/mersdk/share + +BUILD_DIR_LOCAL = $(HOME)/merBuild/sailtuner +BUILD_DIR_ENGINE = $(HOME_ENGINE)/merBuild/sailtuner + +SOURCE_DIR_LOCAL = $(PWD)/.. +#SOURCE_DIR_ENGINE = $(subst $(HOME),$(HOME_ENGINE),$(SOURCE_DIR_LOCAL)) +SOURCE_DIR_ENGINE = /home/src1/SailTuner + +PRO_FILE = harbour-sailtuner.pro + +I486_TARGET = SailfishOS-i486 +JOLLA_TARGET = SailfishOS-armv7hl + +ENGINE_PORT = 2222 +EMULATOR_PORT = 2223 + +BUILD_DIR_LOCAL_I486 = $(BUILD_DIR_LOCAL)/$(I486_TARGET) +BUILD_DIR_LOCAL_JOLLA = $(BUILD_DIR_LOCAL)/$(JOLLA_TARGET) + +BUILD_DIR_ENGINE_I486 = $(BUILD_DIR_ENGINE)/$(I486_TARGET) +BUILD_DIR_ENGINE_JOLLA = $(BUILD_DIR_ENGINE)/$(JOLLA_TARGET) + +SSH_ENGINE = ssh -p 2222 -i $(SSH_KEY_ENGINE) $(SSH_LOGIN_ENGINE) +SSH_EMULATOR = ssh -p 2223 -i $(SSH_KEY_EMULATOR) $(SSH_LOGIN_EMULATOR) + +SCP_EMULATOR = scp -P 2223 -i $(SSH_KEY_EMULATOR) + +RPM_I486 = harbour-sailtuner-0.1-1.i486.rpm +RPM_JOLLA = harbour-sailtuner-0.1-1.armv7hl.rpm + +MB2 = mb2 -p $(SOURCE_DIR_ENGINE) + +all: $(BUILD_DIR_LOCAL_I486)/Makefile + +$(BUILD_DIR_LOCAL_I486): + mkdir -p $@ + +$(BUILD_DIR_LOCAL_I486)/Makefile: $(BUILD_DIR_LOCAL_I486) + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_I486) && $(MB2) qmake $(SOURCE_DIR_ENGINE)/$(PRO_FILE)" + +rpm-i486: $(BUILD_DIR_LOCAL_I486)/Makefile + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_I486) && $(MB2) rpm" + +install-i486: rpm-i486 + $(SCP_EMULATOR) $(BUILD_DIR_LOCAL_I486)/RPMS/$(RPM_I486) $(SSH_LOGIN_EMULATOR): + $(SSH_EMULATOR) "sudo rpm -i $(RPM_I486) --force" + +$(BUILD_DIR_LOCAL_JOLLA): + mkdir -p $@ + +$(BUILD_DIR_LOCAL_JOLLA)/Makefile: $(BUILD_DIR_LOCAL_JOLLA) + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_JOLLA) && $(MB2) -t $(JOLLA_TARGET) qmake $(SOURCE_DIR_ENGINE)/$(PRO_FILE)" + +rpm-jolla: $(BUILD_DIR_LOCAL_JOLLA)/Makefile + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_JOLLA) && $(MB2) -t $(JOLLA_TARGET) rpm" + +install-jolla: rpm-jolla + scp $(BUILD_DIR_LOCAL_JOLLA)/RPMS/$(RPM_JOLLA) $(SSH_LOGIN_JOLLA): + ssh $(SSH_LOGIN_JOLLA) "devel-su rpm -i $(RPM_JOLLA) --force" diff --git a/rpm/harbour-sailtuner.spec b/rpm/harbour-sailtuner.spec new file mode 100644 index 0000000..735a66b --- /dev/null +++ b/rpm/harbour-sailtuner.spec @@ -0,0 +1,70 @@ +# +# Do NOT Edit the Auto-generated Part! +# Generated by: spectacle version 0.27 +# + +Name: harbour-sailtuner + +# >> macros +# << macros + +%{!?qtc_qmake:%define qtc_qmake %qmake} +%{!?qtc_qmake5:%define qtc_qmake5 %qmake5} +%{!?qtc_make:%define qtc_make make} +%{?qtc_builddir:%define _builddir %qtc_builddir} +Summary: Chromatic tuner +Version: 0.1 +Release: 1 +Group: Qt/Qt +License: GPL +URL: http://legolas.vefblog.net/ +Source0: %{name}-%{version}.tar.bz2 +#Source100: harbour-saildbmeter.yaml +Requires: sailfishsilica-qt5 >= 0.10.9 +BuildRequires: pkgconfig(sailfishapp) >= 1.0.2 +BuildRequires: pkgconfig(Qt5Core) +BuildRequires: pkgconfig(Qt5Qml) +BuildRequires: pkgconfig(Qt5Quick) +BuildRequires: desktop-file-utils + +%description +Instrumental multi-temperament chromatic tuner + +%prep +%setup -q -n %{name}-%{version} + +# >> setup +# << setup + +%build +# >> build pre +# << build pre + +%qtc_qmake5 + +%qtc_make %{?_smp_mflags} + +# >> build post +# << build post + +%install +rm -rf %{buildroot} +# >> install pre +# << install pre +%qmake5_install + +# >> install post +# << install post + +desktop-file-install --delete-original \ + --dir %{buildroot}%{_datadir}/applications \ + %{buildroot}%{_datadir}/applications/*.desktop + +%files +%defattr(-,root,root,-) +%{_bindir} +%{_datadir}/%{name} +%{_datadir}/applications/%{name}.desktop +%{_datadir}/icons/hicolor/86x86/apps/%{name}.png +# >> files +# << files diff --git a/src/Tuner.cpp b/src/Tuner.cpp index 05298b1..b6398f1 100644 --- a/src/Tuner.cpp +++ b/src/Tuner.cpp @@ -46,6 +46,7 @@ Tuner::~Tuner() void Tuner::Start() { + cerr << __func__ << endl; high_filter->Clear(); cross->Clear(); recorder->record(); @@ -55,6 +56,7 @@ void Tuner::Start() void Tuner::Stop() { + cerr << __func__ << endl; running = false; recorder->stop(); runningChanged(); diff --git a/src/audio/ZeroCross.cpp b/src/audio/ZeroCross.cpp index a20fcc1..75d7cac 100644 --- a/src/audio/ZeroCross.cpp +++ b/src/audio/ZeroCross.cpp @@ -9,7 +9,7 @@ using namespace std; /// Maximum rest of division to be a multiple of #define EPS_DIVISOR 0.1 /// Consider it is a correct pattern to avoid multiples of -#define CORRECT_DEVIATION 0.05 +#define CORRECT_DEVIATION 1 // local functions @@ -69,8 +69,8 @@ pair FindPattern(const vector &values, double pattern_min best = res; } } + cerr << " -> " << best.first << " " << best.second << endl; if (best.second > CORRECT_DEVIATION) return pair(0,0); - cout << " -> " << best.first << " " << best.second << " "; return best; } diff --git a/src/sailfish.cpp b/src/sailfish.cpp new file mode 100644 index 0000000..1fa1702 --- /dev/null +++ b/src/sailfish.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include "Tuner.hpp" + +class Main { + private: + QGuiApplication *app; + QQuickView *view; + + public: + Main(int &argc, char* argv[]) { + app = SailfishApp::application(argc, argv); + view = SailfishApp::createView(); + view->setSource(QUrl("qrc:///qml/Sailfish.qml")); + QObject::connect(view->engine(), SIGNAL(quit()), app, SLOT(quit())); + } + Main() {} + ~Main() {} + + int Launch() { + view->show(); + return app->exec(); + } +}; + +Q_DECL_EXPORT int main(int argc, char* argv[]) +{ + qmlRegisterType("harbour.sailtuner.tuner", 1, 0, "Tuner"); + Main *appli = new Main(argc, argv); + return appli->Launch(); +}