Search Unity

[RELEASED] MIDI Unified 5.x

Discussion in 'Assets and Asset Store' started by Foriero, Mar 26, 2016.

  1. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    We are happy to announce that we have re-released

    MIDI Unified 2018.3.6


    Features

    Midi IN
    Midi OUT
    Karaoke Sequencer
    Keyboard Input (qwerty)
    Playmaker Actions

    Connect to external applications like Cubase, Ableton, GarageBand, Logic...

    iOS MIDI OVER NETWORK(WIFI)

    Supported platforms

    MIDI IN/OUT
    osx, win, ios, wsa,linux, android6>

    C# Synthesizer
    All platforms

    NATIVE Synthesizer
    osx, win, wsa, ios, android

    BASS24 Synthesizer
    osx, win, linux, wsa, ios, android

    Here are recent reviews

    Great plugin
    (1 of 1 found this review helpful)
    I've used this plugin a while back to just do some basic stuff like interpret midi files, there is a lot of it I have not used yet, been playing around and getting great support and regular updates, sounds great on Android, can take this plugin and easily create something customizable to suit your needs.
    There are some example scenes and some essential prefabs to get you up and running.

    5 stars if can provide some better documentation having said that it's easy enough for an intermediate to experienced coder to get what one needs from the code.

    Keep up with the plugin updates !

    Thanks guys!!
    (1 of 1 found this review helpful)
    I've not used all the features in depth, but this plugin has been extremely useful to me over the last few years - allowing me to get MIDI messages from external MIDI devices or other music software applications such as Ableton Live via the IAC driver.

    It was also easy to playback MIDI files via the sequencer.

    I had to make some small tweaks to get events for all the types of MIDI messages I wanted to receive, but overall it's been essential to my project and has made my life much easier!

    I'm really glad to see continued support!​
     
    Last edited: Mar 20, 2019
  2. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
  3. lusho_games

    lusho_games

    Joined:
    Jun 4, 2011
    Posts:
    63
    Hello, great tool, been having fun with it.

    I'm getting an Unity crash when I send midi from Ableton, any ideas what might be causing it?

    I'm running Windows 10 and Unity 5.4



    Thanks
     
  4. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Likely you have infinite loop. But can not tell :-(
     
  5. akira32chen

    akira32chen

    Joined:
    Dec 21, 2012
    Posts:
    29
    How to play a midi file and hear the midi sound?
     
  6. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Please see included example scenes for reference.
     
  7. thePostFuturistUnity

    thePostFuturistUnity

    Joined:
    Nov 16, 2012
    Posts:
    53
    Is UWP supported?
     
  8. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
  9. Stormbreaker

    Stormbreaker

    Joined:
    Aug 15, 2012
    Posts:
    161
    Sorry for asking but I need to make sure this will do what I need it to before splashing out $100.

    If I have an external MIDI device and connect a MIDI to USB cable to the MIDI out port, then plug the USB end into a USB to lightning adapter which plugs into my iPhone, this plugin would allow a Unity app on the phone to receive MIDI signals? Do these MIDI signals contain all the necessary MIDI data i.e. note number, pressure etc.? What is the latency like receiving MIDI signals on iOS?

    Thanks for your help!
     
  10. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Yes... it should work. Latency except Android the latency is very good.
     
  11. elbows

    elbows

    Joined:
    Nov 28, 2009
    Posts:
    2,502
  12. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    You will need to find out and I can implement what you need. :)
     
  13. Stormbreaker

    Stormbreaker

    Joined:
    Aug 15, 2012
    Posts:
    161
    Hi Foriero,

    I've purchased the package and have been getting stuck into it today. Was able to get my phone to receive MIDI signals as described above - hooray! The downside is the latency is noticeably higher than on my Mac, but I'll be looking for ways to cut that down in the C# code and potentially some new cables. Do you have any tips to achieve this?

    A big downside is the complete lack of documentation, particularly related to the coding side of things which is disappointing for a $100 product. I'm a bit confused by the implementation. There seems to be a distinction between editor devices and regular devices? And why is device information being saved into player/editor prefs?

    I've been trying to adapt the implementation to allow devices to be connected/disconnected at runtime but no luck. Right now, if a device isn't connected before the Unity editor opens, it won't be recognised which is a big PITA. The connection on the iOS side is a bit sketchy as well - running the program once didn't detect the MIDI device, but it found it the second time. I've been writing a class that should keep searching for a device if one isn't found, and update some on screen text but have faced everything from simply nothing happening to full on silent crashes. Here's a cut down version:

    Code (CSharp):
    1.   private void Awake ()
    2.     {
    3.         m_status = ConnectionStatus.Waiting;
    4.     }
    5.  
    6.    private void Update ()
    7.     {
    8.         UpdateStatus ();
    9.         if (m_status != ConnectionStatus.Connected)
    10.         {
    11.             // If not connected, continuously poll for a new device
    12.             MidiINPlugin.Refresh ();
    13.         }
    14.     }
    15.  
    16.     private void UpdateStatus ()
    17.     {
    18.         string name = "";
    19.         if (MidiINPlugin.deviceNames.Count > 0)
    20.         {
    21.             m_status = ConnectionStatus.Connected;
    22.             m_hasConnected = true;
    23.             name = MidiINDeviceSTANDALONE.MidiIn_GetConnectedDeviceName (0);
    24.         }
    25.         else if (m_hasConnected)
    26.         {
    27.             m_status = ConnectionStatus.Disconnected;
    28.         }
    29.         else
    30.         {
    31.             m_status = ConnectionStatus.Waiting;
    32.         }
    33.  
    34.         m_statusText.UpdateStatus (m_status, name);
    35.     }
    Any idea how I'd be able to achieve this? Basically, if no MIDI in device is detected, keep refreshing until one is found, then stop. And also detect if it is disconnected.

    Thanks for your help,
     
  14. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, regarding latency. You need to set your app to run 60 frames per second. Default is 30 fames per second.

    Regarding the autodetection. We have preliminary implemented autodetection BUT it is not standard feature on all platforms that's why it is not in final build. I can look into it for you if you really want.

    Regarding the documentation. Yes documentation is missing. But we provide example scenes that are pretty much self explanatory if you are seasoned c# developer.

    Let me know. If you need real help please contact me on skype : ledvina.m

    Thank you, Marek.
     
  15. cecarlsen

    cecarlsen

    Joined:
    Jun 30, 2006
    Posts:
    864
    Hi Foriero.

    Does MIDI Unified 5.x support MIDI clock?

    All the best
    ~ce
     
  16. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Sorry never heard of that. Can you explain a bit more. We support standard short messages midi. (3 bytes ) and on some platforms SysEx.

    I can work on MIDI Clock if there is work to be done on that part.
     
  17. unnamed7

    unnamed7

    Joined:
    Feb 18, 2016
    Posts:
    5
    Hi,

    I got some problems using the asset. Please answer them, thanks in advance.

    1.
    I get lots of hang notes, loud noises and even sometimes very loud noise bursts when playing with CSharpSynth.
    It is easy to reproduce,

    0. set "best latency" in project setting - audio
    1. load the example - Grid.unity
    2. play
    3. try sliding finger on 2nd row of keyboard (asdfghjk) to make many notes
    --> InvalidOperationException or IndexOutOfRangeException happens at
    midiSynthesizer.GetNext () of CsharpSynth.cs. DSP load can be as low as 20% or less to make this happen, so it seems not buffer under-run.

    It sometimes happen when just listening to the sequencer, not too many notes are necessary but if you do above, you will definitely see it within 10seconds or so.

    I know it happens in CSharpSynth port to unity so it is not your bug but I bought this asset hoping it helps. And found I was wrong, you didn't fix the code. I am disappointed.

    2. There seems no way to get Bass24 as audio source, am I right?

    3. What are implemented in the softsynth.dll? I want to load a sf2 file into Bass24 and edit its parameters there are no example showing this? Are they just start, stop and such limited bridges?

    4. Foriero - MIDISettigs seems to be not working properly. If I set synth type there, it will always reset to "BASS24". Why?

    Any help appreciated. Thanks.
     
  18. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hello, please contact me via skype with invoice number. Thank you, Marek. skype : ledvina.m
     
  19. akira32chen

    akira32chen

    Joined:
    Dec 21, 2012
    Posts:
    29
    I use Unity 5.5.1 and MIDI Unified 5.5.1 and Foriero Code 1.4.8
    I have a error when compiling in Xcode. The error as below:

    ld: '/Users/[UserName]/Documents/AkiraSVNUnity/RainbowDrop5AllPlatforms/Deploy/iOS/Libraries/Foriero Store/Others/MIDIUnified/Plugins/iOS/libbass.a(libbass.a-arm64-master.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    I had try to close bit code to be false, but it do not work.
    Could you help me to solve this problem?
    My iOS app now have a program bug need to be fixed.
     
  20. akira32chen

    akira32chen

    Joined:
    Dec 21, 2012
    Posts:
    29
    I had solved this problem by reinstall Unity 5.5.1 on Mac. And delete Library directory of Unity Project. In Xcode, close bitcode and rebuild project.
     
  21. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, yes libbass library is not compiled with bitcode. You need to disable it when you archiving project for App Store. Sorry for the delay answer. M.
     
  22. Ralha

    Ralha

    Joined:
    Mar 15, 2017
    Posts:
    3
    Hi Foriero!

    I bought the Midi Unified 5 package from the Unity Asset Store and have some questions about it.

    Why doesn't the package support the Native Windows I/O Midi Synthesizer? Numerous libraries use it by importing the winmm.dll but there is no sign of it in your package,
    as the "NATIVE Synthesizer not supported!" error message suggests. And you explicitly publicized the NATIVE implementation in your package description on the Unity Asset Store.

    Another thing I noticed in "MidiSetting.cs", why are lines 28, 29 and 30 there? They overwrite the options I selected in the inspector and don't appear to add anything to your library.
    Maybe they're not supposed to be there, that's why I'm informing you.

    Is the Android NATIVE Synthesizer not supposed to let you change instrument? I made two different builds, one for OSX and another for Android and they behave differently. The OSX build lets you change instrument at will while the Android build only implements the Piano. Is it an Android version problem? I tested it on Android 6.0.1 Marshmallow.

    Thank you so much for your dedication in building this content. It will certainly save me from some hard work.

    Best Regards.
     
  23. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, if native synth on windows platform is there it should be listed as MIDI Out device. ( this is standard Microsoft implementation )

    I'm not sure about the lines but trust me we try to provide you as Unified experience as possible.

    Yes, Android NATIVE Synth is very limited. May be situation will change with our brand new Android MIDI IN/OUT. I will look into Android 6 implementation.

    Let me know if you have more questions.
     
  24. Ralha

    Ralha

    Joined:
    Mar 15, 2017
    Posts:
    3
    The "NATIVE" option for Windows platforms is selectable in the MidiSettings tab . But when selected and I try to run the software, the error message appears because there is no import for Windows in SoftSynth.NATIVE.cs.
     
  25. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, Please select None if you want to use native synth for win. It should be always listed as midi out device. This is how microsoft implemented it. Thanks.
     
  26. Ralha

    Ralha

    Joined:
    Mar 15, 2017
    Posts:
    3
    Hi again Foriero.

    I've done what you said and encountered a couple of issues:

    - In MIDI.Init, the forceDefaultMidiOut option isn't doing a thing because it has the same code as the forceDefaultMidiIn option. Basically, the Default Midi In device is being loaded twice. You have to change that or the implementation with the Midi out device will never work;

    - If both masks (Synthesizer Mask and MidiOut Mask) are enabled and the user selects an option different from "NONE", both the chosen synthesizer and the midi out (only for Windows, OSX or iOS, Android doesn't have a native implementation) will output results meaning that each output is going to be listen to twice. You should check into that;

    I understand you have other projects and may be working on something else but you have to create documentation for this kind of package. The content is extensive and a little help would be appreciated. Futhermore, the package isn't that cheap and documentation is the kind of thing you would expect a package like this would have.

    Nonetheless, nice work and keep it up!
     
  27. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi. I will fix that bug. Thanks
     
  28. foobar

    foobar

    Joined:
    Jan 28, 2010
    Posts:
    90
    Hi Foriero,

    I'm running into a problem on Android. I'm using Unity 5.5.2 building to Android 4.0. The problem I'm having is that whenever I switch from one scene to another the audio no longer works. If it's the first scene loaded everything works fine, but as soon as I load another scene MIDI output no longer works and I'm not getting any errors being thrown that I can see. Seems to be specific to Android as everything works just fine in Windows. Any help would be much appreciated, otherwise thanks for the great tool.
     
  29. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi this seems like bug. I will check it out Monday. Thanks for reporting it. M
     
  30. Pascal-

    Pascal-

    Joined:
    Mar 23, 2013
    Posts:
    32
    Dear Foriero,

    First of all, thank you for developing such interesting tools!

    I was wondering if there were some resources or example scenes where I could understand how to create simple MIDI bridges using MIDI Unified 5, like,

    - How to simply move an object, on Y axe for example, using a Control Change value received from a live input, and to send that Control Change out
    - How to "on trigger enter/exit" for example, send a "Note On/Off" out.
    - How to use the object position, on Y axe for example, like between 1 meter and 127 meters, to send a Control Change message out
    - How to control a Control Change value from a slider and send that Control Change out.

    Thanks a lot for your help,
    Kind Regards.
    Pascal
     
  31. CanisLupus

    CanisLupus

    Joined:
    Jul 29, 2013
    Posts:
    427
    Hi Foriero,

    I'm a colleague of Ralha's and although he is the one working with MIDIUnified, I had the opportunity to witness some problems with your asset and help solve them.

    Firstly, you really really really need documentation! Your asset costs upwards of $100 with taxes and it is seriously lacking in docs. If it did work in a completely cross platform way (at least what is possible to make cross platform) without tinkering with code, this would be "passable", but I can tell you we had to spend a lot of time looking into and changing your code to make things work in the way we expected.

    It's weird that midi for Windows is accessed, not using the NATIVE value in the enum, but NONE, where we have to select the actual output device afterwards (Microsoft GS Wavetable Synth). This is not a "unified" approach. Maybe there is a good reason for this, but it's confusing mostly because it is also undocumented. There's no way to know this without asking you directly or looking at your code.

    When building for iOS we found more problems. The soundbanks were not being copied onto the XCode project build, meaning that we couldn't get it to work without going step by step in the debugger, finding the crash reason, and then manually copying them into the XCode project and adding them in the settings. I'm talking about the gmsf2.sf2 and gmdls.dls soundbanks. We've modified your MIDIUnifiedPostprocessBuildPlayer to copy it automatically.

    Furthermore, correct me if I'm wrong, but in SoftSynth.mm (where it was crashing without the soundbanks) this switch seems incorrect:

    Code (CSharp):
    1.     switch(softMode){
    2.         case dls:
    3.             presetURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"gmsf2" ofType:@"sf2"]];
    4.             break;
    5.         case sf2:
    6.             presetURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"gmdls" ofType:@"dls"]];
    7.             break;
    8.         case aupreset:
    9.             presetURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"preset" ofType:@"aupreset"]];
    10.             break;
    11.     }
    You can see that "case dls" is using the gmsf2.sf2 bank and "case sf2" is using the gmdls.dls one. Shouldn't it be the other way around?

    Another thing is compilation warnings. MIDIUnified causes a compilation warning for unused variables, which should be removed/commented-out/inside an if-def:

    Assets/Foriero Store/Others/MIDIUnified/Scripts/MIDIUnifed/Plugins/Providers/SoftSynth.BASS24NET.cs(40,28): warning CS0414: The private field `BASS24NETSynth.soundFontInfo' is assigned but its value is never used

    It's hardly a big problem, though. Just thought you would want to know and try to remove it.

    Finally, another big problem. While testing MIDIUnified on Android, we noticed that the CSHARPSynth sound was very low pitched on some of our devices. Fortunately, we had faced this problem before, as we commonly work with sound recording and reproduction, or we would probably never have found the source of this problem in your asset without help.

    The output sample rate you use for sound can never be a fixed value, because it depends on device. You let the user change it in the inspector, but, by doing it like this, the user has to guess a value that will work. And it won't, because what works on your Android device might not work on another. 44100Hz is a common value for most computers/mobile devices, but it can also be 22050Hz, 48000Hz, etc. You should read the value Unity gives you in AudioSettings.outputSampleRate and use that to start the synthesizer:

    return CSHARPSynth.Start(AudioSettings.outputSampleRate, settings.channels);

    The inspector value is likely not even needed in that case because it would cause confusion (you would very rarely need to specify a fixed sample rate).

    All considered, I felt that we should share these problems. I personally think that even though you seem to be the only one with an asset like this for Midi, it does not justify the poor docs and the fact that it contains any of these big problems that force you to waste a lot of time. There are several reviews on your asset from 5 years ago (!!) that mention lack of documentation, and we're 5 years later and this is still a problem.

    I don't mean to sound rude, but we were a bit frustrated by the whole experience and had to mention it.

    Regards!
     
  32. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, If you contacted me skype you would have all answered in 10 min. But nobody asked me for one on one skype support. Thank you for your points I will try to document what I can. But every client has different issues and needs. Thanks Marek
     
  33. CanisLupus

    CanisLupus

    Joined:
    Jul 29, 2013
    Posts:
    427
    Marek, I don't have any reason to doubt your willingness to support, and I actually thank you for your availability. Unfortunately there were many things we would have had to ask, and, as timely as your replies are, we would have wasted more time if we (but mostly my colleague) didn't try to discover them. As you can see, some of the problems are not the result of only a lack of docs, but actual bugs, which you would also have to find. In some cases we also needed to be quick, such as for our iOS builds.

    As for client requirements, we honestly just wanted to play midi (or similar) on all our target platforms by calling the same methods on every platform (when that is possible). It's what we expected from MIDIUnified, but if we had to do a little configuration or #if PLATFORM defines, that would be perfectly okay, too, as long as it was clearly documented.

    Again, sorry if all this sounds harsh. I just hope you are able to improve on these issues and get a more solid package. It would even save you support time.

    Daniel
     
  34. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Daniel,
    The iOS soundfont copy sounds like bug. It should be copied into xCode. Would you please send me your fix?

    Microsoft SynthWave is implemented so for ages. I can not do anything with that it is on Microsoft side.

    If you want really good synth result please use BASS24.

    I will state in description that C# Synth is purely for testing purposes ( Experimental ) since its sound quality is terrible.

    I'm very sorry for 414 warning. Will fix that.

    Other than that I don't have anything else to say. Next time just skype me. I can help you immediately. Sitting here every day and working even during night. If this is not enough then please ask for refund.

    Thank you, Marek.
     
  35. CanisLupus

    CanisLupus

    Joined:
    Jul 29, 2013
    Posts:
    427
    Marek,

    We copy each file using the same code that you use to copy softsynth.sf2. It was a quick and dirty fix:

    Code (CSharp):
    1.    string dlsFilePathSource = Path.Combine (pluginsFolder, "iOS/iOSSynthWrapper/Sounds/gmdls.dls");
    2.    string dlsFileName = Path.GetFileName(dlsFilePathSource);
    3.    File.Copy(dlsFilePathSource, Path.Combine(buildPath, dlsFileName), true);
    4.    string dlsFileGUID = project.AddFile (dlsFileName, dlsFileName);
    5.    project.AddFileToBuild(targetGUID, dlsFileGUID);
    (for each file)

    I honestly don't recall if we still had to set the soundbank files in XCode after this, but if that is so, a few text instructions for iOS would take care of the problem.

    I was thinking along the lines of assuming that the user wants to use MS's Synthesizer if NATIVE is the selected enum value. (And still keep NONE as it works currently.) Don't know if that is possible. This was not a big problem anyway, it was just lacking the instructions that would have made this clear. :)

    Thanks for the BASS24 suggestion. We haven't tried it because it was an additional library, but might look into it later. Does it work on all platforms, including Android? We currently only use the CSharpSynth for Android. Other platforms use the native approaches or soundbanks.

    No problem, Marek. I'm glad you are looking into these issues. Please give particular attention to the outputSampleRate issue if you can, or otherwise sound coming out of the C# synth will be wrong. We don't want a refund; we ARE using your asset after all. :) Thank you for your support.

    Daniel
     
  36. NAKAS

    NAKAS

    Joined:
    Jan 16, 2013
    Posts:
    23
    Hey! I recently purchased this asset and outside of some issues I think this is a very worthwhile asset package and am very excited for future updates and fixes. I'm using it for my universal audio apps and really appreciate the wide amount of supported platforms.

    I was able to easily hook up a gui keyboard and get it fully working with my akai mpk2 with the knobs and drum pads hooked up and working on ios, and pcs. I bought a usb c to usb host for my nexus 6p but could not get it to connect, which.I expected due to midi android in being in development. Any idea on the release roadmap for that? I'd love to include that into android when that gets implemented.

    Also I have a need to be able to record midi sequences in order to be played back later or exported as midi files at run time. Would this be possible by hacking a midi out stream or using the monitoring prefab to write to a midi file that can be played back later? Thanks, I'd also be happy to skype as i have a couple other small optimization and best practices questions.

    Thanks!
     
  37. haint87

    haint87

    Joined:
    May 15, 2017
    Posts:
    3
    Hi Foriero!

    I recently purchased this asset and outside of some issues. I need a document or video for start!

    Thanks.
     
  38. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, please install Foriero Core from asset store. And then follow examples.

    Also Menu->Foriero->Settings->Midi is important for development.
     
  39. haint87

    haint87

    Joined:
    May 15, 2017
    Posts:
    3
    Hi Foriero!

    Does midi unified 5.0 supports for android 5,6,7.0 ? I want to dev an app for android, it use this plug-in.
     
  40. haint87

    haint87

    Joined:
    May 15, 2017
    Posts:
    3
  41. CanisLupus

    CanisLupus

    Joined:
    Jul 29, 2013
    Posts:
    427
    Hello Marek,

    We encountered an issue using the C# Synthesizer (in fact, we encountered it the last time we talked, but only now have we looked into it). Sometimes, the first "MIDI" note sent to the synthesizer isn't played, and, following that, the next note is played at a much higher pitch (and volume?).

    It seems to only happen on first play, even if the synthesizer is restarted, but it happens on Windows and Android builds (we haven't tested on other platforms but assume it could happen anywhere), not only in the editor.

    It looks like a bug, but we couldn't find the cause. I've linked a test project and a video that can be used to reproduce this. The video shows me playing and stopping the test scene in the editor until it reveals the problem (i.e. not playing the first note, followed by a high pitch note):

    https://www.dropbox.com/s/gljm7ykxb7yk11d/MidiUnified Test.7z?dl=0

    Do you know how could we solve this? Using Bass24 isn't in our plans. The CSharpSynth piano quality is good enough for what we want (which is to play MIDI on Android) and free for commercial use, unlike Bass24.

    Additionally, when are you planning to update Midi Unified? I noticed there haven't been updates since we last talked ~2.5 months ago. Are you still looking into the issues we previously mentioned?

    Thanks!
     
  42. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, I'm sorry but c# synth is adapted work and was meant to be just for testing purposes. I will put it on github so that Unity community can contribute to it. Thanks, Marek

    PS : we will release MIDIUnified 2017.1 when Unity 2017.1 is out and is without bugs.
     
  43. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi, everybody who want to make C#Synth better and more stable please contribute here : https://github.com/foriero/csharpsynthunity

    If you want to use latest code just check this repository into your project and delete current AudioSynthesis.dll

    Thank you, Marek.
     
  44. CanisLupus

    CanisLupus

    Joined:
    Jul 29, 2013
    Posts:
    427
    Hello Marek,

    Thank you for your reply.

    We've searched around your store description and the text files you bundle with the package, and cannot find where it is mentioned that CSharpSynth is only for test purposes. The "documentation.txt", particularly, only mentions this for the C# Synthesiser:

    Granted, it's not MIDI, and less sound quality is expected and perfectly understandable. However, if it has issues, they have to somehow be fixed, or else the synthesizer shouldn't be advertised as a solution. If the problem is indeed in an external library which is not easy for you (or us) to modify (by the way, thank you for making the synthesizer source more easily available), we would like to solve it another way. In that regard, we noticed your store page mentions Android in these 3 options:

    The first doesn't fully work without bugs, and the third is paid for commercial use. Could you please tell us what the second (NATIVE Synthesizer) is and how can we use it?

    Finally, we also noticed that you called MIDIUnified by a different name, which is "2017.1". Will this be a different version from MIDIUnified 5? Hopefully just an update to 5? Will we get the fixes for the bugs we mentioned and the implementation of Android MIDI (as mentioned by "android in development" in the store description)?

    Thanks again and best regards,
    Daniel
     
  45. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hello Danie,

    1) CSharpSynth = C# Synthesizer.

    As I stated. I put it on GitHub and if you see how to fix it please feel free to fix it so that also other developers can take advantage of your fix.

    2) I would not advice to go NATIVE version of Android Synth. The capability of it are very limited. ( not supporting more instruments at once ) If you want to save headaches I would recommend you to go BASS24.

    3) Yes as soon as I'm able to compile from Unity 2017.1 Android build I have already solution for MIDI IN/OUT for Android. Just need to test it.

    We have fixed few bugs. Not sure if all you mentioned but once it is released we can talk a bit more about your issues.

    MIDIUnified 2017.1 is paid update. For those who update it will cost 30$. The reason is that Android MIDI IN/OUT development cost us 1500$. So I hope that all who are using MIDIUnified will be happy to support this package.

    Thank you very much and let me know if you need more support, Marek.
     
  46. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    PS : I will also put in new description on Asset Store the information about GitHub C#Synth so that people can make it better if they want.
     
  47. CanisLupus

    CanisLupus

    Joined:
    Jul 29, 2013
    Posts:
    427
    Hello Marek,

    Yes, I know that CSharpSynth is the C# Synthesizer. I was simply stating that you never mention that it is for tests only, and advertise it as working for ALL platforms. While it may "work", it has a severe bug, and now you are moving the responsibility of fixing it to us.

    You also ended up not telling us how to use the NATIVE version for Android. We understand its quality may be lacking, but wanted to test it nevertheless, if it works.

    But never mind that, because we fixed the synthesizer. It was a race condition between the main Unity thread and the audio thread. The AudioSynthesis library is not thread safe, but you/your team are using it like so. On the main Unity thread (the one that does all the Update calls each frame), MIDIUnified sends NoteOn messages to the synthesizer, and the synthesizer tries to create a voice like this:

    (...)
    voiceManager.activeVoices.AddLast(voice);
    voice.Start();
    (...)

    "voice.Start()" is responsible for setting the state of the voice to "Playing"; before that it is "Stopped". Meanwhile, between the first and second lines, your OnAudioFilterRead in CSharpSynth -- which runs on the Unity audio thread -- may call GetNext on the synthesizer, which calls FillWorkingBuffer, which in turn has the job of checking if voices are "Stopped" and removing them from the voices list. You see where this is going. It adds to the list with AddLast, then FillWorkingBuffer runs in another thread, sees the voice is Stopped (it wasn't initialized yet) and removes it. By the time voice.Start() runs, the voice isn't even in the list anymore.

    If you have the source code to the AudioSynthesis library, you may "fix" this by switching the order of the lines, though we can't promise that it won't have other problems, especially with multiple simultaneous voices and since you are still accessing everything using two concurrent threads. I would avoid that if possible.

    So we did the second possible fix, which applies to your CSharpSynth class only; i.e. we changed the ShortMessage method to add the MIDI commands to a list (in a thread safe block) and then, in OnAudioFilterRead on the audio thread (in another thread safe block) process any saved messages before filling audio samples in the loop.

    Finally, for your last point, the MIDI Unified 2017.1 update... I find this completely unacceptable.

    MIDI Unified 5 had absolutely NO updates since December 2016. We bought your package back in March 2017 to get cross platform MIDI working for our project. After spending our time figuring things out (admittedly without contacting you), we reported problems in April, which are still not fixed now in July. Reviews in your store page mention the lack of documentation since 2011 (!!) and this is apparently frequently reported in reviews. And yes, we had to search how to use your package in somewhat tangled code and had to modify it to make it work in several cases, including the before mentioned C# Synthesizer, the wrong output sample rate, missing files in iOS builds, compiler warnings, etc.

    All this considered, you charge $100 (excluding tax) for your asset, and THEN you expect people to pay MORE to get a new version if they want fixes to already reported and important problems, all the while not documenting things for at least 6 years. If this wasn't enough, you even expect people to fix the synthesizer problems in your asset without even looking into it, mention that the feature is for tests even though that is not mentioned anywhere. Furthermore, you even mention Android MIDI being developed in the store description BUT don't consider worth mentioning that it will be behind a $30 "upgrade" paywall.

    I'm probably sounding like a jackass to you, but it's honestly not on purpose. I'm trying to touch on everything that is bugging me, and it's a lot. I'm very surprised that this is how your asset is kept up to date, and how it destroys customers expectations of things working and being documented, and of store descriptions being accurate, especially at this price tag. Again, we don't want a refund, because after our fixes we will still be using your asset, but are now thinking of doing everything ourselves as soon as possible.

    Sorry for the big rant. I hope you improve and reconsider updating MIDI Unified 5 before moving on to 2017.1.

    Regards,
    Daniel
     
  48. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Hi Daniel, please if you have fixes for all your issues can we skype and fix together all so that you can keep downloading and importing our package and other developers can use your fixes? I will send you voucher for MIDIUnified 2017.1. Can you please update Git repository for your fixes? If no then sure you are what you said you are :) if you can help your effort and energy would be highly appreciated. Marek.
     
  49. jilt

    jilt

    Joined:
    Nov 7, 2014
    Posts:
    49
    It is very disappointing to see an already expensive asset we purchased not see a single update since purchasing, and now it's going to cost $30 extra to get an update? We're not even interested in the Android platform.

    Also I have to agree with the others that for an asset at this price, the documentation is severely lacking.
     
    CanisLupus likes this.
  50. Foriero

    Foriero

    Joined:
    Jan 24, 2012
    Posts:
    584
    Please all who need to fix things please send me private message with your email. I will add you to wunderlist project where we can tackle all current bugs together. For the effort of putting your bugs into wunderlist I offer free vouchers for future MIDIUnified paid updates. Thank you.