Pianobooster port to arm linux or Android.

classic Classic list List threaded Threaded
20 messages Options
Reply | Threaded
Open this post in threaded view
|

Pianobooster port to arm linux or Android.

robert1968
Hi Louis.

Do you have any plan to port PB to arm linux or Android?

Now I have a great Android Phone and an Android tablet too, so I think to use PB on them.
I have chrooted arm UBUNTU on the phone now and want to compile latest Pianobooster to arm linux.
First I compiled to 12.04 Ubuntu and it was success.

Do you have any guide how to compile PB to arm platform from my i386 ubuntu? (Cross compile?)

I'm also very interested if you have success on Raspberry pi.
Tell me what is your plan?

Regards,
Robert
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Louis B.
Administrator
Hi Robert,

I am sorry but I don't have any plans to port this to Arm Linux, but if you are really determined you could do this your self. There is no theoretical reason why it will not compile as it just uses standard qt code and I believe qt support Arm quite well. The problem is going to be with processing speed and connecting midi devices to your tablet. PB is quite processor intensive and the arm processor may not run fast enough for PB especially if you are running a software synthesiser as well.

I have recently posted a project update in the PB users forum.  

Louis
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

KISA
Hi,

I've managed to get PB installed on my Raspberry Pi using the Raspbian OS. It did require recompiling some of the dependency sources as well as the PB source, but much to my excitement it worked (the compiling and installing did anyway :) ).

Then unfortunately when I ran PB from the Education tab I got the "This system does not support OpenGL which is needed to run Piano Booster".

So close yet so far :(

I believe this is due to RP using OpenGL ES instead of the full OpenGL PB requires. I read somewhere that it might be possible to modify some of the PB source to accept OpenGL SE instead of OpenGL. But being the limited coder I am have know idea where to start with that or if it's even possible.

Can anyone please tell me if this has already been done, is OpenGL ES compatible enough that it's possible to do and even better, how to do it :) ?

Thanks.

Markus
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Kory
I have been thinking about doing the exact same thing.  I just recently added colors for each note and my kids find it much easier to use now.  Also, I have a bit of OpenGL ES and OpenGL experience.  Could you perhaps send me the code and what you did to get to the point that you currently are?  I have quite a bit of experience converting NeHe OpenGL examples to OpenGL ES and it is not that hard to do.

Thanks,
Kory
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

KISA
Hi Kory,

Great idea with the colours and well done getting it working that way.

I haven't done anything out of the ordinary regarding the installation of PB on the RP. I was able to install all the software required, as per the download page (http://pianobooster.sourceforge.net/download.html), under the "Compiling on Linux:". The only trick was I had to download all the source for each of the dependancies and compile them on the RP (I did it through a Linux GUI I'd got running on the RP). They all compiled fine with (from memory) the occasional extra dependancy required (very rare for linux installs to ask for extra dependancies ;) ).

By doing that, I was able to complete the installation and even start up PB. But unfortunatetly starting it was as far as it got, the first box that appeared was "This system does not support OpenGL which is needed to run Piano Booster".

Even though RP supports and has installed OpenGL ES, it is obviously not recognised or compatible with the OpenGL PB is expecting.

So my though for a solution would be to either modify some part (no idea which) of PB to accept OpenGL ES or to get the RP to present OpenGL ES as OpenGL. Unfortunately I know absolutely nothing of the internal workings of OpenGL to get beyond a theoretical suggestion :).

Hope this was of some help and hopefully you have some luck with it.
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Kory
Actually, I eventually figured out how to compile it.  It is in the raspbian repositories and I just downloaded the source from there (apt-get source pianobooster) after adding the source repository.  Anyhow, upon further investigation I found that pianobooster is using Qt 4, which does not support OpenGL ES on the Raspberry Pi.  We would need to upgrade Pianobooster to Qt 5 and then modify the OpenGL in the code to comply with OpenGL ES.  At this point in time I will not be able to do this because I have many other more important things to do.  Hopefully, someone out there knows how to convert it from Qt4 to Qt5, because I have never really used Qt before.  Once someone does that then I can help with the OpenGL ES conversion.

I hope that helps anyone else asking the same question.

Kory


On Mon, Jun 24, 2013 at 5:37 AM, KISA [via Piano Booster] <[hidden email]> wrote:
Hi Kory,

Great idea with the colours and well done getting it working that way.

I haven't done anything out of the ordinary regarding the installation of PB on the RP. I was able to install all the software required, as per the download page (http://pianobooster.sourceforge.net/download.html), under the "Compiling on Linux:". The only trick was I had to download all the source for each of the dependancies and compile them on the RP (I did it through a Linux GUI I'd got running on the RP). They all compiled fine with (from memory) the occasional extra dependancy required (very rare for linux installs to ask for extra dependancies ;) ).

By doing that, I was able to complete the installation and even start up PB. But unfortunatetly starting it was as far as it got, the first box that appeared was "This system does not support OpenGL which is needed to run Piano Booster".

Even though RP supports and has installed OpenGL ES, it is obviously not recognised or compatible with the OpenGL PB is expecting.

So my though for a solution would be to either modify some part (no idea which) of PB to accept OpenGL ES or to get the RP to present OpenGL ES as OpenGL. Unfortunately I know absolutely nothing of the internal workings of OpenGL to get beyond a theoretical suggestion :).

Hope this was of some help and hopefully you have some luck with it.


If you reply to this email, your message will be added to the discussion below:
http://piano-booster.2625608.n2.nabble.com/Pianobooster-port-to-arm-linux-or-Android-tp7572459p7572561.html
To unsubscribe from Pianobooster port to arm linux or Android., click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

KISA
Thanks for the update, it's certainly good to know what's required and hopefully (like you said), someone with a better understanding of Qt will be able to pick it up.

I'm currently surviving using a laptop so it's not all bad :), but to get a RP working would be cool.

One step closer :)

Thanks again.
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Louis B.
Administrator
In reply to this post by Kory
Hi Kory,

When I wrote PB I thought that I was only using the OpenGL ES standard as it is cut down version of the full OpenGL standard But unfortunately I included the display lists, which aren't available in OpenGL ES. PB makes very heavy use of  the displays lists and so cannot easily be removed.

Please read what I wrote in this post. http://piano-booster.2625608.n2.nabble.com/PianoBooster-on-the-Allwinner-A10-PengPod-tp7572550p7572552.html

What to you guys think of the display used on this project http://midisheetmusic.sourceforge.net/. And on android https://play.google.com/store/apps/details?id=com.midisheetmusic&hl=en

Louis

Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Louis B.
Administrator
In reply to this post by Kory
Can you post a screen shot of PB with colours. How many colours are there and do they map on to each note  of the scale (what about sharps an flats?). I would probably accept your changes if you are interested in submitting a patch. there would need to be a way of enabling and disabling the colours.

Louis
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Kory
The Midi sheet GUI may work, especially for ports on embedded devices.

I have no way of toggling the colors or setting them.  What I did was calculate the note (A, A#, B, C, C#, etc.) and then basically set them to be ROYGBIV = R(C) O(D) Y(E) G(F) B(G) I(A) V(B), but eventually modified them a bit.  For the sharps/flats I just manually blended the notes between the two (C# is a mixture of Red/Orange).  So it isn't perfect yet, but good enough for my kids to learn.  Any quick comments on how to post/upload a screenshot?
Thanks,
Kory


On Mon, Jun 24, 2013 at 4:36 PM, Louis B. [via Piano Booster] <[hidden email]> wrote:
Can you post a screen shot of PB with colours. How many colours are there and do they map on to each note  of the scale (what about sharps an flats?). I would probably accept your changes if you are interested in submitting a patch. there would need to be a way of enabling and disabling the colours.

Louis


If you reply to this email, your message will be added to the discussion below:
http://piano-booster.2625608.n2.nabble.com/Pianobooster-port-to-arm-linux-or-Android-tp7572459p7572565.html
To unsubscribe from Pianobooster port to arm linux or Android., click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Louis B.
Administrator
Use a browser to view the post in the forum. sign in. click on reply then insert image.

If you want to share your changes, then use a compile switch (#if #else #endif) to enable colours on or off. I can then change it to use a runtime switch and add an option to the settings to turn the colours on or off.

Louis
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Kory
Attached patch file and screenshot



DrawNoteColours.diff
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Kory
OK, I had a bit more time for this effort.

First and foremost I had to build a native Qt5 on the pi itself (so I can run qmake on the pi itself).  I don't like cross compiling, so I wrote this wiki: http://qt-project.org/wiki/Native_Build_of_Qt5_on_a_Raspberry_Pi

Now that I have Qt5 on the Raspberry Pi, I used the desktop to convert Pianobooster to Qt5 and I had to make these changes to the source code [see attached file - qt5.patch]

Now I have a Qt5 compatible Pianobooster that should compile on the Pi.  Now the hard work of converting the Desktop OpenGL to OpenGL ES can begin.  The main problem is that the Pi does not allow you to have embedded OpenGL, it has to run full-screen.  So I may change the code to run from the command line.  We'll see what happens, but at least now folks will be able to build this against Qt5.

Take care,
Kory
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

hpladds
In reply to this post by Kory
Installation of PB on Raspbian is almost a trivial task these days. apt-get install pianobooster. Negotiating the linux sound universe can be a bit daunting however.

Kori, this seems like a great idea. Have you given-up? Still have the code hanging around?
Kory wrote
I just recently added colors for each note and my kids find it much easier to use now.
Cheers,
Preston
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Kory
In the Draw.cpp file in the void CDraw::drawSymbol(CSymbol symbol, float x, float y, CSlot* slot) function, I added code to color the notes.

Here is that entire function:

<code>
void CDraw::drawSymbol(CSymbol symbol, float x, float y, CSlot* slot)
{
    CColour colour = symbol.getColour();
    bool playable = true;

    if (m_displayHand != symbol.getHand() && m_displayHand != PB_PART_both)
    {
        if (colour == Cfg::noteColour())
            colour = Cfg::noteColourDim();
        if (colour == Cfg::staveColour())
            colour = Cfg::staveColourDim();
        playable = false;
    }

    switch (symbol.getType())
    {
         case PB_SYMBOL_gClef: // The Treble Clef
            y += 4;
            drColour(colour);
            glLineWidth (3.0);
            glBegin(GL_LINE_STRIP);
            glVertex2f( -0.011922  + x,   -16.11494  + y);  //  1
            glVertex2f( -3.761922  + x,   -12.48994  + y);  //  2
            glVertex2f( -4.859633  + x,   -8.85196  + y);  //  3
            glVertex2f( -4.783288  + x,   -5.42815  + y);  //  4
            glVertex2f( -0.606711  + x,   -1.11108  + y);  //  5
            glVertex2f( 5.355545  + x,   0.48711  + y);  //  6
            glVertex2f( 10.641104  + x,   -1.6473  + y);  //  7
            glVertex2f( 14.293812  + x,   -6.18241  + y);  //  8
            glVertex2f( 14.675578  + x,   -11.42744  + y);  //  9
            glVertex2f( 12.550578  + x,   -17.30244  + y);  //  10
            glVertex2f( 7.912166  + x,   -20.944  + y);  //  11
            glVertex2f( 3.049705  + x,   -21.65755  + y);  //  12
            glVertex2f( -1.711005  + x,   -21.36664  + y);  //  13
            glVertex2f( -6.283661  + x,   -19.66739  + y);  //  14
            glVertex2f( -10.123329  + x,   -16.79162  + y);  //  15
            glVertex2f( -13.363008  + x,   -12.28184  + y);  //  16
            glVertex2f( -14.675578  + x,   -5.79969  + y);  //  17
            glVertex2f( -13.66821  + x,   0.20179  + y);  //  18
            glVertex2f( -10.385341  + x,   6.27562  + y);  //  19
            glVertex2f( 5.539491  + x,   20.32671  + y);  //  20
            glVertex2f( 10.431588  + x,   28.20584  + y);  //  21
            glVertex2f( 11.00141  + x,   34.71585  + y);  //  22
            glVertex2f( 9.204915  + x,   39.62875  + y);  //  23
            glVertex2f( 7.854166  + x,   42.08262  + y);  //  24
            glVertex2f( 5.481415  + x,   42.66649  + y);  //  25
            glVertex2f( 3.57972  + x,   41.4147  + y);  //  26
            glVertex2f( 1.507889  + x,   37.35642  + y);  //  27
            glVertex2f( -0.381338  + x,   31.14317  + y);  //  28
            glVertex2f( -0.664306  + x,   25.51354  + y);  //  29
            glVertex2f( 8.296044  + x,   -32.22694  + y);  //  30
            glVertex2f( 8.050507  + x,   -36.6687  + y);  //  31
            glVertex2f( 6.496615  + x,   -39.52999  + y);  //  32
            glVertex2f( 3.368583  + x,   -41.7968  + y);  //  33
            glVertex2f( 0.253766  + x,   -42.66649  + y);  //  34
            glVertex2f( -3.599633  + x,   -42.23514  + y);  //  35
            glVertex2f( -8.098754  + x,   -39.46637  + y);  //  36
            glVertex2f( -9.463279  + x,   -35.49796  + y);  //  37
            glVertex2f( -7.08037  + x,   -31.36512  + y);  //  38
            glVertex2f( -3.336421  + x,   -31.14057  + y);  //  39
            glVertex2f( -1.360313  + x,   -34.07738  + y);  //  40
            glVertex2f( -1.608342  + x,   -37.11828  + y);  //  41
            glVertex2f( -5.729949  + x,   -39.24759  + y);  //  42
            glVertex2f( -7.480646  + x,   -36.2136  + y);  //  43
            glVertex2f( -6.826918  + x,   -33.36919  + y);  //  44
            glVertex2f( -4.069083  + x,   -32.9226  + y);  //  45
            glVertex2f( -3.040669  + x,   -34.433  + y);  //  46
            glVertex2f( -3.737535  + x,   -36.38759  + y);  //  47
            glVertex2f( -5.496558  + x,   -36.97633  + y);  //  48
            glVertex2f( -5.295932  + x,   -34.01951  + y);  //  49

            glEnd();

            break;

       case PB_SYMBOL_fClef: // The Base Clef
            drColour(colour);
            glLineWidth (3.0);
            glBegin(GL_LINE_STRIP);
                glVertex2f( -15.370325  + x,   -17.42068  + y);  //  1
                glVertex2f( -7.171025  + x,   -13.75432  + y);  //  2
                glVertex2f( -2.867225  + x,   -10.66642  + y);  //  3
                glVertex2f( 0.925165  + x,   -7.03249  + y);  //  4
                glVertex2f( 4.254425  + x,   -0.65527  + y);  //  5
                glVertex2f( 4.762735  + x,   7.77848  + y);  //  6
                glVertex2f( 2.693395  + x,   13.92227  + y);  //  7
                glVertex2f( -1.207935  + x,   16.80317  + y);  //  8
                glVertex2f( -5.526425  + x,   17.42068  + y);  //  9
                glVertex2f( -10.228205  + x,   15.65609  + y);  //  10
                glVertex2f( -13.453995  + x,   10.7128  + y);  //  11
                glVertex2f( -13.133655  + x,   5.43731  + y);  //  12
                glVertex2f( -9.475575  + x,   3.00714  + y);  //  13
                glVertex2f( -5.846445  + x,   4.72159  + y);  //  14
                glVertex2f( -5.395545  + x,   9.72918  + y);  //  15
                glVertex2f( -8.850025  + x,   11.64372  + y);  //  16
                glVertex2f( -11.519385  + x,   10.35816  + y);  //  17
                glVertex2f( -11.706365  + x,   6.8704  + y);  //  18
                glVertex2f( -9.463505  + x,   5.01391  + y);  //  19
                glVertex2f( -7.172075  + x,   5.81649  + y);  //  20
                glVertex2f( -7.189565  + x,   8.62975  + y);  //  21
                glVertex2f( -9.175055  + x,   9.82019  + y);  //  22
                glVertex2f( -10.696425  + x,   8.08395  + y);  //  23
                glVertex2f( -8.843065  + x,   6.66726  + y);  //  24
                glVertex2f( -8.995775  + x,   8.71136  + y);  //  25
            glEnd();

            glBegin(GL_POLYGON);
                glVertex2f( 10  + x,   14  + y);  //  26
                glVertex2f( 14  + x,   14 + y);  //  27
                glVertex2f( 14 + x,    10  + y);  //  28
                glVertex2f( 10  + x,   10  + y);  //  29
                glVertex2f( 10  + x,   14  + y);  //  30
            glEnd();

            glBegin(GL_POLYGON);
                glVertex2f( 10 + x,    4  + y);  //  31
                glVertex2f( 14  + x,   4  + y);  //  32
                glVertex2f( 14  + x,   0  + y);  //  33
                glVertex2f( 10 + x,    0  + y);  //  34
                glVertex2f( 10 + x,    4  + y);  //  35
           glEnd();

          break;

        case PB_SYMBOL_noteHead:
            //ppLogTrace("PB_SYMBOL_noteHead x %f y %f", x, y);
            if (!CChord::isNotePlayable(symbol.getNote(), 0))
            {
                colour = Cfg::noteColourDim();
                playable = false;
            }
            drawStaveExtentsion(symbol, x, 16, playable);
            if (colour == Cfg::noteColour()) //KORY added
            {
                int note = symbol.getNote() % MIDI_OCTAVE;
                switch (note)
                {
                    case 0: //note::PitchLabel::C:
                        colour = CColour(1.0, 0.0, 0.0); //Red
                      break;
                    case 1: //note::PitchLabel::CS:
                        colour = CColour(1.0, 0.25, 0.0); //Red
                      break;
                    case 2: //note::PitchLabel::D:
                        colour = CColour(1.0, 0.5, 0.0); //Orange
                      break;
                    case 3: //note::PitchLabel::DS:
                        colour = CColour(1.0, 0.75, 0.0); //Orange
                      break;
                    case 4: //note::PitchLabel::E:
                        colour = CColour(1.0, 1.0, 0.0); //Yellow
                      break;
                    case 5: //note::PitchLabel::F:
                        colour = CColour(0.0, 1.0, 0.0); //Green
                      break;
                    case 6: //note::PitchLabel::FS:
                        colour = CColour(0.0, 0.5, 0.5); //Green
                      break;
                    case 7: //note::PitchLabel::G:
                        colour = CColour(0.0, 0.0, 1.0); //Blue
                      break;
                    case 8: //note::PitchLabel::GS:
                        colour = CColour(0.290, 0.0, 0.903); //Blue
                      break;
                    case 9: //note::PitchLabel::A:
                        colour = CColour(0.580, 0.0, 0.827); //Dark Violet #9400D3
                      break;
                    case 10: //note::PitchLabel::AS:
                        colour = CColour(0.790, 0.0, 0.903); //Dark Violet #9400D3
                      break;
                    case 11: //note::PitchLabel::B:
                        colour = CColour(1.0, 0.0, 1.0); //Magenta
                      break;
                }
            }
            drColour(colour);
            glBegin(GL_POLYGON);
                glVertex2f(-7.0 + x,  2.0 + y); // 1
                glVertex2f(-5.0 + x,  4.0 + y); // 2
                glVertex2f(-1.0 + x,  6.0 + y); // 3
                glVertex2f( 4.0 + x,  6.0 + y); // 4
                glVertex2f( 7.0 + x,  4.0 + y); // 5
                glVertex2f( 7.0 + x,  1.0 + y); // 6
                glVertex2f( 6.0 + x, -2.0 + y); // 7
                glVertex2f( 4.0 + x, -4.0 + y); // 8
                glVertex2f( 0.0 + x, -6.0 + y); // 9
                glVertex2f(-4.0 + x, -6.0 + y); // 10
                glVertex2f(-8.0 + x, -3.0 + y); // 11
                glVertex2f(-8.0 + x, -0.0 + y); // 12
            glEnd();

            /*
            // shows the MIDI Duration (but not very useful)
            glLineWidth(4.0);
            drColour(CColour(0.3, 0.4, 0.4));
            glBegin(GL_LINE_STRIP);
                glVertex2f(x,  y);
                glVertex2f(x + CMidiFile::ppqnAdjust(symbol.getMidiDuration()) * HORIZONTAL_SPACING_FACTOR, y);
            glEnd();
            drColour(colour);
            */

            checkAccidental(symbol, x, y);
            break;

        case PB_SYMBOL_drum:
            if (!CChord::isNotePlayable(symbol.getNote(), 0))
                colour = Cfg::noteColourDim();
            drColour(colour);
            glLineWidth (3.0);
            glBegin(GL_LINES);
                glVertex2f( 5.0 + x,-5.0 + y);
                glVertex2f(-5.0 + x, 5.0 + y);
                glVertex2f(-5.0 + x,-5.0 + y);
                glVertex2f( 5.0 + x, 5.0 + y);
            glEnd();
            checkAccidental(symbol, x, y);
            break;

        case PB_SYMBOL_sharp:
            glLineWidth (2.0);
            glBegin(GL_LINES);
                glVertex2f(-2.0 + x, -14.0 + y);
                glVertex2f(-2.0 + x,  14.0 + y);

                glVertex2f( 2.0 + x, -13.0 + y);
                glVertex2f( 2.0 + x,  15.0 + y);

                glVertex2f(-5.0 + x,   4.0 + y);
                glVertex2f( 5.0 + x,   7.0 + y);

                glVertex2f(-5.0 + x,  -6.0 + y);
                glVertex2f( 5.0 + x,  -3.0 + y);
            glEnd();
            break;

         case PB_SYMBOL_flat:
            glLineWidth (2.0);
            glBegin(GL_LINE_STRIP);
                glVertex2f(-4.0 + x, 17.0 + y);  // 1
                glVertex2f(-4.0 + x, -6.0 + y);  // 2
                glVertex2f( 2.0 + x, -2.0 + y);  // 3
                glVertex2f( 5.0 + x,  2.0 + y);  // 4
                glVertex2f( 5.0 + x,  4.0 + y);  // 5
                glVertex2f( 3.0 + x,  5.0 + y);  // 6
                glVertex2f( 0.0 + x,  5.0 + y);  // 7
                glVertex2f(-4.0 + x,  2.0 + y);  // 8
            glEnd();
            break;

         case PB_SYMBOL_natural:
            glLineWidth (2.0);
            glBegin(GL_LINES);
                glVertex2f(  3 + x,   -15  + y);  //  1
                glVertex2f(  3 + x,   8  + y);  //  2

                glVertex2f( -3 + x,   -8  + y);  //  3
                glVertex2f( -3 + x,   15  + y);  //  4

                glVertex2f(  3 + x,   8  + y);  //  5
                glVertex2f( -3 + x,   2  + y);  //  6

                glVertex2f(  3 + x,   -2  + y);  //  7
                glVertex2f( -3 + x,   -8  + y);  //  8
            glEnd();
            break;

        case PB_SYMBOL_barLine:
            x += BEAT_MARKER_OFFSET * HORIZONTAL_SPACING_FACTOR; // the beat markers where entered early so now move them correctly
            glLineWidth (4.0);
            drColour ((m_displayHand == PB_PART_left) ? Cfg::staveColourDim() : Cfg::staveColour());
            oneLine(x, CStavePos(PB_PART_right, 4).getPosYRelative(), x, CStavePos(PB_PART_right, -4).getPosYRelative());
            drColour ((m_displayHand == PB_PART_right) ? Cfg::staveColourDim() : Cfg::staveColour());
            oneLine(x, CStavePos(PB_PART_left, 4).getPosYRelative(), x, CStavePos(PB_PART_left, -4).getPosYRelative());
            break;

        case PB_SYMBOL_barMarker:
            x += BEAT_MARKER_OFFSET * HORIZONTAL_SPACING_FACTOR; // the beat markers where entered early so now move them correctly
            glLineWidth (5.0);
            drColour(Cfg::barMarkerColour());
            oneLine(x, CStavePos(PB_PART_right, m_beatMarkerHeight).getPosYRelative(), x, CStavePos(PB_PART_left, -m_beatMarkerHeight).getPosYRelative());
            glDisable (GL_LINE_STIPPLE);
            break;

        case PB_SYMBOL_beatMarker:
            x += BEAT_MARKER_OFFSET * HORIZONTAL_SPACING_FACTOR; // the beat markers where entered early so now move them correctly
            glLineWidth (4.0);
            drColour(Cfg::beatMarkerColour());
            oneLine(x, CStavePos(PB_PART_right, m_beatMarkerHeight).getPosYRelative(), x, CStavePos(PB_PART_left, -m_beatMarkerHeight).getPosYRelative());
            glDisable (GL_LINE_STIPPLE);
            break;

         case PB_SYMBOL_playingZone:
            {
                float topY = CStavePos(PB_PART_right, m_beatMarkerHeight).getPosY();
                float bottomY = CStavePos(PB_PART_left, -m_beatMarkerHeight).getPosY();
                float early = Cfg::playZoneEarly() * HORIZONTAL_SPACING_FACTOR;
                float late = Cfg::playZoneLate() * HORIZONTAL_SPACING_FACTOR;
                //glColor3f (0.7, 1.0, 0.7);
                glColor3f (0.0, 0.0, 0.3);
                glRectf(x-late, topY, x + early, bottomY);
                glLineWidth (2.0);
                glColor3f (0.0, 0.0, 0.8);
                oneLine(x, topY, x, bottomY );
                glLineWidth (1.0);
                glColor3f (0.0, 0.0, 0.6);
                oneLine(x-late, topY, x-late, bottomY );
                oneLine(x+early, topY, x+early, bottomY );
            }
            break;

       default:

            if (symbol.getType() >= PB_SYMBOL_noteHead)
                playable = drawNote(&symbol, x, y, slot, colour, playable);
            else
                ppDEBUG(("ERROR drawSymbol unhandled symbol\n"));
            break;
    }

    if (symbol.getType() >= PB_SYMBOL_noteHead)
    {
        float pianistX = symbol.getPianistTiming();
        if ( pianistX != NOT_USED)
        {
            pianistX =  x + pianistX * HORIZONTAL_SPACING_FACTOR;
            drColour(CColour(1.0, 1.0, 1.0));
            glLineWidth (2.0);
            glBegin(GL_LINES);
            glVertex2f( 4.0 + pianistX, 4.0 + y);
            glVertex2f(-5.0 + pianistX,-5.0 + y);
            glVertex2f( 4.0 + pianistX,-4.0 + y); // draw pianist note timing markers
            glVertex2f(-5.0 + pianistX, 5.0 + y);
            glEnd();
        }
        if ( playable )
            drawStaveNoteName(symbol, x, y);
    }
}
</code>
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

hpladds
In reply to this post by KISA
"
KISA wrote
Hi,

I've managed to get PB installed on my Raspberry Pi using the Raspbian OS. It did require recompiling some of the dependency sources as well as the PB source, but much to my excitement it worked (the compiling and installing did anyway :) ).

Markus
Pianobooster now compiles and plays on a Raspberry Pi 3 / Raspian with the experimental OpenGL enabled (Note: the code needs to be patched and mwindows commented out in the CMakeLists.txt file.)

Unfortunately there is a bug that causes only 3 staves to be displayed. I suspect the three stave bug causes the note placement to be skewed.  I suspect that the software is calculating note placement based upon a narrower scale. Instead of the typical ABCDEFGA octave, it works with a ABCDEA six note "octave."  Maybe call it a hexave?

An Ubuntu Mate / Pianobooster combo has been an unsuccessful headache! However I believe the OpenGL implementation is better.  
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

hpladds
In reply to this post by Kory
Thanks so much for posting the code.  Sadly I had a few difficulties with the compile, and the errors seem to relate to the CDraw. I'm trying to teach myself C++ but am at a loss as to how to correct the errors. Any guidance?

Again thank you for posting!

Error messages:
"/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:298:99: error: no ‘bool CDraw::drawNote(CSymbol*, float, float, CSlot*, CColour, bool)’ member function declared in class ‘CDraw’
 Symbol* symbol, float x, float y, CSlot* slot, CColour colour, bool playable)
                                                                             ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:392:6: error: prototype for ‘void CDraw::drawSymbol(CSymbol, float, float, CSlot*)’ does not match any in class ‘CDraw’
 void CDraw::drawSymbol(CSymbol symbol, float x, float y, CSlot* slot)
      ^
In file included from /home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:29:0:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:84:10: error: candidates are: void CDraw::drawSymbol(CSymbol, float)
     void drawSymbol(CSymbol symbol, float x);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:83:10: error:                 void CDraw::drawSymbol(CSymbol, float, float)
     void drawSymbol(CSymbol symbol, float x, float y);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:739:33: error: no ‘void CDraw::drawSlot(CSlot*)’ member function declared in class ‘CDraw’
 void CDraw::drawSlot(CSlot* slot)"


Complete message:
"....desktop:~/PiBoo/pianobooster-src-0.6.4/build$ cmake ../src
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libGL.so  
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - found
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found
-- Found Qt4: /usr/bin/qmake (found version "4.8.7")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hpladds/PiBoo/pianobooster-src-0.6.4/build
hpladds@hpladds-desktop:~/PiBoo/pianobooster-src-0.6.4/build$ make
[  1%] Generating ui_GuiLoopingPopup.h
[  3%] Generating moc_QtWindow.cxx
[  5%] Generating moc_GlView.cxx
[  6%] Generating moc_GuiTopBar.cxx
[  8%] Generating moc_GuiSidePanel.cxx
[ 10%] Generating moc_GuiMidiSetupDialog.cxx
[ 11%] Generating moc_GuiKeyboardSetupDialog.cxx
[ 13%] Generating moc_GuiPreferencesDialog.cxx
[ 15%] Generating moc_GuiSongDetailsDialog.cxx
[ 16%] Generating moc_GuiLoopingPopup.cxx
[ 18%] Generating qrc_application.cxx
[ 20%] Generating ui_GuiTopBar.h
[ 21%] Generating ui_GuiSidePanel.h
[ 23%] Generating ui_GuiMidiSetupDialog.h
[ 25%] Generating ui_GuiKeyboardSetupDialog.h
[ 26%] Generating ui_GuiPreferencesDialog.h
[ 28%] Generating ui_GuiSongDetailsDialog.h
Scanning dependencies of target pianobooster
[ 30%] Building CXX object CMakeFiles/pianobooster.dir/QtMain.o
[ 31%] Building CXX object CMakeFiles/pianobooster.dir/QtWindow.o
[ 33%] Building CXX object CMakeFiles/pianobooster.dir/GuiTopBar.o
[ 35%] Building CXX object CMakeFiles/pianobooster.dir/GuiSidePanel.o
[ 36%] Building CXX object CMakeFiles/pianobooster.dir/GuiMidiSetupDialog.o
[ 38%] Building CXX object CMakeFiles/pianobooster.dir/GuiKeyboardSetupDialog.o                                                                            
[ 40%] Building CXX object CMakeFiles/pianobooster.dir/GuiPreferencesDialog.o
[ 41%] Building CXX object CMakeFiles/pianobooster.dir/GuiSongDetailsDialog.o
[ 43%] Building CXX object CMakeFiles/pianobooster.dir/GuiLoopingPopup.o
[ 45%] Building CXX object CMakeFiles/pianobooster.dir/GlView.o
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/GlView.cpp: In member function ‘virtual void CGLView::resizeGL(int, int)’:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/GlView.cpp:272:9: warning: unused variable ‘space’ [-Wunused-variable]
     int space = height - (heightAboveStave + heightBelowStave + minTitleHeigh
         ^
[ 46%] Building CXX object CMakeFiles/pianobooster.dir/MidiFile.o
[ 48%] Building CXX object CMakeFiles/pianobooster.dir/MidiTrack.o
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp: In member function ‘void CMidiTrack::readTimeSignatureEvent()’:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp:186:12: warning: variable ‘b3’ set but not used [-Wunused-but-set-variable]
     byte_t b3, b4;
            ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp:186:16: warning: variable ‘b4’ set but not used [-Wunused-but-set-variable]
     byte_t b3, b4;
                ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp: In member function ‘void CMidiTrack::readMetaEvent(byte_t)’:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp:249:13: warning: variable ‘data’ set but not used [-Wunused-but-set-variable]
     dword_t data;
             ^
[ 50%] Building CXX object CMakeFiles/pianobooster.dir/Song.o
[ 51%] Building CXX object CMakeFiles/pianobooster.dir/Conductor.o
[ 53%] Building CXX object CMakeFiles/pianobooster.dir/Util.o
[ 55%] Building CXX object CMakeFiles/pianobooster.dir/Chord.o
[ 56%] Building CXX object CMakeFiles/pianobooster.dir/Tempo.o
[ 58%] Building CXX object CMakeFiles/pianobooster.dir/MidiDevice.o
[ 60%] Building CXX object CMakeFiles/pianobooster.dir/MidiDeviceRt.o
[ 61%] Building CXX object CMakeFiles/pianobooster.dir/rtmidi/RtMidi.o
[ 63%] Building CXX object CMakeFiles/pianobooster.dir/StavePosition.o
[ 65%] Building CXX object CMakeFiles/pianobooster.dir/Score.o
[ 66%] Building CXX object CMakeFiles/pianobooster.dir/Cfg.o
[ 68%] Building CXX object CMakeFiles/pianobooster.dir/Piano.o
[ 70%] Building CXX object CMakeFiles/pianobooster.dir/Draw.o
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:298:99: error: no ‘bool CDraw::drawNote(CSymbol*, float, float, CSlot*, CColour, bool)’ member function declared in class ‘CDraw’
 Symbol* symbol, float x, float y, CSlot* slot, CColour colour, bool playable)
                                                                             ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:392:6: error: prototype for ‘void CDraw::drawSymbol(CSymbol, float, float, CSlot*)’ does not match any in class ‘CDraw’
 void CDraw::drawSymbol(CSymbol symbol, float x, float y, CSlot* slot)
      ^
In file included from /home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:29:0:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:84:10: error: candidates are: void CDraw::drawSymbol(CSymbol, float)
     void drawSymbol(CSymbol symbol, float x);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:83:10: error:                 void CDraw::drawSymbol(CSymbol, float, float)
     void drawSymbol(CSymbol symbol, float x, float y);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:739:33: error: no ‘void CDraw::drawSlot(CSlot*)’ member function declared in class ‘CDraw’
 void CDraw::drawSlot(CSlot* slot)
                                 ^
CMakeFiles/pianobooster.dir/build.make:727: recipe for target 'CMakeFiles/pianobooster.dir/Draw.o' failed
make[2]: *** [CMakeFiles/pianobooster.dir/Draw.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/pianobooster.dir/all' failed
make[1]: *** [CMakeFiles/pianobooster.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2"
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

Kory
This was for a much older code version, so you will have to merge the changes as appropriate to the latest code base.  Apparently they are no longer compatible.

On Tue, Mar 21, 2017 at 8:37 AM, hpladds [via Piano Booster] <[hidden email]> wrote:
Thanks so much for posting the code.  Sadly I had a few difficulties with the compile, and the errors seem to relate to the CDraw. I'm trying to teach myself C++ but am at a loss as to how to correct the errors. Any guidance?

Again thank you for posting!

Error messages:
"/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:298:99: error: no ‘bool CDraw::drawNote(CSymbol*, float, float, CSlot*, CColour, bool)’ member function declared in class ‘CDraw’
 Symbol* symbol, float x, float y, CSlot* slot, CColour colour, bool playable)
                                                                             ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:392:6: error: prototype for ‘void CDraw::drawSymbol(CSymbol, float, float, CSlot*)’ does not match any in class ‘CDraw’
 void CDraw::drawSymbol(CSymbol symbol, float x, float y, CSlot* slot)
      ^
In file included from /home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:29:0:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:84:10: error: candidates are: void CDraw::drawSymbol(CSymbol, float)
     void drawSymbol(CSymbol symbol, float x);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:83:10: error:                 void CDraw::drawSymbol(CSymbol, float, float)
     void drawSymbol(CSymbol symbol, float x, float y);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:739:33: error: no ‘void CDraw::drawSlot(CSlot*)’ member function declared in class ‘CDraw’
 void CDraw::drawSlot(CSlot* slot)"


Complete message:
"....desktop:~/PiBoo/pianobooster-src-0.6.4/build$ cmake ../src
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libGL.so  
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - found
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found
-- Found Qt4: /usr/bin/qmake (found version "4.8.7")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hpladds/PiBoo/pianobooster-src-0.6.4/build
hpladds@hpladds-desktop:~/PiBoo/pianobooster-src-0.6.4/build$ make
[  1%] Generating ui_GuiLoopingPopup.h
[  3%] Generating moc_QtWindow.cxx
[  5%] Generating moc_GlView.cxx
[  6%] Generating moc_GuiTopBar.cxx
[  8%] Generating moc_GuiSidePanel.cxx
[ 10%] Generating moc_GuiMidiSetupDialog.cxx
[ 11%] Generating moc_GuiKeyboardSetupDialog.cxx
[ 13%] Generating moc_GuiPreferencesDialog.cxx
[ 15%] Generating moc_GuiSongDetailsDialog.cxx
[ 16%] Generating moc_GuiLoopingPopup.cxx
[ 18%] Generating qrc_application.cxx
[ 20%] Generating ui_GuiTopBar.h
[ 21%] Generating ui_GuiSidePanel.h
[ 23%] Generating ui_GuiMidiSetupDialog.h
[ 25%] Generating ui_GuiKeyboardSetupDialog.h
[ 26%] Generating ui_GuiPreferencesDialog.h
[ 28%] Generating ui_GuiSongDetailsDialog.h
Scanning dependencies of target pianobooster
[ 30%] Building CXX object CMakeFiles/pianobooster.dir/QtMain.o
[ 31%] Building CXX object CMakeFiles/pianobooster.dir/QtWindow.o
[ 33%] Building CXX object CMakeFiles/pianobooster.dir/GuiTopBar.o
[ 35%] Building CXX object CMakeFiles/pianobooster.dir/GuiSidePanel.o
[ 36%] Building CXX object CMakeFiles/pianobooster.dir/GuiMidiSetupDialog.o
[ 38%] Building CXX object CMakeFiles/pianobooster.dir/GuiKeyboardSetupDialog.o                                                                            
[ 40%] Building CXX object CMakeFiles/pianobooster.dir/GuiPreferencesDialog.o
[ 41%] Building CXX object CMakeFiles/pianobooster.dir/GuiSongDetailsDialog.o
[ 43%] Building CXX object CMakeFiles/pianobooster.dir/GuiLoopingPopup.o
[ 45%] Building CXX object CMakeFiles/pianobooster.dir/GlView.o
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/GlView.cpp: In member function ‘virtual void CGLView::resizeGL(int, int)’:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/GlView.cpp:272:9: warning: unused variable ‘space’ [-Wunused-variable]
     int space = height - (heightAboveStave + heightBelowStave + minTitleHeigh
         ^
[ 46%] Building CXX object CMakeFiles/pianobooster.dir/MidiFile.o
[ 48%] Building CXX object CMakeFiles/pianobooster.dir/MidiTrack.o
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp: In member function ‘void CMidiTrack::readTimeSignatureEvent()’:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp:186:12: warning: variable ‘b3’ set but not used [-Wunused-but-set-variable]
     byte_t b3, b4;
            ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp:186:16: warning: variable ‘b4’ set but not used [-Wunused-but-set-variable]
     byte_t b3, b4;
                ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp: In member function ‘void CMidiTrack::readMetaEvent(byte_t)’:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/MidiTrack.cpp:249:13: warning: variable ‘data’ set but not used [-Wunused-but-set-variable]
     dword_t data;
             ^
[ 50%] Building CXX object CMakeFiles/pianobooster.dir/Song.o
[ 51%] Building CXX object CMakeFiles/pianobooster.dir/Conductor.o
[ 53%] Building CXX object CMakeFiles/pianobooster.dir/Util.o
[ 55%] Building CXX object CMakeFiles/pianobooster.dir/Chord.o
[ 56%] Building CXX object CMakeFiles/pianobooster.dir/Tempo.o
[ 58%] Building CXX object CMakeFiles/pianobooster.dir/MidiDevice.o
[ 60%] Building CXX object CMakeFiles/pianobooster.dir/MidiDeviceRt.o
[ 61%] Building CXX object CMakeFiles/pianobooster.dir/rtmidi/RtMidi.o
[ 63%] Building CXX object CMakeFiles/pianobooster.dir/StavePosition.o
[ 65%] Building CXX object CMakeFiles/pianobooster.dir/Score.o
[ 66%] Building CXX object CMakeFiles/pianobooster.dir/Cfg.o
[ 68%] Building CXX object CMakeFiles/pianobooster.dir/Piano.o
[ 70%] Building CXX object CMakeFiles/pianobooster.dir/Draw.o
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:298:99: error: no ‘bool CDraw::drawNote(CSymbol*, float, float, CSlot*, CColour, bool)’ member function declared in class ‘CDraw’
 Symbol* symbol, float x, float y, CSlot* slot, CColour colour, bool playable)
                                                                             ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:392:6: error: prototype for ‘void CDraw::drawSymbol(CSymbol, float, float, CSlot*)’ does not match any in class ‘CDraw’
 void CDraw::drawSymbol(CSymbol symbol, float x, float y, CSlot* slot)
      ^
In file included from /home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:29:0:
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:84:10: error: candidates are: void CDraw::drawSymbol(CSymbol, float)
     void drawSymbol(CSymbol symbol, float x);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.h:83:10: error:                 void CDraw::drawSymbol(CSymbol, float, float)
     void drawSymbol(CSymbol symbol, float x, float y);
          ^
/home/hpladds/PiBoo/pianobooster-src-0.6.4/src/Draw.cpp:739:33: error: no ‘void CDraw::drawSlot(CSlot*)’ member function declared in class ‘CDraw’
 void CDraw::drawSlot(CSlot* slot)
                                 ^
CMakeFiles/pianobooster.dir/build.make:727: recipe for target 'CMakeFiles/pianobooster.dir/Draw.o' failed
make[2]: *** [CMakeFiles/pianobooster.dir/Draw.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/pianobooster.dir/all' failed
make[1]: *** [CMakeFiles/pianobooster.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2"


If you reply to this email, your message will be added to the discussion below:
http://piano-booster.2625608.n2.nabble.com/Pianobooster-port-to-arm-linux-or-Android-tp7572459p7572675.html
To unsubscribe from Pianobooster port to arm linux or Android., click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

hpladds
Thanks.

Hoot! I see an opportunity to contribute. Lemme see what I can do.
Reply | Threaded
Open this post in threaded view
|

Re: Pianobooster port to arm linux or Android.

hpladds
In reply to this post by robert1968
Pianobooster runs on Raspberry Pi 3B

I recently compiled the latest Raspbian code on my Pi 3 B using the instructions here: https://www.raspberrypi.org/documentation/linux/kernel/building.md 

After updating the system,  uname -r returned "4.9.44-V7+"

Then apt-get install pianobooster, and it works!

I did enable the experimental OpenGL driver found with the command line "raspi-config" command and turned off video optimisation in Pianobooster.