You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
So some more information on this. Since, I am trying to load a .mid file, SoundJS tries to do it and fails because .mid files are not supported by the plugins I am loading. I continue to investigate.
I figured out the issue. SoundJS has the .mid extension as part of its set of extensions it says it handles. Line 363 in Sound.js.
Then it checks to see if it can play the type in WebAudioPlugin. With modern browsers this fails. Thus SoundJS promises to load a type but then refuses to do it if the browser cannot support it. This is understandable behavior since I think the developers of SoundJS are being forward-thinking anticipating that at some point midi will be supported in browsers.
I got around this by changing two parts of the code. First I did a separate check for the mid extension right after the browser capabilities were checked (line 363). This is a bit of a hack:
if(ext == "mid"){
s._capabilities[ext] = true;
}
I then bipass the typical loader code putting this just above the WebAudio Loader code.
This loads the midi file as a raw binary. From here I can deal with it and load it into Midi.js and get it to play.
Could it be possible to change the logic of SoundJS a bit?
Claim all sound extensions as is being done now.
If a browser check shows they are not supported by the browser, instead of failing to load, set a flag that lets the client know they must deal with it
@paustian - that sounds good. I have not done any work with binary. What is it like? How do you decode it after? Do you know your way around the sound loading enough to suggest this more general solution? Cheers.
And I am back - and apologize for the delay. I keep forgetting to check preloadjs. Okay - if you have a specific solution that we can implement, please let us know what it is or submit a pull request. Cheers.
Activity
paustian commentedon Apr 16, 2021
So some more information on this. Since, I am trying to load a .mid file, SoundJS tries to do it and fails because .mid files are not supported by the plugins I am loading. I continue to investigate.
paustian commentedon Apr 26, 2021
I figured out the issue. SoundJS has the .mid extension as part of its set of extensions it says it handles. Line 363 in Sound.js.
Then it checks to see if it can play the type in WebAudioPlugin. With modern browsers this fails. Thus SoundJS promises to load a type but then refuses to do it if the browser cannot support it. This is understandable behavior since I think the developers of SoundJS are being forward-thinking anticipating that at some point midi will be supported in browsers.
I got around this by changing two parts of the code. First I did a separate check for the mid extension right after the browser capabilities were checked (line 363). This is a bit of a hack:
I then bipass the typical loader code putting this just above the WebAudio Loader code.
This loads the midi file as a raw binary. From here I can deal with it and load it into Midi.js and get it to play.
Could it be possible to change the logic of SoundJS a bit?
Hope this helps.
danzen commentedon May 2, 2021
@paustian - that sounds good. I have not done any work with binary. What is it like? How do you decode it after? Do you know your way around the sound loading enough to suggest this more general solution? Cheers.
paustian commentedon Jan 8, 2022
I apologize for this being so much later. Once I have the file loaded, I used a combination of midi-parser.js, midiplayer.js, and soundfont-player.js to manipulate and play the files.
I used all of this in a Zikula Module for my wife's textbook. It's called MelodyMixerModule.
danzen commentedon Jul 24, 2023
And I am back - and apologize for the delay. I keep forgetting to check preloadjs. Okay - if you have a specific solution that we can implement, please let us know what it is or submit a pull request. Cheers.