 Okay, so we have like one hour of the presentation, then the second hour from six till seven, I guess there's some other team wanting to present. I mean, that's what the schedule says, I don't know. Oh, great, so yeah, I didn't know who was. So from six till seven, is your slot, is that okay? Yeah, sure, I need like 45 minutes. Yeah, likewise, okay. So hi everybody, I'm Mateo Gekwets from Slovenia. The piano guy is Meinig. This is Reinhard Katzman and Georg Rudolf. We are the founding members of Canorus. Now, I guess most of you don't, didn't hear for Canorus yet, or maybe you did. So the whole story started back in 2004, 2003, 2004. When Jörg Anders, the original author of NoteEdit, stopped or yeah, stopped contributing to the NoteEdit. And back there, NoteEdit was, hmm, I think the most sophisticated notation editor for Linux at that time. So this was when Moose score was in alpha, pre-alpha stage and wasn't anywhere near today. And we were maintaining the NoteEdit project. And in one point of time when Qt4 was released, and then KDE4 was announced, we decided to, so we wanted to migrate NoteEdit from KDE3 to KDE4 and Qt4, but it seemed too overwhelming. So basically, we dropped NoteEdit over two or three released versions and decided to write our own music notation application. The main goals were, okay, besides using the modern, for that time, modern tools like Qt4 and making the application cross-platform. NoteEdit wasn't cross-platform, recall that it's KDE3, it was KDE3 application. So we decided to write our own application, we named it Canorus, and in 2006 we had the first release. So that's it. Then in 2009, development mostly stopped because of the real life jumping in, the family and kids and so on and so forth. And now we got older and the kids grew up and it's time to go back to development. So Canorus is a cross-platform application. We provide packages for Debian Windows, and we provided packages for Mac OS X, but the guy who built the packages doesn't provide it anymore. So if there are any Mac users here, you're welcome to build your DMG packages or whatever and contribute to the latest version, latest subversion trunk to us. We didn't migrate to Git yet because we didn't yet, we will. Okay, so this is Canorus. The first thing you notice is, so you start with, I have, oh, sorry, Slovenian, sorry, sorry, sorry. Yeah, English. So the first thing you notice is you have two staves here, which are infinitely long. Okay, and in each stave, in each stave you have two voices. One, two, one, two. So this LCD button for those of you who know, NoteEdit is actually the same principle. So the main console, in 2006, from 2004 to 2006, I was attending the secondary, we call it the secondary music school, high music school in Slovenia. I was doing this music theory course, and usually, so it's kind of a composition style music school, and what I did was I made some arrangements, I made some compositions, and basically, I all did it by hand. And the main goal of Canorus at that time was, how could we design a notation, music notation application, who provides the most natural user interface for a composer to write his own score. Because at that time, the user interface of Finale just sucked. Sebelius was still in early 2000, not there yet, and usually, when you pick up the paper, and when you write some scores, you just sketch the score, you just write notes, and you place a bar line wherever you like, you can put, I don't know, 10 quarter notes in a four-beat bar, and you don't care, it's just a sketch. And similarly, we wanted to implement this kind of, so this is our main paradigm, and the main difference between other notation software as Musa score today, or Finale or Sebelius, where first you need to set, I will make a score which has 100 bars done, and you have it. So this is the concept which is weird for a composer. So if you want to insert some notes, you click on the Insert Notes Rests button here, and you insert some notes. Q-Synth, what's wrong? Okay, so if we play it. So the main, so okay, now, let's remove the second whilst we don't need it. The main feature, I mean, it's not a bug, it's a feature actually, but the main thing we support is you can just add another quarter note into the first bar, for example. We just make this here, okay? So the auto bar placement detected in the previous bar, we have four quarter notes, and now we need to introduce a new bar, but hey, you can just remove the bar here, the bar line. And now, okay, it's a pickup measure, and you can remove the note here, and it works, and you can make another note here, for example. And here you might notice that there's this spell checker thing we integrated, which marks that this bar line here is broken, this bar here obviously contains too much notes. So you can do that, it's allowed. And that's the main difference between our music score and others. And this is exactly how composers usually do. They don't care about bars, measures, and so on, they first need to design a melody or a theme, and then they make a polyphony, and then they take the same theme and paste it somewhere else. So copy and paste feature, we also support. You can just take this, do edit copy, and click here and do edit paste. It doesn't care about the bars, it doesn't care about the bar lines. So you can switch the clef in the middle, and this happens. And yet again, you can just copy this, and you paste it here or below here, for example. It just works, okay? So the whole concept of having a score full of bars, and each bar contains some notes in a first voice or a second voice or whatever, is here removed. Bar line is just another music element. You can draw it wherever you want. Okay, now, from the features point of view, well, we support, yeah, I think we're half a way to all the notated features, though. But basically, so we have slurs, we have different types of clefs. We have, what's this? Oh, that's a key signature. So it's a C minor here, or G major here. Different types of time signatures. Again, you can write whichever time signature you want here, and see the whole score, it works. Okay, there are some spell checker errors, obviously, but this is loud, okay? What else? So different types of bar lines. Okay, tempo marks, dynamics, fermata, pedal marking, so all the expected features from a music notation software, also for specific note marks, so we have the symbols. Okay, let's make some accents here. Now, we have two states for now. We can simply add another stuff, and it's here, and then we make a clef, we make a time signature, we can copy it. So it's very natural, kind of a, we aim to be a natural user interface, right? What else? So besides stuffs, states, we also support lyrics. So we can just write Alt, Mac, Don, Alt's, add, okay, okay? And what else? So we have this feature wasn't, so this is the figured bus marks. I don't know if you used it any time, so basically, from the music theory point of view, you say write a chord of six here. Okay, should work, it doesn't work, it's broken, so I didn't use this in five years, I think. So this figured, but I have the example here, I think. So it's a shipped example, canotus trunk, and it's, oh, examples, sorry, examples, this one, yeah. So these are the marks, the figured bus marks, and you can just change it to whatever. So here you can add, I think, another one here, yeah. So this means you should put a chord on top of this bass note, which has a fourth and a third. So for those of you who play organ should be familiar with that. Now, this yellow track here, so this is a Stave, this is the lyrics track. This is the figured bus track, and this is the function marking track. Now the function marks denote which degree, this is again used in music theory, sorry, yeah, Mike. Chords, do you support jazz notation as well? Like the jazz chords notation? Oh, jazz, no, no, no, it's actually, these marks are taken from Baroque style. Yeah, Baroque music, yeah. But you don't support jazz notation like you would find in a real book or something? Not yet, but you can add just a text in top of the note. So you can always do that. So this works, and it's also exported to Lilipon, I think. So yeah, this works, but the guitar chords and this human readable chord notation is not there yet. I mean, it wasn't important. So this yellow and this blue tracks here, I implemented that back in 2006 when I was attending these music theory courses. And this is the way we marked the chords. So, okay, for example, this is the F major. This is just one homework, one task from that time. And usually the music harmonic exercises are given, you have a best line given, and then you have this six here, which means that this should be a sixth chord on top of this G note here. And what you need to do is write other three voices, the top three voices, following, obeying some rules. You cannot have parallel fifths or parallel octaves on many other rules. So this is the basic music harmony, Bach and other classical composers originated from. And this yellow track here denotes which, well, how's it called? Which degree of the F major the chord is? So this is the tonic degree. This is the seventh degree tonic, dominant tonic. And so on, second degree here, and so on. Yeah. So those of you familiar with this classical notation, so this can be changed, for example, this all works. Now what else? Well, we have under redo, naturally. So this works. And for printing, we didn't complicate. So you may notice the whole user interface is like a technical sketch of your score. It's not aimed, again, in contrast to Musa's score and Finale and Sibelius, it's not aimed to be a nicely typeset score. It's just a technical kind of a sketch of your score. And that's exactly what composers, in our opinion, should use and should see. It's more close to a composer than to a final end user. So eventually, when you click the print preview, the whole file is exported to Lillipond format and Lillipond does the dirty work for you. So this is the, okay, that's the PDF type setting of very high quality. So for other details, what else do we support? So there's a nice feature usually when you, so I don't have any midi, do we have a midi keyboard here? So basically we have this midi recorder, which just grabs all your midi events, you set in the config file in the options. And it is, yeah, I think I have it, but yeah, not installed. Okay, so here, usually if you're a composer, you first do some improvisation and this is where you store your midi file, oops. Yeah, it's still the beta face software. But we have the recovery implemented, so we didn't lose much. So the recorded midi file is then saved along the score, right? So originally you can save into Canodos document, it's just an XML file, our own format. And this Canodos archive is actually the XML format plus all the recorded stuff of your score. So it's just a zipped archive. What else? We have, so we have multiple views. So for example, you can, if you just want to write the same theme as in the beginning for example, one third lower, you can just do that by watching at the beginning of the score and whatever. And one of the features which is currently, I mean it's not broken, but just the user interface to our Python is broken. So one of the ideas we had is to make Canodos as open as possible so people can write their own plugins for it and one of the plugins. So you write plugins in Python and the way how we do it is you can write the plugin for Canodos and you call the plugin from Canodos user interface or you write your own application which just uses Canodos for the backend. For example, we have a very good midi importer code designed by Georg back there. And if you just want to import some midi files and then analyze them in Python or do whatever you want with them, you can import our Canodos Python backend. It's here, it's here. So okay, I Python. So basically what you do is you do import Canodos Python, sorry, wrong version of Python, I Python free. Import Canodos Python. Okay, and you can use any internals we use. So you can just write doc equals new document and then, okay, so what exactly does document offers? Yeah, you can add sheet. Okay, so what do we need? Yeah, I mean, you get the idea. So you can call whichever internal function here and then you can export it or do whatever. And I'm not sure if I have a working example here, but one of the ideas was, so we have these plugins here and if I link the harmonia, give me a second, plug in here. So I hope it works, might work, might not work. Sorry for that, this is another arrangement I did. So it's a Bob Dylan blown in the wind for four guitars ensemble and the lily pond output, this looks kind of nice. So what I wanted to show is this export sheet to harmonia. Yeah, okay. Again, another bunch of code, maybe this works. So basically for my bachelor thesis, I developed a harmonia plug-in for Canodos and what this plug-in does is it finds the most important melodies of your score. So basically, if a score has multiple voices, I serialize all the score and then I found the patterns inside the score which are long enough, which are repeated enough times, so frequent enough and interesting enough. Interesting means that they are rhythmically and melodically interesting. So basically I measure the entropy of the rhythm and melody inside a theme. And here, I'm not sure whether this Oh great. So again, this after wasn't run for quite some time, but basically you import some... Ah crap, no, you don't import anything. So basically I can actually show you the thesis. I have a nice screenshots there, so you get the idea how what this Yeah, okay. So you get something like this. You import a score, midi score or something, and then this is the minuetia. And then it, so in the back end, it uses Canodos to import the midi and make all the events and the pitches and then I search for the patterns and basically I create the suffix tree. So the first phase is to clean up this crossings of voices because it's just midi, you don't know which voices, which, and eventually I make a tree. So here, for example, is repeated same pattern, right? We have four eighth notes, one quarter note, and the relations between consecutive notes are the same. So we have a second, second, second, second, four seconds in row. Yeah, and this is the user interface of this harmony application. So here we have the length of the pattern, number of occurrences, and then the calculated weight, which consists of the length of the number of the frequency and the entropy of the melody and the rhythm. So yeah, this is the practical application of what you can do with this Python bindings. And we use SWIG to generate bindings from C++ to Python, that's it. So this is a Bach, I think, it's Fug number 20, yeah? And the red is the most common theme found by harmonia. So this is this one, da, da, da, da, da, da, da, da, da. Even further, yeah? And you see this is the same theme, and this here is the same theme in another voice, and here is the third repetition of the theme in the bottom voice, and yeah, so on. It's in Slovenian, sorry. And here is the harmonia interpreted melody. So you see, actually it's the same, but it didn't recognize the eight notes because it was imported from midi file, and yeah, you can't. So that's it, how much time do we have? Okay. Yeah, not US, oops, sorry. Okay, so there are some, okay, I guess we should write a score now. So I'm sure you will notice quite some bugs currently in the process of making music right now. And that's also, so this workshop today is meant, I mean, Canorus is far from being a final product obviously, but what we want is to get some feedback of our main concepts we strive to achieve, okay? This composer's best friend, pencil and paper-like natural user interface, which we want to kind of achieve until, that's where it's different than other score editors. So all of us have a count, okay, let's do it. So the numbers one, two, four, five, six is the note length that's similar to other note editors. And one of the things you'll notice is we have this shadow gray notes, which are shown in both states. Now this might be inconvenient for the first timers, but we'll see later on that when you write, for example, the second, when we will fill the second stuff, it's very important not to cross voices or repeat the same thing the other voice is already singing or playing. And this is where the second note in the second stuff helps you out so you don't cross something. Okay, okay, or this is actually a half note and a dot. Okay, and then we use copy paste. Oh, we removed the second voice here, or maybe not. Okay, let's leave it for now. Is this right? Okay, that's it, end bar. So, play. Instrument. So what's this banjo, does this exist? Okay, by the way, safe often, safe frequently. So it's gonna list trunk examples, meaning lack. Let's put if anything goes wrong as XML document. Okay, now the other, the other scores. Let's begin with the second voice. So one of the issues we have here is if I write the second voice now, if I put it here, for example, so this green, green rests here are the rest of the second voice. The first voice is in the background, grayed out, okay? Now, if I click after the rest and before the second rest, Canolos recognize this as I want to insert a note between the two rests. So what it does is it keeps the first rest alone, it keeps the second rest where it is, and it inserts a new note in between. But now, you mess up the first voice. Because in the first voice, now we have four quarters and here now we have five quarters overall. So it will insert another quarter rest into the first voice. So that's one of the problems you get into where you want to allow this freedom for user. So that's exactly what happens. So it inserts a quarter note after the first rest, before the second rest, and now if we check the first voice, now the first voice has a quarter rest here. Now the question is whether, what's the expected kind of a scenario that we should allow? Other note editors simply don't allow it if you want to insert a quarter note between the rests. It, so the original finale had this error message pop up showing up. So yeah, I mean how to solve that now? Well, we can just select this and hit shift delete. So ordinary delete turns the note into rest. If you hit shift delete, hit, yeah, and this one should be invisible. And do, and do, and do. Okay, so in this case, you need to be very careful. Okay, so if you want to replace the rest, you need to insert it where the rest is. So we should go with that here, for example. And by the way, this is F major, right? G major. So it's this, okay. Okay, sounds nice. Second voice. By the way, the second voice should also be banjo. I think you grasp the concept. Now the bass clef, what should we do? Well, it's a nice folk instrument. So now you see the note, the gray note in the first state. That's where we want to see whether we duplicate the same note in another voice. That's something you should always avoid when doing the arrangement, of course. So that's why we have it enabled by default. So we should be like this. Sorry for that. This would be like this one. And lyrics track, of course. We already had this, so Altemak, Donald, Da, had a cow, A, E, I, O, U. And this copy paste, oh, here's nothing. Copy paste for lyrics with loss, so crap work. By the way, there's a nice feature I didn't talk about is this view, where's the view, view, view, view, view. Yeah, so here we have a score view and we also have this source view. By the way, this gray on top is the ruler. I guess you noticed the number of current bar. So the source view gives you the lilypond output. Or if you select the voice, you get a lilypond source of that voice. Now we also spend some time and implemented the lilypond parser. So basically, I don't want to use the lilypond parser in current state, but if we make a new document, I can show how we parse lilypond. So basically, if you're more keen to lilypond, you can just use that syntax. So it's G4, can't, this one's up. So that's for all the lilyponders. And the auto bar is not there. So it is there when you use the mouse, but not that. Oh, yes, yes. You also see the lilypond syntax below, automatically being generated. What's going on now? Yeah. So you can notice this idea of having this friendly user interface and freedom for composer brings lots of challenges. And we try to think about them, we try to trickle them down, but the basic concept how we do it is you can put in any voice, whatever you like, and then we call something like synchronized voices and it makes sure that shared elements like bar lines and so on are aligned. Because so each voice can have whichever music elements, quarter notes, half notes, rests, but when it comes to the bar line, the bar line should be the same bar line in both voices. Now, what happens when you have a, yes, poly metric music? So if you have the friends. Yes. This, oh, sorry. Yes, you can. Something like this. Yeah, it works. I'm not sure if lilypond supports it out of the box or some special syntax. No, for lilypond you need to set it manually, yeah. So printing this. So again, the main model we use is you have staff and inside the staff you have multiple voices and each voice contains the music elements. Music elements can be playable, which means the duration is not zero and it can be non-playable, which means the duration is zero. Non-playable elements are bar lines, time signatures, key signatures, and so on. Playable elements are rests, quarters, and so on. And once you're done with editing the voice, you call the synchronized voice method, which makes sure that all the non-playable elements, which are obviously shared among two voices, are correctly aligned. And if they are not, well, it inserts some rests so that it can be aligned correctly. So if you have a whole note and a whole note and below you have a half note dotted and another half note dotted and they call the synchronized voices, then you have the bar line after the first whole note, but then this conflicts with the half note in the middle of the second voice. So in this case, it actually appends, so it doesn't break up the half notes, it appends a rest to the first voice so it can add a bar line and fixes it. So that's the main concept behind it, but I don't know if it's the right one. I mean, it seems natural for the composer, but it's so difficult in so many cases you need to cover. It complicates things hugely, but still I think that's the right kind of direction to think. So going through the options dialogue, we have these new shortcuts we implemented during this and last year's lack. The idea here is to also have a MIDI shortcut. For example, you can reserve some MIDI key on your MIDI controller to insert bar line, for example, or to hold down some note and then click insert and you don't need to hit the key on a keyboard, physical keyboard of your notebook. You can just use another MIDI key for the MIDI shortcuts command. So kind of emerging the two together and make a hybrid shortcuts possible. That's what Reinhardt is currently doing the most. Yeah, loading, saving and MIDI and printing where you can set the type setter and so on. So this is mostly for the Windows operating system where you need to set the path to the lily pond installation manually. And then we have properties of the score. So you see the user interface is like this. On the left-hand side, we have the insertion dialogue. On the top, we have the properties of the current elements. So we have the time signature. For example, you have this here. For the clef, you have the offset, for example. Here, you can force the accidentals. You can set the stem direction and so on. You also have the properties dialogue where we have some other stuff like document title, arrangement composer, some predefined copyright ideas. Number of lines. We also support that. Some MIDI pitch offsets. So the MIDI is played differently. This is where I encountered that if you play for Clarinet, right? It has different pitch than the one you... It's written there. So, yeah, sure, go on. Okay. In a short time, you showed a lot of cool things. And a lot of crashes. Unfortunately. I think you can live with crashes. The idea is only 0.7. But in your opinion, what are some of the... You've touched on a few of the shortcomings. What are some of the major shortcomings at the moment that you see? And I don't see crashes as a major shortcoming. Sometimes it'll be fixed, you know. No, I mean, personally, I used Canodos for quite some projects. But these are mostly a few pages long arrangements for voice and piano, for example, or for guitars or something like that, a combination of lyrics and music. For this purpose, it's great. So the basic workflow is like you design your score in Canodos and then you export it to Lillipont and then tune some other printing stuff there in Lillipont and you print it and take it. So for this scenario, Canodos is actually suffice us and I think it doesn't have any shortcomings, in my opinion. But if I compare it to Muzza or... Let alone of the finale or Cibilius, I just don't want to go there, okay? So I'm sure there's contemporary music. We don't have absolutely no idea how to do it. We don't support chords yet. We don't support... So triplets kind of work, but again, I mean, if you combine triplets with this freedom, composers' freedom, it's just bad. You get these rounding errors and then you have the second device which has ordinary notes and now what? So triplets are here. You can use it, and you can also set triplets of... So you want to have eight notes instead of five and you can, let's put this one. And this works, it should even be printed. Yeah. So I think the stability issues is in fact a major shortcoming. We need lots of testers. So we urge everybody here to download. So the only dependency we actually have is the Q5 dependency. Everything else is mostly shipped with your distribution. If you don't want to use any scripting, this is totally fine. We don't need Python if the CMake finds it, then fine. We use Python. We don't need Python. Yeah. But for Reinhardt, yeah. Stop for scripting. If you don't want scripting, you don't need to speak. Do you need a special version of GCC or a Seedline or something? So after the Noterite problem with... So Noterite depended heavily on KDE3, not only Qt3, but KDE3. And for the Conoros, we said, no, we don't want any dependencies, just Qt. And then slowly plug-ins ideas came around and let's use Python and so on. But still, you can still use Conoros with Alzadeo, you need for the midi to work, and Qt5 or Qt4 even. But we dropped Qt4 this weekend because Qt5 is now everywhere. So basically, yeah, we urge people to try it out and to try it out in your scenario for your music and report any success stories or problems. I'm sure you will encounter many problems, many frustrations, so please share this with us so we can make a better... This whole thing is experimental. I mean, maybe nothing will come out of it, maybe we'll move something to better. Conoros is on SourceForge still, yes. You should use the current trunk. The current trunk is okay. You didn't release any version as stable right now? So we released... The last version is from the last year's lack. It's this one, 0.7.2, release candidate one, and we will release 0.7.3 tomorrow or in the upcoming days. But basically, no major things are broken, so just check out the latest trunk and it should work out of the box. But no resists actually, no, because we don't have time to release stuff officially. Sorry. Okay, any questions? Okay, worked. Can I use Conoros as an external editor for... So I'm writing a track on myself and I don't want to write a score editor as well. It would be nice that if the notes that I can enter in the piano roll, I could also enter in a score editor just by starting it as an external editor and so basically passing a set of notes to it and then getting it back. Yeah, this might be... I also thought... I had the same issue there, but then I decided to solve this differently, but... Yeah. Yes, I think so. We have to... Conoros... Actually, we have... We have the microphone. You can actually create a library from... Exactly. Yeah. And you can use this as a base and import it in your program and then you just need to call the right... As we do in our main window, you need to set up basically what we did in our main window in your own program. Well, that's not really an external editor. For instance, my program would have to support Kutchi then, which it doesn't do. So, are we talking about launching an external program, which would be Conoros here? No, it's not an external program. It's just calls to the library, actually. Yeah, I couldn't do that. I can start an external program from mine, but I cannot link a QT application into my program. Oh, it's not GPL. No, it's not QT. Okay. So, external application... So, we need the mechanism to send the data to Conoros and then receive it back. That was part of the question. It could be a file, for instance. I guess so. But for example, you don't want to parse Conoros' document. Basically, I would be asking you, what would be the best way in order to use Conoros as an external editor? How would I parse data into it and get it back if I don't want to implement score editing for my nodes myself? I think it should be the other way around. I think you should... So, when you launch the external application, you write a plugin for Conoros, which reads data from your application. So, you have your document at your application, then you launch this external Conoros, and on startup, it reads data from your application, fills the score, you do the score stuff, and then when you click the Save button, it actually sends data using this plugin. So, this plugin would be a glue between your application and Conoros. So, this is, I think... It's an external application still, so you don't link anything with it. The only thing you need to do is this plugin. And this plugin could easily be done in Python, so the only question is how to send data back when you click Save button. You should expose your functions somehow to Python in this case. That's how I would do it. Any other ideas for the audience? Yeah, so this is an inter-exchange format somehow. I mean, we support music XML, import-export. We support MIDI import-export. So, we don't support notated import yet. But we should do that because we have lots of... I mean, personally, I have some scores in notated written, and there's no way to, you know, open that scores anymore, because notated requires KDE3. You don't have KDE3 now anymore, so we don't have notated it. So, these scores are just lying there, and no one can read it. I mean, it's an ASCII format, though, but nevertheless. Okay, thank you.