sonic-pi-net / sonic-pi

Code. Music. Live.
https://sonic-pi.net
Other
10.86k stars 924 forks source link

Sonic-Pi v3.2.2 Fullscreen, "Playability" and Synth issues on Raspberry Pi 4B running Headless #2411

Closed SymbReprUnlim closed 2 years ago

SymbReprUnlim commented 4 years ago

I'm running Sonic-Pi v3.2.2 on a Raspberry Pi 4B, that is running headless, i.e. no monitor, using VNC on a local area network. Multiple issues occur on a low-res, i.e. headless R-Pi boot with Sonic-Pi: 1) After Sonic-Pi goes Fullscreen and toggled back to Non-fullscreen, the Sonic-Pi title bar over-writes the top Raspberry Command or "windows" area and the ^vX boxes disappear. This means Sonic-Pi cannot be window-resized, but more importantly, Sonic-Pi cannot be Closed unless the user switches to LXTerminal and issues a pkill command, e.g. pkill sonic-pi. 2) Whether Fullscreen or not, Sonic-Pi's help window entirely disappears or is invisible while running Sonic-Pi in a headless environment, e.g. VNC or NoMachine. It is truly annoying and for a new user to Sonic-PI, an instant turn-off.

The problems go away if the Raspberry Pi is hooked to an HDMI monitor and the user VNC's in, but headless mode, with a therefore forced lower screen resolution, the issues above are highly aggravating.

Also, I've researched everywhere and cannot find how to load additional Synth's into Sonic-Pi, such as a flute synth, violin synth, cello synth, trumpet synth, saxophone, tenor sax, choir ooh's and aahh's synths, acoustic guitar (steel string) synth, and so on. These are standard standard midi synths, entirely absent from Sonic-Pi. Also, custom or international synths integration creation or import into Sonic-Pi do not exist.

Lastly, the Live Performance info is only remotely useful to musicians and laypersons and avoids the issue of using Sonic-Pi machine as if it were a true in-hand keyboard or musical instrument. There's no way to hold down say the C key on a computer keyboard and play a C chord for x or 0.x seconds, as if one were playing along with other musicians - it all has to be hard-coded with timings - and I've seen Sam Aaron's "live play" video. Sonic-Pi's chief competitor on iOS or Apple is GarageBand, which is light years ahead of Sonic-Pi and yet is free also. Tapping on a keyboard with GarageBand sounds out individual music notes or chords, depending on what the non-musician/musician wants played.

I apologize if the above information sounds negative, but programs such as Sonic-Pi will never improve over time if one only profusely glows about its present capabilities and features.

Attached is a fairly comprehensive set of "usually available" music synths, essentially the equivalent of an international symphony orchestra set of musical instruments, along with various synth sound-effects. Best regards, Rob Wallick MusicSynths.txt

ethancrawford commented 4 years ago

Hi Rob,

Thankyou for your thoughts. It's always helpful to receive feedback, whether positive or not. Clearly, there are several aspects of Sonic Pi as it currently stands that are not suiting your current workflow.

I will do my best to reply. I may not be able to address all of your comments completely - and it's possible others may have better answers, but I hope I can at least shed some light on some of your concerns.

Firstly, headless mode/low resolution. I see that it is possible when the resolution on the Raspberry Pi is set fairly low (and I take it you are unable to change the resolution to something reasonable with the raspi-config tool?) to get to a state where the app perhaps does not come out of full-screen in such a way that the window's frame is totally in view. Why, I don't really know. However - in most flavours of Linux I've used, (Raspbian included), when the current app is partly off-screen, you can in fact use a handy shortcut to bring the window's menu bar back into view - hold down the Alt key and you will find that you can then click and drag the window about with the mouse, in order to then use the buttons, or resize the window :-)

Next - The help window. If you are unable to change the screen resolution on the Pi, then I can see that having the help panel extend beyond the edge of the screen (if that is what you are referring to?) would be annoying. While it may not be exactly what you need, it is entirely possible to 'un-dock' the help panel from the main app and have it as a floating window - perhaps this is useful.

Additional Synths: A quick bit of background: sound generation via the built-in synths is carried out by a separate sound engine under the hood called SuperCollider. The built-in synths are created in a special SuperCollider format.

The reason that synths similar to the full range of sounds available through general MIDI are not built in to Sonic Pi - well, (and this is just how I see it, someone else may have a different reason or might explain it better), as old as SuperCollider is, it obviously never reached the same point that MIDI did to become a universal standard - and as such no common group of synths emerged, meaning that SuperCollider users are left to themselves to design their own synths out of its basic low level building blocks. As such, when Sam first created Sonic Pi's synths, there might have been some designs floating around here and there to make use of, but certainly nothing approaching the full set in general MIDI. There might be ways to create synths for SuperCollider/Sonic Pi that might approach a similar offering, but this has not yet been a priority. (As an aside, there are definitely plans to add extra synths to Sonic Pi however - I in particular am very keen on this and have a few in the works. My particular interest is to hopefully add synths which can generate a wide variety of sounds, even if they do not cover the same sounds as General MIDI).

Meanwhile, even though it may currently be the case that Sonic Pi cannot directly generate the full range of general MIDI sounds with a built in synth in a succinct manner, it is still entirely possible to extend the range of sounds that Sonic Pi can make. To do so, there are several options: aside from using custom pre-recorded samples, (ideal for the sound effects side of things), for new musical tones we can also either load extra (custom) synths in the SuperCollider format into Sonic Pi, or connect to external synths or devices (hardware or software) via MIDI or OSC protocols. To load extra synths into Sonic Pi, the command to use is load_synthdefs, described in the 'Lang' section of the documentation, and point it towards a folder containing your extra synths. On the other hand, to connect to external synths or devices, this is all described in the tutorial, in chapters 11 and 12. (Or see https://sonic-pi.net/tutorial#section-11 and https://sonic-pi.net/tutorial#section-12).

Live performance: I would put forward that the live performance info, (assuming you mean the sections in the tutorial about live coding) is entirely relevant to the kind of activity that one of Sonic Pi's primary features enables - live music. Sonic Pi is not just designed for static music composition. Neither, for that matter, does every musician make music only and leave it up to other people to find and listen to it later; Nor is live music performance irrelevant to all 'lay-people'.

Also, yes, it's true that Sonic Pi does not have a 'music keyboard' mode - because it was never designed to work like that. I am guessing however that Sam would have no objections to a feature such as this being included. I can also only guess that the reason such a feature has not already been later added to Sonic Pi is mostly to do with priority. Regarding fixed sound envelopes, Sonic Pi's original (but now by no means only) purpose was to facilitate the teaching of Computing concepts to children (through coding). As I understand it, in the beginning, it was put together in quite a short time frame - and SuperCollider's way of doing things meant that in order to make things simple enough for a 10 year old to understand, and still deliver Sonic Pi in time, it was necessary to make synths have 'hard-coded' sound envelopes defined before they were triggered. It's possible that there is still a desire to eventually add the ability for synths to have non-hard-coded synth envelopes, but I can't remember exactly. It comes down to any technical constraints and the ability to make new features always 10 year old friendly.

That you compare GarageBand to us as a chief competitor is gratifying - thankyou! At the same time, I would put forward that Sonic Pi and GarageBand focus on two widely different music making mechanics - Excluding the use of external devices in either case, GarageBand, as with the bulk of other common music 'DAW's, is a program primarily focused around making music by manipulating graphical widgets. Sonic Pi on the other hand, is, again, otherwise primarily focused on live-coding. This is perhaps one reason why GarageBand may seem light years ahead of Sonic Pi - they focus (as far as the GUI is concerned) on two different things. (There is also the fact that Sonic Pi is an open source project financed by crowd-funding, talks, gigs, and workshops, (all done by Sam) and maintained in co-operation with 8 other volunteer core team members (myself included) in their spare time, with occasional code contributions from the wider community).

Apologies for the rather lengthy reply! I hope that it goes at least part-way towards addressing some of your concerns. If nothing else it hopefully gives an idea of some of the background and aims of Sonic Pi (which I believe I have relayed correctly - but any errors are entirely my own) :-)

rbnpi commented 4 years ago

Further to Ethan's comments, I have had a look at the problems you are having using vncserver with Raspbian and Sonic Pi. I think this is a configuration problem. I found the solution was to use the command line sudo raspi-config and to select option A7 Advanced Options followed by A5 Resolution and select DMT Mode 82 1920x1080 You can do this via ssh if you wish. Then when you run vncviewer and connect go to Preferences Screen Resolution and select configure screens HDMI1 resolution 1920x1080 (or lower if you wish). Don't forget to then select configure apply to activate your choice.. Doing this I then had a full 1920x1080 screen on my Mac which was viewing the headless Pi4 and I had no problems with Sonic Pi screen sizes. I agree that it doesn't really work on very small screen sizes, but it wasn't really designed for that. Let me know if this helps you out.

SymbReprUnlim commented 4 years ago

Hi to both of you and thank you (Ethan Crawford and rbnpi) for commenting. You did not have to comment at all and you attempted to solve "my" specific issues, again HELPFUL in approach and informative to me , as well as anyone happening to read these posts. Please bear that in mind as you read what follows - I find your posts HELPFUL towards solving the technical issues.

On the other hand, and please bear with me, I write a significant amount of software and I also use an even greater amount of software, as well as playing a musical instrument, not professionally, but above average, at least sometimes.

You've both missed my main points: 1) The program Design Layout of Sonic-Pi is inferior to most programs. Help is normally Easily found and Easily accessible. With Sonic Pi, Help is way down at the bottom and Cut-Off on a low-res monitor, at least on a R-Pi 4B running headless. The Sonic-Pi "Window" drop-down menu at the top-left has a toggle Help On/Off - but On does not generate a new full-screen window, merely a partial-way-down-below window. So getting Sonic-Pi help is significantly marginalized. If the program is primarily designed for kids, they are going to have a hard time finding Help. Further, without several weeks or months of research, they will never learn how to play Musical instruments through sonic-pi. The synth choices are electronic at best and not realistically music instrument sounding, with the possible exception of the piano; great, one somewhat realistic-sounding musical instrument, but again each note has to be hard-coded. 2) The live play assumes everybody else in a music group is going to follow the hard-coded lead of the Sonic-Pi. That's not how music groups work nor how musical accompaniment works. A lot-most musicians follow, whether it's following a conductor, or lead singer, drummer or lead guitarist. And what - this user was not already aware that Sonic-Pi was Not originally intended to be used as a music instrument, that it was originally designed as a programming language tool Only? Please, I've done some research and hard-coding in Sonic-Pi, though likely less than both of you.

So, users of Sonic Pi are learning how to program music? Forgive me, but what users are learning is - some excruciating, drawn-out details about the very large number of coding lines needed to program or hard code - a Single song or single melody. Something that a computer should be - is shortening, not lengthening (coding times for songs, music, accompaniment, etc.), whoever the target market is (kids, adults, musicians, non-musicians, etc.).

Again, I truly, actually do appreciate both of your responses. I'm grateful you spent some time reading, let alone attempting to answer my issues. But has any of this helped the current user-base of Sonic-Pi do more musically or create music better, or faster? Not yet. I and apparently everyone else will just have to wait for the next release of Sonic-Pi, whenever that will be.

Because I cannot actually "play" a Sonic-Pi as if it were a musical instrument along with music that is also independently playing, in an accompany-type role - I cannot at present seriously devote myself to using Sonic-Pi. It's interesting, somewhat, but it's just another programming language.

It "may" be great for kids, but I do not see a lot of animation, pop-ups, colors, use of graphics, an equalizer, sound oscilloscope, easy input-output of different musical instruments, easy access of games, music tricks, easy help access, etc.

I also tend to be realistically critical of software programs, because I see what they could be, instead of being just another run-of-the-mill program, short-term fad or momentarily great program, like a shooting star.

Sonic-Pi, version 3.2.2 does not take my breath away.

I can't even work with a music staff, music measures, a key, graphical treble-clef-time-signature and or view music notes play on the computer screen - with Sonic-Pi.

Kids, especially those musically inclined, should be able to do that also, ref. https://musescore.org/en or download at https://musescore.org/en/download

Best regards, thanks for responding, Rob

SymbReprUnlim commented 4 years ago

P.S. I have seen the oscilloscope on Sonic-Pi. It's pretty basic and did not find it overly helpful (frequency range?, simultaneous music notes? more colors? a separate external full-screen window? stereo?), although it did inform the user that he/she/they should hear something coming out of their machine/speaker(s).

ethancrawford commented 4 years ago

Hi Rob,

I am glad you found our advice helpful regarding your technical issues.

Thankyou for your additional feedback. Software development is a colourful business - User Experience doubly so. At the end of the day, people experience software as individuals. Just like any other piece of software that has an active userbase, there will be aspects of Sonic Pi that will subjectively appeal to (or repel) some folks and not others.

There are of course many improvements that we still hope to make (collaborative performance indeed being a good example). Ultimately however, I suspect how Sonic Pi evolves may end up being a matter where in some respects we agree to disagree.

Even so, thankyou again for your feedback.

SymbReprUnlim commented 4 years ago

You have not closed out the issue, so thank you Ethan. We seem to understand each other at least a little better. Evolution, not revolution, so to speak.. Can you please help me better understand where it is we "agree to disagree." Apparently, I do not yet fully understand your view. I'd offer up a happy Saturday, but that likely does not comprehensively address differences in perspective. Muito obrigado [you might need a Google Translator for that ;-) ] Beethoven's 5th Symphony, 1st movement https://www.youtube.com/watch?v=_4IRMYuE1hI

SymbReprUnlim commented 4 years ago

By the way, Beethoven took several decades to write one of his most beloved Symphonies #9, including the Ode to Joy in the last movement. People enjoy hearing it several hundred years later. Do I like Sonic-Pi? Sure. Do I hate using it? No. Is the software likely frustrating to new Sonic Pi users? Probably. Does it take new users hours and hours to code a new melody in Sonic Pi? Probably; definitely hours and hours for this user. Does anyone today have decades to write a symphony or music with multiple instrumental parts these days? Very few people, if any.

Would I enjoy hearing any of Beethoven's Symphonies with several instrumental parts modified or played "live" by something like Sonic-Pi? Sure. Especially a new or inexperienced Sonic-Pi coder? Absolutely. Bringing beautiful music to lots of people was one of Beethoven's most cherished lifelong goals.

Last I checked, Sonic-Pi was one of about 24 different audio programming languages. I am not currently using any of the other 23 audio programming languages, ref. https://en.wikipedia.org/wiki/List_of_audio_programming_languages

eritain commented 4 years ago

SymbReprUnlim, you've said the layout of interface components is bad. How would you change it, if you had the chance? Without reference to display resolution, please, since that's a solved problem.

Further, without several weeks or months of research, they will never learn how to play Musical instruments through sonic-pi.

The learning curve starts real low: play 80 is all it takes. As Sam Aaron says in a video about how he uses Sonic Pi in real classrooms with real kids, play means to have fun, and 80 is how much fun you should have. Kids laugh at that, type it in anyway, run it, Pi beeps, they go bananas, and then they get curious:

"OK, smart guy, what does the 80 really mean?" Well, change it and see. "Oooh! ... What if I want to play more than one note?" You can write a list of play commands (Oooh!), or you can write one and use it repeatedly. "How?" It's called a loop, here's an example. "Oooh! ... But what if I want higher and lower notes, not all the same?" You can use a variable, here's an example. "Oooh! ... Longer and shorter? Louder and softer?" Those are parameters you can change with a variable too. "Oooh!"

Kids start out hard-coding their melodies, which is exciting at first, because making a computer play original music at all is new to them. And then does it get tedious? Eventually, yeah. And that inclines them away from the compose-input-playback pipeline, toward generative music and interactive composition instead. Which is where, if I've understood you correctly, what you want out of Sonic Pi departs from what its authors want.

(I mean, I don't know a way of transcribing the notes of an already existing or already conceived composition into a computer that isn't tedious. Lilypond input is tedious, ABC input is tedious, even people who can fluently use a piano-style keyboard controller have to go through the transcript of that afterward and clean up the timing and dynamics and stuff. But yes, Sonic Pi is probably the most tedious of these, if compose-input-playback is the workflow you're using it for. A rocket is tedious to sculpt wood with.)

The live play assumes everybody else in a music group is going to follow the hard-coded lead of the Sonic-Pi. That's not how music groups work nor how musical accompaniment works.

There have been experiments in collaborative, real-time computer music, and experiments in real-time conducting such that groups of computer instruments can coordinate variations of tempo, dynamics, rhythmic microstructure, etc. with one another and with other players. I think this is super interesting. Thus far, Sonic Pi is not ready for that. It is controllable such that someone could write code to glue it into such a system, but it hasn't happened yet.

In the meantime, it is a solo instrument. But note that it's an instrument on which a soloist can play patterns of notes a solo performer of a manual instrument never could do before, and near instantly too.

Because I cannot actually "play" a Sonic-Pi as if it were a musical instrument along with music that is also independently playing, in an accompany-type role - I cannot at present seriously devote myself to using Sonic-Pi.

That's one of the agree-to-disagree things. It's a bad tool for what you want to do.

It sounds like you would be happier with a keyboard controller, sequencer, and modular or semimodular synth. If you want software synths, a MIDI keyboard and an HDMI display attached to an Organelle M might be just the ticket.

It "may" be great for kids, but I do not see a lot of animation, pop-ups, colors, use of graphics, [...] games, music tricks

Having been exposed since 1987 to plenty of childrens' software both good and bad, I felt a little ill when I read that. The richness of the programming experience more than makes up for any superficial blandness of the interface. And children aren't as universally fond of gaudy crap as adults seem to think.

an equalizer, sound oscilloscope,

That's more like it. I see you are a fan of timbre. Me too.

EQ is directly relevant to Sonic Pi as it already exists. Spectrum analysis might be a useful addition to EQ. An oscilloscope as such is maybe not too useful until synths can be redefined interactively within Sonic Pi.

Supercollider itself can do a whole lot with timbre, but the language that controls it is realllly abstruse. Exposing that in Sonic Pi's variant of Ruby is going to take some very careful design by someone interested in doing it.

SymbReprUnlim commented 4 years ago

Hi Eritain. In addition to being a programmer, I'm also an amateur musician (piano/kbds & acoustic guitar) and singer in church choir. With Covid-19 dampening choir singing immensely if not entirely, I've been singing much less recently.

Since you asked - how would I change the format of Sonic-Pi? As a programmer in both Windows and Linux, I like to keep formats malleable, i.e. changeable/modifiable, let each user decide how he/she wants at the time to find Sonic-Pi formatted. Windows is famous, some would say infamous, at allowing different windows to be placed differently, in different locations on the screen and or programming window. If I wanted Help in Sonic Pi, I would want Help top-left or center-stage. I might want the rest of Sonic-Pi to even disappear(except for a Tab or Button), while Help was being searched and or heavily used.

Play 80 - sounds rather algebraic, not musical. My inner musician rebels at playing numbers and not the actual musical key, although you would point out that Play Xnote(scale n) could also have been typed in by the user into Sonic-Pi. Oh great, another in-head translation needs to occur (80 to Note/scale/musical notation location on sheet music).

If I were programming Sonic-Pi or was a user with direct input to it's creator(s). I'd ask for a simple pop-up or mouse-over (note numbers/notations). When the user moves his/her mouse over top of the 80, the musical note magically would appear so a musician or student musician could easily verify that was the note he/she intended. Mouseovers (mini pop-ups) are common with Javascript and in Microsoft Programming languages. They can also be implemented with Linux Python and Tkinter, for example. I am not a fan of Microsoft at all, but they have been allowing people to generate software for 4-5 times the length of time Sonic-Pi has been allowing users to program sounds/beeps.

I'm familiar with Midi keyboards. Ludwig Beethoven would likely laugh at them derisively, their limited number of keys/octaves and monotonous machine-same sounds he would utterly shun. I'm also not Beethoven, his music is divine and timeless. If I could get even a Midi keyboard or Yamaha electric keyboard controlled by Sonic-Pi (and vice-versa), I would consider it musically helpful.

So Eritain, we have not chatted before. You don't know me, I don't know you. My chief complaint about Sonic-Pi is it's lack of ability to act as a musical instrument in real-time flexibility with other musicians, as an accompaniment instrument or as a tool to control a musical instrument in fluid real-time. It also doesn't have a Listening-playback jam-like AI feature. In short, it's all about loops and programming mostly mechanistic beeps. Thus like R2D2 and CP30 Sonic-Pi beeps, buzzes and clicks, but unlike those fictional animations, Sonic-Pi does not have any AI built into it.

Since I write software, I'm pretty good at criticizing it, my apology if my criticism is directed at software you like immensely or love. If I find a reason to use software, I'll use it. As an amateur musician, music lover and software programmer, I just don't find a solid reason to use Sonic-Pi (other than yes, it run's on a Raspberry Pi as long as R-Pi users always get pointed to a special dowbnload version just for them since Debian does not stay current/up to standard with Sonic-Pi versions. I'm also not in Sonic Pi's Beta testing inner circle, nor do I have access to it's source code.

So I'll have to just wait for the next News blurb about Sonic-Pi and some new feature it might or might not. Again, in the meantime, I just will likely have my time filled by other software projects, like Speech Recognition (speech-to-text and text-to-speech or STT/TTS).

Have a nice day, sorry it's taken me two weeks to respond to you, but Covid-19 is making life more difficult for everyone.

BTW, Pandora's radio play-station playlist has some AI built-into it. You can say "Alexa, play me music by Beethoven on XName's Pandora." And it will come up with a somewhat randomized Beethoven + lots of other (sometimes similar) music. At least it avoids being repetitious, for the most part.

Again, have a nice week, happy music-making to you! SymbReprUnlim'd