how to find the main speakers directshow audio device - c#

I am capturing the desktop using VLC and DirectShow an I need to find the main speakers audio device in order to capture all the sound from the desktop, can this be done programmaticly ?
I am using C# in windows XP and 7

You actually cannot capture data from speakers. The real options are:
audio capture from real audio input device, such as microphone
audio capture from loop back device (provided that it is enabled)
Note that loopback capture is different in Vista+ and older systems, also previously discussed here:
Is it possible to record sound played on the sound card?
Get sample of sound from stereo mix in Windows
https://stackoverflow.com/questions/6993186/windows-7-any-audio-libraries-supporting-loopback-audio-capturing-in-c

Related

Monitor USB for camera connection

I have a USB microscope camera and I would like to open the Windows 10 camera app automatically if the camera gets connected to a USB port. After checking that this isn't possible with Windows 10 at the settings level, I have decided to write a short C# program that monitors the USB ports for a camera device connection (and runs the camera display app).
As to the monitoring I haven't got a slightest clue where to begin. Needless to say that the monitoring program should be lean with respect to blocking ressources, because it would be running all the time. Can I simply obtain an event notification of USB connection? Do I have to expect problems with permissions?
And of course, suggestions for alternative approaches are welcome, if any. Note that I do not want to capture and display video from the camera myself, unless it is easier to do it that way instead of opening the existing camera app.
assuming the microscope is using the web-camera interface I would look for guides about how to enumerate and connect to web-cameras. I have found a few alternatives:
Media capture API
Aforge
Versatile WebCam
I had most success with versatile webcam, but if you just want to enumerate devices any of them should do. Aforge is probably the easiest to use.
You can then use a timer to check for devices, and do something if the microscope is connected.
If the microscope is not a webcamera you will need to refer to the camera documentation on how to enumerate devices.

How to add a custom Windows audio input?

I have a Bluetooth Low Energy (BLE) device that streams audio through a custom service, and need to be able to use it in any Windows application (e.g. stream the audio to Skype or Google Chrome for example). I believe the only way is to make this audio source appear as a standard Windows audio input, but how to do this ?
I think the most reliable way to interract with a BLE device is through UWP (using Windows.Devices.Bluetooth.BluetoothLEDevice), so I used it to get the audio data. Then, I used the Windows.Media.Audio.AudioGraph to interract with the audio system. I'm able to generate the Windows audio stream from the BLE audio data with the AudioFrameInputNode and output it to my application default output with AudioDeviceOutputNode.
I can't override the default system audio input and audio output (e.g the laptop microphone and speakers) so in order to be able to use the output from my application as an input in other application, I used VB-Audio (https://www.vb-audio.com/) combined with the "App volume and device preferences" Windows feature. This way, I can use the VB-Audio Cable to connect the output of my application to the input of another, without having to set them as default system devices.
In theory, this should do what I need to do, but in fact, this setup isn't reliable.
I don't understand why, but the behavior isn't consistent at all. Most of the time, changing the audio settings (from "App volume and device preferences" and the "Audio devices panel") have no effect. With the same settings, sometimes it works but sometimes it doesn't (audio from my application is played on speaker instead of VB-Cable input, etc.)...
I don't know where the problem comes from, VB-Audio or Windows itself ? Is there a more reliable alternative to this setup ?
Otherwise, is there another way to use a custom audio source from an application like a standard Windows audio input ?
Please let me know if anything is unclear or you need any more information.
EDIT:
I think this post is actually about the same issue that I'm facing.

C# monitor microphone usage

I'm looking for an ability in managed code to monitor which processes are accessing microphone devices on my computer.
I was able to find C++ examples of viewing audio output (AudioSessionManager), but is there an API for input devices also?
Extended: How can one protect himself against microphone spying on Windows oeprating system?

Test for audio with no speakers

I am currently debugging some code in C# which plays a noise (in this case a beep) under certain conditions.
The computer I am using has no speakers or working headphone jack, is there any way in which I can detect sound being played without actually being able to hear it?
The code that plays the sound is:
else System.Media.SystemSounds.Exclamation.Play();
If you don't have any device in the device manager, you can install a Realtek Driver. It creates a virtual playback device.
After that, go to sound-playing devices, choose the virtual device and set it as default playback device. Open your app and check whether a sound is played by looking at the volume visualisation next to the device in the device manager.
(source: eightforums.com)
In Windows, I believe (provided the audio drivers are loaded, and Windows thinks there's at least some form of audio output device) - you can open the volume setting (from the system tray) and see the bar bounce up and down when sound is being generated.
Alternatively, if the box is running Windows Professional, RDP to it from a remote device? The audio will be passed over the RDP session and played on the client.
Search "Sound" in Windows (Control Panel), it shows you all your devices with the volume it outputs to that device.
You can see if your sound works by looking the current volume (the bar on the right of each device).
If your PC has no audio out device (I don'think it's the case), maybe you can add "virtual" output devices.

Play sound on a recording device in C#

In our solution we need to play sound on one of the recording devices.
For this purpose we are using VAC (Virtual Audio Cable), but we have a problem that it creates noise in the output.
Is it possible to play audio to recording device in C#?
Is there some existing library for that or virtual audio driver is required?
There are useful 3rd-party-tools & APIs in a question was asked earlier:C# Audio Library.
I hope you find what you want.
We used NAudio library to play sound on a specific playback device.
By default VAC is duplicating audio from playback device to recording device, so by playing it on virtual device it's also played on recording device.

Categories