Selectively quoting a blog piece entitled What's an audio endpoint by one of the chief architects of the post-XP Windows audio system:
an endpoint is a "piece of plastic" (hopefully with some wires in it) "to which users relate" such as "the microphone or headset connected to your laptop".
Which sounds great. Except that on every desktop machine I have ever used in the past 15 years, there has been a microphone AND a line-in input jack, and they exist (at least in my mind) with equal status. As a user, I strongly relate to "pieces of plastic" I connect to the line-in jack. They certainly look very much like an audio endpoint to me. The trouble is:
When I use IMMDeviceEnumerator and IMMDeviceCollction to discover the devices on my desktop machine, and use Microsoft's own example code to do so (e.g. the "CaptureSharedTimerDriven" audio sample in Microsoft's SDK) they only list the microphone as an endpoint.
So if my line-in jack is NOT an audio endpoint, what is it, how do I access it, set the volume on it, and so on? How can I make an application use it (exclusively) even when a user has selected the microphone as the default endpoint?
Partial (and perplexing) answer: it is possible for a microphone to be listed as an audio endpoint even when there is nothing connected to the microphone jack, but a line-in input might only be listed and confirm itself as a legitimate audio endpoint when there is a device physically connected to the line-in jack. This makes no obvious sense, but is nonetheless the way things are... at least on my machine.
Related
Is it possible for Windows 10 to choose what apps should mute all other sounds when I am on a VOIP call?
I know that Windows does it for Skype and games, but I use mostly SIP protocol programs like Zoiper or Jitsy. When using these, and when I make / receive a call, other sounds are never muted. I am usually listening to music simultaneously from a browser, and its annoying to have to manually lower the volume everytime I have to VOIP. Its even harder because I have to switch virtual desktops also to do it, because I keep work v.desktop away from the rest.
I've searched all over the windows control panel, and also googled around but couldn't find any options for this. Any recommendations?
It is not possible. The app have to make some system call so the OS will recognize it as a VoIP app and reduce the volume for all other apps.
However I don't know on which API call this is relied on.
I hope that somebody will answer this.
To the best of my knowledge, this hasn't been asked or addressed before. Here is my question:
I am using Windows 8.1 and want to write an application that will work between the microphone and any other application that uses the microphone like Skype, Hangout .... I can further exemplify the the application in my mind as follows: For a very simple case I would like to add noise to the input of the microphone whether it is being used by Skype or Hangout or any voice recording app. You can think of any signal processing method to be a possible candidate for my application aside noise.
I have to make the microphone input go through my application whatever requests the usage of the microphone. I know this sounds like overwriting the microphone firmware but I would like to do it at the application level. It is almost like I want to redirect all the microphone input through my application and give the output of my application as the microphone source to all other microphone dependent applications.
Do you know of any way to do this or any similar application?
Thanks for the help!
I'm developing a web system that (among other things) will be streaming video content to a limited number of users. There won't be more than 20 users at any one time, and they may be viewing videos from up to three cameras. However there are some restrictions on the setup of the network the clients have which are making this an absolute pain, and I'm stuck on ideas.
The cameras will be directly accessible from the web server running the software. The software server will be directly accessible to web users. However the cameras will not be able to be accessed by web users at all. So simply throwing up a flash player pointing to the url of the camera feeds isn't going to work. I need to present the video stream through the website in a cross-browser compatible manner, probably through a flash player like flowplayer, but flash is by no means a necessity.
So what are my options here? Any help would be greatly appreciated.
The web software is an ASP.NET/C# website running on a Windows server. I'd prefer not to run another program on the server, but in the (likely) case that I do, the software needs to be able to run as a service so that it can run after a server restart with no user interaction. Also, free and/or cheap options would be prefreable.
The cameras are along the line of the AXIS 214 (there are others but they're similar AXIS cameras) and outputs MJPEG and MPEG4 streams at 640x480.
So I found a cheap windows application called WebcamXP: http://www.webcamxp.com/home.aspx
It suits my purposes almost perfectly. It captures the AXIS camera's stream with no problem, and re-streams it (in MJPEG from what I can tell). It also includes a small flash front-end with no controls, which may be a drawback for some, but perfect for my needs. You can just grab the embed code from WebcamXP and drop it into the website. Nice and simple.
In 2007, during the fever over DRM being included in Windows Vista, a Windows Vista Team blog was created to respond to a lot of the concerns. One of the questions responded to the ability of VoIP software to perform echo cancellation when running on Windows Vista.
This is what Nick White had to say by way of an FAQ:
Will echo cancellation work less well for premium content?
We believe that Windows Vista provides applications with access to sufficient information to successfully build high quality echo cancellation functionality.
What information does Windows Vista provide to allow applications to build high quality echo cancellation functionality?
Note: Reading that statement, i get the impression that Windows Vista provides sufficient information to allow applications to successfully build high-quality echo cancellation functionality. Presumably the way Windows provides this information is through an API.
Echo cancellation works by sampling the playing output, and "subtracting it" from the recorded microphone input.
Unfortunately, as MSDN notes, one cannot always sample playing output:
Windows Vista provides digital rights
management (DRM). Content providers
rely on DRM to protect their
proprietary music or other content
from unauthorized copying and other
illegal uses. WASAPI does not permit
loopback recording of digital streams
that contain DRM-protected content.
Similarly, a trusted audio driver does
not permit a loopback device to
capture digital streams that contain
protected content. Windows Vista
allows only trusted drivers to play
protected content. For more
information about trusted drivers and
DRM, see the Windows DDK
documentation.
Presumably that means that using Loopback Mode from WASAPI is not the intended method to provide echo-cancellation services.
What is the intended API to allow the implementation of high quality echo cancellation?
Note: This is related to, but separate from, another question i asked: How to sample output audio mix?. This question is specifically looking for an expansion of the response by the Window Vista team that echo-cancellation is possible in Windows. This question is looking for the API; it can be a separate question of how to use it.
Googling for an answer, i get the impression that (while performing echo-cancellation) an application is allowed to sample DRM protected content, but the content will be degraded (i.e. "sufficient information"). This would make any echo-cancellation worse, but still possible.
Or was the Windows team implying "sufficient for most cases, but not while the user is listening to a song or playing a movie" - and that it is in fact not possible to successfully build high quality echo cancellation functionality?
Update: It should be noted i'm not looking for an echo-cancellation API, i'm looking for an API to sample the playing output - which is what's required to implement echo cancellation. Unless of course Windows Vista provides an echo-cancellation API (which is how they continue to protect Premium content). But i've not seen an echo-cancellation API either.
http://msdn.microsoft.com/en-us/library/ff819492(v=VS.85).aspx
If you are looking for an API to do echo cancellation, it looks like the voice capture dsp has built in support for acoustic echo cancellation.
Example:
http://msdn.microsoft.com/en-us/library/dd443455(VS.85).aspx
I don't understand why this hasn't been addressed before, can't seem to find much info on this on the interwebs.
I am sometimes listening to something on my computer and I want to play it to my XBOX 360 or Sonos (Multi-Room Music Manager) and I can't do that in a simple one-click way. I would want to simply be able to select the UPnP devices around me as my audio output and be able to play anything that my computer would play otherwise.
Do you guys know of any software that enables this? Have you heard of this idea before?
Remotely telling your media-server (PC, NAS etc.) to push audio or video to a networked device (tv, stereo etc.) with DLNA. This is the closest thing I can think of.
http://www.dlna.org/digital_living/possibilities/
http://www.dlna.org/digital_living/getting_started/