What is this information of midiAccessInterface - midi

I'm implementing the Web-MIDI API on Chrome and I list all my inputs devices into a simple table bootstrap. I have a MOTU Midi Express XT interface MIDI on my computer. Why I have this information display ?
What means the version and why manufacturer is Microsoft ?
The name is displayed like other music tools on my computer but not for the manufacturer...

The interface between applications and MIDI kernel drivers is a driver/DLL written by Microsoft (wdmaud.drv/wdmaud.sys). Chrome's Web MIDI implementation takes the information from there, so the manufacturer and version is the same for all those ports.

Related

How to know which functions available in a driver?

A device driver is a component that Windows uses to interact with a hardware device, such as a modem or network adapter. Rather than access the device directly, Windows loads device drivers and calls functions in the drivers to carry out actions on the device but how windows know which functions are available and how to call them?
As far as the first part of your question, on a modern system that supports ACPI (also see OSDev Wiki's page) Windows (or any other OS worth its salt) uses that to detect devices via the tables that are loaded by the BIOS (e.g. the DSDT).

How do I send Midi events to Software Synth in C++

Hi looking for some advice. I am writing some music composition software. I have cobbled together tools to read write and send midi data, they work fine. However I stumped on the following: I'm trying to send midi events to a SW synthesizer on the computer.
So I can control the sw synth from an external keyboard. I can control the keyboard from my own sw in the computer. But how do I get my sw to send midi to the sw synth in the same computer.
Also I'm trying to do this in a platform independent way if possible.
Thanks!
VMan
My question wasn't clear.
So I'm currently running on Win7. Cross platform is a priority but not for the first prototype.
Specifically my problem is with accessing kontakt player (v2) it works within it's own environment and with midi IO. But I can't access it from within my own software.
midiOutGetNumDevs returns just one device and it's the Microsoft GS Wavetable Synth.
I'm confused that I can send midi to the kontakt player via a midi/usb cable but that it doesn't show up as a midi device.
What am I missing?
Thx
Which API/OS are you using? Which SoftSynth?
Short answer: you might try "PortMidi".
http://portmedia.sourceforge.net/
Long(er) answer:
I haven't found any cross-platform MIDI lib able to speak to any kind of MIDI sink. In fact it depends on what the softsynth use for receiving MIDI events.
1) On Linux, you can use ALSA to speak to the ALSA synths. A softsynth can register itself as an ALSA sink. You can either:
* use the ALSA lib to connect to send MIDI events to this sink ;
* or you can register your application as a ALSA MIDI source and use another program (aconnectgui, qjackctl, patchage) to connect it to any sink.
http://www.alsa-project.org/alsa-doc/alsa-lib/rawmidi.html
http://www.alsa-project.org/alsa-doc/alsa-lib/seq.html
Downside: Linux specific
2) You can use JACK for MIDI. As in ALSA MIDI, an application can register MIDI sources and sinks. Yhe softsynth can register as a JACK MIDI sink. Then you need to make you app a JACK MIDI source and connect them with another program (qjackctl, patchage).
http://jackaudio.org/files/docs/html/index.html
Downside: need installation, configuration, launching of JACK
You have two solutions to move the ALSA sink/sources as JACK sink/sources :
either use the built-in functionality of JACK (commandline -Xseq) ;
or using "a2jmidi"
4) On MacOS you can do MIDI with CoreAudio. I don't know anything about it though.
5) On windows, I guess you use the midi* functions in
6) Use OSS on some other OSes
7) Communicate with the synth using socket/protocols
You could make your software send MIDI events using MIDI/RTP or MIDI/UDP so you don't care about the driver/OS. Most softsynth don't speak any of those directly so you need a program to do the bridging (qmidinet or others).
8) PortMidi is a cross platform lib for MIDI. However it doesn't seem to be able to use JACK as a backend directly (you can however make the ALSA devices available in JACK as explained above).
http://portmedia.sourceforge.net/
For example, on Linux, Fluidsynth can use ALSA, OSS and JACK for MIDI input. Timidity++ can use ALSA and the Windows API.
OK the answer to this problem is to use a virtual midi driver. I found a free one here:
http://nerds.de/en/loopbe1.html
This creates a midi output device that shows up with midiOutGetNumDevs that I can stream my midi notes too and other Midi software on the same computer can use it as a midi input device.
Works on Win7 and apprently also has mac support. My problem is solved.
"LoopBe1 is an internal MIDI device for transferring MIDI data between computer programs. Basically LoopBe1 is an "invisible cable" to connect a MIDI outport of an application to any other application´s MIDI inport."
Agreed that a Virtual MIDI Driver is the easiest solution.
Another one that used to be very popular (not sure how it performs on Win7 though) is MIDI Yoke. http://www.midiox.com/
If you are looking to do something commercial, you may consider writing your own virtual MIDI driver to make your software controller(sender) a virtual MIDI source. Only on Windows will this be a lot of work.
On Mac and Linux your job is much easier. As #ysdx said, Mac using CoreMIDI and Linux using ALSA/Jack, this is very easy to do in your application by creating a Virtual MIDI port and connecting to destinations.

Bluetooth Application development using Microsoft XP SP2

I am looking for vendor independent way of accessing Bluetooth profiles like A2DP, AVRCP , MAP, HFP on XP either using SP2 or winsock.
I am in process of finalizing way to create application for Bluetooth.
I would need to use following profiles apart from service discovery : HFP, A2DP , AVRCP ,MAP.
Till date my study is :
Microsoft XP SP2 provides a basic stack.
I have figured out following ways to do it after going through MSDN:
Winsock.
Winsock support for Bluetooth as a network protocol suite includes the Bluetooth Personal Area Network (PAN) and Dial up Networking (DUN) profiles. Bluetooth support in Windows also includes Bluetooth Human Interface Device (HID) profiles for connecting to keyboards, pointing devices, and other input devices which are unrelated to network protocols. However I don't know how to access profiles of my interest using Winsock.
Microsoft XP SP2 which provides basic stack. It says that profile drivers need to be installed from other vendors. However then these vendors will provide their interface. This will make my application vendor dependent.I am not sure if there is some standard way for communicating with profiles. A From where can we buy profile drivers to build a vendor independent application for accessing profiles as well
So I am trying to figure out that is their some way by which i can make a vendor independent Bluetooth application on Windows XP? How can we access profiles independent of vendor we choose for profile driver installation.
Bth_FAQ.docx (http://msdn.microsoft.com/en-us/windows/hardware/gg487349.aspx)
What is new in Windows Vista?
[...]
• Synchronous connection-oriented (SCO) link support. This support is necessary for the headset and hands-free profiles.
• Kernel-mode device driver interface (DDI) support for Logical Link Control and Adaptation Protocol (L2CAP), Service Discovery Protocol (SDP), and SCO.
[...]
So, in XP there's no API for L2CAP, and apparently there is no SCO support at all. So most of the profiles you list there can't be implemented. :-( MAP is ok as it uses GOEP (i.e. RFCOMM) afaik.
Other stacks may have support: either support for the profiles in-box, and/or an API. Widcomm/Broadcom has API support for L2CAP and apparently Audio too, don't know abut build-in profile support. BlueSoleil doesn't have a L2CAP API but does have built-in support for various of the audio profiles. I don't know much about Toshiba.
As you wrote the supported in-box profiles in Windows XP are: SPP (Serial Port Profile), DUN (Dial-Up Networking), HID and HRCP (Hard-Copy Replacement Profile). The response to your question lays in Microsoft statement: profiles vendors can be added, so what you can do is write your own profiles. The specification of those profiles are public on Bluetooth SIG website, and interoperability should be guaranteed this way between devices.

Publishing a MIDI source as a Bonjour service

I have written a VST/AU/RTAS synthesiser plugin for OSX and Windows that also has an iPhone equivalent. I would like to allow the two to communicate with each other over a local area network so that the iPhone app can be used to send MIDI controller data to the plugin. I plan to create a MIDI source on the iPhone and publish it as a Bonjour service so that the plugin running on OSX or Windows can find it and receive midi from it.
I have a couple of questions to ask about this:
1) Do I actually have to publish the MIDI source as a Bonjour service or does a coremidi host (running on iPhone) automatically publish itself?
2) Are there any code examples available that show how to do this sort of thing?
I have seen the following post but the answer to this only covers the client side, finding a Bonjour service but not the publishing side, and it transmits MIDI via OSC, and it only covers OSX but not Windows (I know, I'm not asking much! ;) )
How to send MIDI or OSC signals to a Mac application from my iOS application?
Cheers,
John.
AFAIK you'll have to publish the service yourself. NSNetService and NSNetServiceBrowser are the classes you need. Check out the companion guide. I found this article on Cocoa for Scientists particularly helpful in getting started. Both have some decent code samples. The Bonjour Browser is useful for testing.
The list of bonjour service types already has
apple-midi
and
imidi
But I think it's best to make up your own application-specific type name unless your app is plug-compatible with one of these services.

How to access any printer present in wifi network in an iPhone application?

I want to develop an iPhone application where i want to access any printer present in my wifi network.
But according to Apple :" Printing is not supported because there is no direct support for connecting printers or other print-related hardware to an iPhone or iPod touch".
But there are many application in appstore which is providing this facility.
So Is it possible to access any printer present in my wifi network and print any PDF/Any file.
If yes then how?
Is there any API available for this?
There is no current API for this.
What those applications do is implement the raw functionality - ie. the HP app for printing to HP printers opens a raw socket connection to the printer and converts the document to be printed into the raw format for the printer. So it may be converting the PDF document into PCL for example. There is no iphone API for PCL, so you would have to read the PCL specification and learn how to generate it "by hand", or find a library from another platform you can port onto the iphone.
The problem is, there are a large number of printers, some speak PCL, some speak postscript, some speak custom languages - it is a large task to implement them all.
Some of the apps in the appstore rely on you having a PC, and they install a piece of software on the PC - effectively all these are is a frontend to send the document to the PC to be printed, using the printer drivers already present on the PC.
Apple have stated that they will be releasing printing for the ipad - ipad printer support confirmed by Steve Jobs. Presumably that will involve an API other apps can use, and it seems likely that will eventually come to the iphone too.
Here's one of the apps you mention:
http://mobile.eurosmartz.com/faqs/faqs_index.html
You can print direct to most WiFi printers or installing by the WePrint helper software on your Mac or PC you can print to any printer connected to your computer via USB cable, network, WiFi, BlueTooth or other means.
So the PC will have a custom bit of software which will print documents to an attached printer, and the iPhone must communicate with said PC software and transmit the required document.
Hope that helps!