Git Product home page Git Product logo

powertab / powertabeditor Goto Github PK

View Code? Open in Web Editor NEW
507.0 54.0 68.0 6.65 MB

View and edit guitar tablature.

Home Page: https://powertab.github.io

License: GNU General Public License v3.0

CMake 1.59% C++ 94.35% HTML 1.76% Objective-C++ 0.16% C 0.53% Inno Setup 1.53% PowerShell 0.08%
guitar-tabs music-composition c-plus-plus guitar cross-platform music music-notation qt audio tablature

powertabeditor's Introduction

Power Tab Editor

Guitar tablature viewer and editor

Visit our website

Build Status

Translation status

Get it from the Snap Store Download on Flathub

Table of Contents

About Power Tab Editor

Power Tab Editor 2.0 - A powerful cross platform guitar tablature viewer and editor inspired by the ceased development and missing source code from the original Power Tab Editor. This project is open-source and written from scratch so that your favorite tabbing platform can continuously grow with your needs.

Key Features

  • Cross platform - Windows, Mac, & Linux
  • Tabbed layout for opening multiple files at the same time
  • Mixer interface for adjusting volumes during playback
  • Complete customization of keyboard shortcuts
  • Importing of Guitar Pro tabs

Supported File Types

  • .pt2
  • .ptb
  • .gp3, .gp4, .gp5
  • .gpx
  • .gp

Users

Developers

  • Development help is very welcome! If you're interested in contributing, the issue tracker has a list of good first issues that are easier to dive into!
  • Feel free to ask development-related questions on the discussions page or on Discord
  • See below for instructions on how to compile and run the project:

Dependencies:

  • CMake >= 3.12
  • Boost >= 1.65
    • algorithm
    • date_time
    • endian
    • functional
    • iostreams
    • operators
    • rational
    • signals2
    • stacktrace
  • Qt >= 5.10 version or greater
  • nlohmann-json >= 3.7.3
  • RtMidi >= 4.0
  • pugixml
  • minizip
  • doctest
  • (Linux only) - ALSA library (e.g. libasound2-dev)
  • (Linux only) - MIDI sequencer (e.g. timidity-daemon)
  • A compiler with C++17 support.

Building:

Windows:

  • Install Git - see https://help.github.com/articles/set-up-git
  • Install vcpkg and run vcpkg install --triplet x64-windows boost-algorithm boost-date-time boost-endian boost-functional boost-iostreams boost-rational boost-signals2 boost-stacktrace doctest minizip nlohmann-json pugixml to install dependencies.
  • Install Qt by running vcpkg install --triplet x64-windows qt5-base qt5-tools (this may take a while), or install a binary release from the Qt website or https://github.com/miurahr/aqtinstall.
  • Open the project folder in Visual Studio and build.
    • If running CMake manually, set CMAKE_TOOLCHAIN_FILE to [vcpkg root]\scripts\buildsystems\vcpkg.cmake
PowerShell Installation Scripts
  • For a more installation streamlined process
    • with at least PowerShell 5.1 is installed on your machine
    • Run these powershell scripts in your powershell terminal with your shell working directory as your cloned project
.\scripts\Get-Dependencies.ps1 -vcpkg_exe_path "your/path/to/your/vcpkg.exe" -python_exe_path "your/path/to/your/python.exe";
.\scripts\Run-CMakeBuild.ps1 -vcpkg_dir "your/path/to/your/vcpkg" -qt_path "your/path/to/qt";

You'll have to update the variables for your specific paths to $vcpkg_exe_path, $python_exe_path, and $qt_path

Linux:

  • These instructions assume a recent Ubuntu/Debian-based system, but the package names should be similar for other package managers.
  • Install dependencies:
    • sudo apt update
    • sudo apt install cmake qtbase5-dev qttools5-dev libboost-dev libboost-date-time-dev libboost-iostreams-dev nlohmann-json3-dev libasound2-dev librtmidi-dev libpugixml-dev libminizip-dev doctest-dev
    • sudo apt-get install timidity-daemon - timidity is not required for building, but is a good sequencer for MIDI playback.
    • Optionally, use Ninja instead of make (sudo apt install ninja-build)
  • Build:
    • mkdir build && cd build
    • cmake ..
      • Add -DCMAKE_INSTALL_PREFIX=/some/path to customize the install directory.
      • Add -DCMAKE_BUILD_TYPE=Debug for a debug build instead of a Release build.
      • Add -DCMAKE_CXX_COMPILER=clang++ to compile with Clang.
      • Add -G Ninja to generate Ninja build files.
    • make -j8 or ninja
  • Run:
    • ./bin/powertabeditor
    • ./bin/pte_tests to run the unit tests.
  • Install:
    • make install or ninja install

OS X:

  • Install Xcode along with its Command Line Tools.
  • Install dependencies:
    • brew install boost cmake doctest minizip ninja nlohmann-json pugixml qt@5 pugixml rtmidi
  • Build:
    • mkdir build && cd build
    • cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/usr/local/opt/qt@5/lib/cmake ..
      • To generate an Xcode project, switch to -G Xcode and then open and build build/powertabeditor.xcodeproj
    • ninja
  • Run:
    • open ./bin/Power\ Tab\ Editor.app
    • ./bin/pte_tests to run the unit tests.
    • For Xcode, select Product/Scheme/powertabeditor and then Product/Run.

powertabeditor's People

Contributors

aaly11 avatar adam-eldredge avatar albanobattistella avatar badmoons avatar brunosilvano avatar cameronwhite avatar danailbd avatar danieleds avatar dependabot[bot] avatar dj-viking avatar dontbelieveme avatar eb4x avatar erwantlg avatar fitojb avatar iceseyes avatar jlearman avatar luzpaz avatar mostafa-nabil avatar nathanbnm avatar nbrunett avatar psyomn avatar rhochreiter avatar thejenja avatar weblate avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

powertabeditor's Issues

Guitar Pro Note Spacing Rendered Incorrectly.

The notes aren't given the full space that they command. There isn't any formatting done for guitar pro yet, so the notes are just placed one after another. So the red line "current location" marker might finish a measure by the third beat, for example. The visual doesn't align with the audio.

Test file: See the passage for the top staff at system 4, position 26.
https://onedrive.live.com/redir?resid=BF1A7BA5AAA1B4E4!159&authkey=!AKIy8FAlQeI9LiY&ithint=file%2cgp4

Implement floating text

This will be a bit challenging due to the differences between the v1.7 format and the new file format.

Floating text in v1.7 is stored at an absolute position, but the new file format doesn't store any layout information (e.g. the height in pixels of a system, or how much space is between systems). This has a bunch of advantages, since it will let us do things like widescreen layouts very easily. But that also means that allowing users to place floating text anywhere in the score won't work well (for example, if you switched to a different layout, your floating text would all be out of position).

One option would be to only allow floating text to be inside a system, so if the layout moves a system around any text inside it will move along with it. That might be a bit problematic if someone deletes a staff and causes some text to end up outside the system though. Another option is to make it more like chord text, where it has to be located at the top of a system

Crash when creating new file

File> New results in a segmentation fault:

Platform:

$uname -a
Linux laptopvincent 3.14-1-amd64 #1 SMP Debian 3.14.12-1 (2014-07-11) x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux testing (jessie)
Release:    testing
Codename:   jessie

GIT version:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

Backtrace:

$ valgrind bin/powertabeditor
==32112== Memcheck, a memory error detector
==32112== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==32112== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info
==32112== Command: bin/powertabeditor
==32112== 
==32112== Conditional jump or move depends on uninitialised value(s)
==32112==    at 0x120780A5: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x839B5E6: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83B4087: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83B5211: g_signal_emit_by_name (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83A2B38: g_object_set_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83A3396: g_object_set (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x504FF85: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x4FD60DC: QStyleFactory::create(QString const&) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x4F73A02: QApplication::style() (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x4F73DEC: QApplicationPrivate::initialize() (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x4F73E42: QApplicationPrivate::construct() (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x83F38C: main (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112== 
==32112== Conditional jump or move depends on uninitialised value(s)
==32112==    at 0x8652330: g_utf8_offset_to_pointer (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x1207B340: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B8E3: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207BBCE: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x839B3B7: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83AC556: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83B4A28: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83B4CE1: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x121FF4E3: gtk_widget_realize (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x12200797: gtk_widget_set_parent (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x120A8D42: gtk_fixed_put (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x839E486: g_cclosure_marshal_VOID__OBJECTv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112== 
==32112== Conditional jump or move depends on uninitialised value(s)
==32112==    at 0x865235F: g_utf8_offset_to_pointer (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x1207B340: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B8E3: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207BBCE: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x839B3B7: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83AC556: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83B4A28: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x83B4CE1: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112==    by 0x121FF4E3: gtk_widget_realize (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x12200797: gtk_widget_set_parent (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x120A8D42: gtk_fixed_put (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x839E486: g_cclosure_marshal_VOID__OBJECTv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4000.0)
==32112== 
==32112== Conditional jump or move depends on uninitialised value(s)
==32112==    at 0x8652330: g_utf8_offset_to_pointer (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x1207B340: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B8E3: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B9BF: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1261DD06: ??? (in /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0.2400.24)
==32112==    by 0x8624CE4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x8625047: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x86250EB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x73B68C6: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x735FEC1: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x73675FC: QCoreApplication::exec() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x83FD8B: main (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112== 
==32112== Conditional jump or move depends on uninitialised value(s)
==32112==    at 0x865235F: g_utf8_offset_to_pointer (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x1207B340: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B8E3: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B9BF: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1261DD06: ??? (in /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0.2400.24)
==32112==    by 0x8624CE4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x8625047: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x86250EB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x73B68C6: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x735FEC1: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x73675FC: QCoreApplication::exec() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x83FD8B: main (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112== 
==32112== Conditional jump or move depends on uninitialised value(s)
==32112==    at 0x8652330: g_utf8_offset_to_pointer (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x1207B340: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B9D8: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1261DD06: ??? (in /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0.2400.24)
==32112==    by 0x8624CE4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x8625047: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x86250EB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x73B68C6: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x735FEC1: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x73675FC: QCoreApplication::exec() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x83FD8B: main (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112== 
==32112== Conditional jump or move depends on uninitialised value(s)
==32112==    at 0x865235F: g_utf8_offset_to_pointer (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x1207B340: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1207B9D8: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.24)
==32112==    by 0x1261DD06: ??? (in /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0.2400.24)
==32112==    by 0x8624CE4: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x8625047: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x86250EB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
==32112==    by 0x73B68C6: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x735FEC1: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x73675FC: QCoreApplication::exec() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.3.1)
==32112==    by 0x83FD8B: main (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112== 
Tab creation started ...
Using  1  worker thread(s)
Score rendered in 1297 ms
Rendered  11 items
Tap opened in 3077 ms
load glyph failed err=23 face=0x0, glyph=48
==32112== Invalid read of size 8
==32112==    at 0xE78285D: QFontEngineFT::loadGlyph(QFontEngineFT::QGlyphSet*, unsigned int, QFixed, QFontEngine::GlyphFormat, bool) const (in /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so)
==32112==    by 0xE787019: QFontEngineFT::lockedAlphaMapForGlyph(unsigned int, QFixed, QFontEngine::GlyphFormat, QTransform const&, QPoint*) (in /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so)
==32112==    by 0x6C8617F: QRasterPaintEngine::drawCachedGlyphs(int, unsigned int const*, QFixedPoint const*, QFontEngine*) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.3.1)
==32112==    by 0x6C8850E: QRasterPaintEngine::drawStaticTextItem(QStaticTextItem*) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.3.1)
==32112==    by 0x6CA083B: QPainter::drawStaticText(QPointF const&, QStaticText const&) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.3.1)
==32112==    by 0x97C85E: QPainter::drawStaticText(int, int, QStaticText const&) (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112==    by 0x97C3D3: TempoMarkerPainter::paint(QPainter*, QStyleOptionGraphicsItem const*, QWidget*) (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112==    by 0x5270813: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x527159D: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x52708F2: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x527159D: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x5271C2A: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==  Address 0x98 is not stack'd, malloc'd or (recently) free'd
==32112== 
==32112== 
==32112== Process terminating with default action of signal 11 (SIGSEGV)
==32112==  Access not within mapped region at address 0x98
==32112==    at 0xE78285D: QFontEngineFT::loadGlyph(QFontEngineFT::QGlyphSet*, unsigned int, QFixed, QFontEngine::GlyphFormat, bool) const (in /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so)
==32112==    by 0xE787019: QFontEngineFT::lockedAlphaMapForGlyph(unsigned int, QFixed, QFontEngine::GlyphFormat, QTransform const&, QPoint*) (in /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so)
==32112==    by 0x6C8617F: QRasterPaintEngine::drawCachedGlyphs(int, unsigned int const*, QFixedPoint const*, QFontEngine*) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.3.1)
==32112==    by 0x6C8850E: QRasterPaintEngine::drawStaticTextItem(QStaticTextItem*) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.3.1)
==32112==    by 0x6CA083B: QPainter::drawStaticText(QPointF const&, QStaticText const&) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.3.1)
==32112==    by 0x97C85E: QPainter::drawStaticText(int, int, QStaticText const&) (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112==    by 0x97C3D3: TempoMarkerPainter::paint(QPainter*, QStyleOptionGraphicsItem const*, QWidget*) (in /home/vincent/projects/pte/build/bin/powertabeditor)
==32112==    by 0x5270813: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x527159D: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x52708F2: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x527159D: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==    by 0x5271C2A: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.3.1)
==32112==  If you believe this happened as a result of a stack
==32112==  overflow in your program's main thread (unlikely but
==32112==  possible), you can try to increase the size of the
==32112==  main thread stack using the --main-stacksize= flag.
==32112==  The main thread stack size used in this run was 8388608.
==32112== 
==32112== HEAP SUMMARY:
==32112==     in use at exit: 4,940,506 bytes in 30,907 blocks
==32112==   total heap usage: 143,931 allocs, 113,024 frees, 37,412,671 bytes allocated
==32112== 
==32112== LEAK SUMMARY:
==32112==    definitely lost: 5,552 bytes in 38 blocks
==32112==    indirectly lost: 24,077 bytes in 593 blocks
==32112==      possibly lost: 61,853 bytes in 1,025 blocks
==32112==    still reachable: 4,667,768 bytes in 28,391 blocks
==32112==         suppressed: 0 bytes in 0 blocks
==32112== Rerun with --leak-check=full to see details of leaked memory
==32112== 
==32112== For counts of detected and suppressed errors, rerun with: -v
==32112== Use --track-origins=yes to see where uninitialised values come from
==32112== ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 5 from 3)

Memory Leak.

pte2 0 memory leak

Loading and removing tens of tabs leaves the program memory expanded.

Muted notes sound the same for every instrument

Currently, the MIDI player just switches the instrument to "Electric Guitar (Muted)" whenever it has to play a muted note. Version 1.7 was able to get a decent muted sound for each instrument, so it definitely is possible.

More copy options.

Copy measure A to B
Copy rehearsal C.
Copy key changes.

Allows you to copy without having to highlight/copy more than one section, multiple times.

Add a "File/Save" menu option

I intentionally left this out so that people don't accidentally save files in a format that may change substantially before the release. But we could probably add this in sometime soon.

Make editing behaviour more consistent

  • For a barline, Shift+B will edit the barline type, and Ctrl+Del deletes it
  • For a player change, I can't edit an existing one and have to remove and recreate it just to add a new player - this gets really annoying!
    • Similar for tempo markers, directions, etc
    • For things like natural harmonics or trills, this behavior is probably okay though

The same file can be opened multiple times

Currently, the behaviour is:

  • The application has a single instance, so double-clicking a file in the file manager will open it in the open instance of the program if possible
  • No check is done for opening the same file multiple times

Possible options are:

  • Prevent users from opening the same file multiple times
  • Watch the filesystem for changes to any open files, and prompt the user to reload the file if it is changed elsewhere

Add support for rit./accel.

Rit./Accel. measures operate at a constant pace for the duration of measures between the current and ending tempo markers. The pace is fixed regardless of the tempos before or after them, or whether they are higher/lower than the rit/accel constant tempo pace.

If the rit/accel markers occur within a measure, they'll play at the aforementioned constant tempo, but the measure itself occupies the space of the measure as set by the tempo marker before it.

If the rit/accel markers are placed on the barline instead, there is no extra empty space at the end of the measure.

The Rit. tempo is somewhere above 300BPM (the limit for PTE1.7). The Accel. tempo is at about 250.

In 1.7, a rit. and an accel. perform identically. The only thing that truly matters is the starting/ending tempo markers.
For instance, a
(t=120 -accel- t=180) will play identically to a
(t=120 -rit- t=180.)

Test files:
https://onedrive.live.com/redir?resid=BF1A7BA5AAA1B4E4!157&authkey=!AOxEDsTIUlHlVk4&ithint=folder%2c

Playback toolbar buttons should have shortcuts

  • The tooltip for the stop/start button should mention that the spacebar can be used as a shortcut
  • The metronome toggle and the "return to beginning" buttons should have keyboard shortcuts and appear in the Playback menu

Recent history/directory toolbar/pane. Windows 7 pinned/history.

Couple of related ideas here. One is specifically for Windows and so maybe not a great concept for a cross platform app. The idea is to provide quick access to the tabs you've been working on lately with minimal effort. The 2nd image is from Tabledit (what I used before PTE.)

windows 7 pinned

tabledit - directory pane

Add drum score.

As an involved process, this is further down the pipeline, but is doable as the metronome already uses the drum patch 1.7 utilizes:

drum patch2 0

Notes play as you enter them.

Typing in a note into the notation produces a pitch immediately so that you may hear whether you're entering the correct note. This feature can be toggled on/off in preferences.

Long rehearsal signs can overlap

Probably the best solution is to limit the rehearsal sign text to the width of the bar, and cut it off with an ellipsis. The tooltip should contain the full text of the rehearsal sign.

image

Multiple system-multiple caret glitch.

Create enough systems to produce the scroll bar. Click on one system, move your mouse wheel one notch, and click on another system, move your mouse wheel in the opposite direction of the first time, click on a third system. You can do this indefinitely until all your systems have carets in them.

5 cursors
This is confirmed for r1325 also.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.