-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a listen element for score following and machine listening apps #294
Comments
Could you provide an example of proposed markup for this element? What would happen if the event being listened for was wrong, i.e. the audio or timing information didn't match the expected event. For example, a user of assessment software plays the note too early? I assume the primary use case is for monophonic input, but would it also be possible to use this element in the following cases:
I think this is a really good idea and could open up a lot of new applications of MusicXML, or making existing applications easier to work with. |
Thanks, @jsawruk. Here is an example of some possible markup. You generally would not have all these items in a single For at least the assessment part, I think we will need an additional MusicXML element to identify the players, musicians, or sub-parts within a part. This does not necessarily correspond to the MusicXML
I think we would want some defaults for these elements so the usual case (e.g., assessment on) does not need to be written out explicitly each time. This is all preliminary, but I hope it gives a better idea of how this might work. |
Although @mdgood is clarifying that one would not need all these items in a single element, I think this is a lot of data, which is useless for the majority of apps which are not focussing on score-following. |
Thank you for the added feedback @bhamblok! One clarification is that the Score following applications are already using MusicXML and are probably not interested in a separate performance-only format. The choices would seem to be either the status quo, where each application requires its own app-specific data, or something standardized. With a standardized approach, a music notation editing application can write one set of data that many different listening apps can use. MNX's separation of concerns is trying to make a clearer distinction between different types of data than MusicXML does, in order to make application development easier. It is not trying to remove MusicXML functionality from MNX-Common. The proposal here follows the way that MusicXML handles this type of separation, using dedicated elements as well as attributes. |
Score Following applications would obviously need the score. There are cases where the musical context provided by MusicXML is not sufficient enough to address reactions. One scenario is the "end of a phrase" or "beginning of a section/rehearsal mark" where the system should not react continuously. This is similar to "playback" elements in purpose. It makes much more sense to include them in MusicXML than keeping them separate. At Antescofo, we have been using Miscellaneous elements embedded in MusicXML to address such use-cases. The case of Assessment is ofcourse very different! I guess one way to address this is to list current use-cases by each actor. We will try to contribute to this Issue swiftly. |
Hello Team! Just a quick follow up on this proposal:
In general: a new There at Antescofo, we are ready to support actions towards the proposal and contribute to use-cases that go beyond our own Metronaut App. |
Hello all, I would like to repeat myself... I'm that kind of developer who is always thinking about (CPU and network) performance. As I mentioned here above, I still think a lot of this information should be standardised, but not necessary inside the format(s) of musicXML (and MNX). In the previous comment, I believe there is an example of (which I think) the "wait" element is totally redundant. Why not collecting this information from the context of the siblings out of the musicXML/MNX-file?
I really think that if we bloat the musicXML (and/or MNX) file formats, with musical-performance-data, it will have a negative impact on the (CPU/network)-performance of lots of applications which might not need this musical-performance data. |
In a follow up to my previous post, I propose to add a |
@bhamblok We are all caring developers! ;) That's actually what we do when the context is clear (such as Fermata or section/rehearsal). But we can imagine a bunch of scenari where the author/editor wants that kind of interaction cues and is willing to annotate that beyond a mere Text Box. For some Editors, this can also become an option next to existing elements (similar to Playback elements). I am perplexed by your CPU concerns! I believe many of us who use MusicXML can find a lot of redundant information based on our use-cases. We just ignore them! This is off-topic here but I believe if anyone has CPU issues with XML to the extent that a new element would tear it off, then one should reconsider the software architecture. MusicXML Standard is not there to solve/address this. Separation of Concern is however an issue here and I hope MNX will address that properly. |
@arshiacont I can only agree with you that authors/editors would want to make this kind of interaction cues manually. But if you want to encode values having a "yes" or "no" (boolean) value, than an xml-element is totally verbose and definitely not the right choice. Can we agree on creating attributes to store this kind of information? PS: I'm always thinking of CPU performance during development (eg. when I have to write nested loops, which I try not to...). But in this case I'm more concerned about network performance... and yes, parsing data (especially verbose data) also consumes CPU-power where from the UX point of view: "every millisecond counts" :-) |
@bhamblok I don't think there is going to be a lot of musical performance data. This is data that tends to be needed to help with less common situations, including places where human performers could often use some extra rehearsal time. Plenty of applications discard the detailed presentation data that MusicXML files can contain, and that tends to be far larger than the added data that a listening application might need. MusicXML was designed for both selective encoding (you only need to encode the data that your app cares about and has accessible) and selective reading (you can ignore the things you don't care about). This has served well in its primary use cases for storage and exchange between applications. Performance concerns are much more important for MNX's use cases. That is one reason why MNX-Common is more compact than MusicXML. MusicXML was never intended to be a terse format. Having a complete representation of music notation data has been more important. I think it will be best if we let MusicXML and MNX-Common each have its own internally consistent design. |
@bhamblok the The Re: Network Performance... well, I bet most people do not use a fair % of data that is embedded in MusicXML. These performance related elements won't take that much space but if I had to worry about them, I would suggest two solutions: (1) Don't use them! ;) or (2) Parse them out on the server end before sending to users. I have never come to issues like this on Music Sheet data but I can imagine that it can occur. |
Here are my current design ideas for this issue. The There will be four child elements to the The
Here the type would be an enumeration with the values none, tempo, event, mostly-tempo, mostly-event, and always-event. The idea is that these correspond to various Antescofo attributes:
The latency attribute would be in milliseconds, as in Antescofo. This type attribute incorporates the element value from Arshia's earlier proposal. We could go back to that strategy if people think that would work better. To me this approach seems a little easier by avoiding having to match start-stop pairs. I think that the For the Please let me know your thoughts and suggestions. I can create a pull request once we have an agreed-upon design. |
Pull request #376 addresses this issue. Some of the differences from the previous discussion are:
@arshiacont, do you think this pull request captures the ideas you discussed above? Ore are there things that you believe need to be added or changed? @jsawruk, is this matching what you expected? @bhamblok, does this appear to be setup efficiently? There aren't any boolean element values in the pull request. Everyone's feedback is welcome! Please share your thoughts. This is a new feature direction for MusicXML so we want to have a solid foundation for future extensions in this area. I am expecting to need to make changes before merging. |
Initial implementation has gone well, so I will be merging the pull request and closing the issue to keep things moving. We can always open a new issue later if we need to. |
Score following and other machine listening applications could use a new
<listen>
element for information specific to listening to a performance of a MusicXML score. This could parallel the existing<sound>
or<play>
elements for information specific to playback.Examples of these applications include Metronaut, SmartMusic, and Match My Sound. Assessment applications like SmartMusic and Match My Sound could use a way to specify which note these should be listening for when an instrumentalist or singer is practicing a part with a temporary divisi split. Performance applications like Metronaut can use a way to specify a note or chord that they need to wait for. This could be the first note after a fermata or another key part in the score.
In addition to specific types of events that we can specify directly in MusicXML, we can also include an
<other-listen>
child element. Similar to the<other-play>
element, this would handle other types of events beyond those already built in.SmartMusic is currently using MusicXML processing instructions to notate this information. Since it is useful across several different applications, it seems better to represent this as a standard MusicXML element that could be read by any listening application.
The text was updated successfully, but these errors were encountered: