Naudio- Multiple sound device playback and recording issue - c#

i am using WaveOut and WaveInEvent to record sound from multiple usb sound devices and playing it back to them. i am talking about 4-6 external usb sound cards that i have to record and playback at the same time all together.
so it means that for every sound device i have one object of WaveOut with the soundDevice ID and one object of WaveInEvent with the same SoundDevice ID (for record&playback).
my c# project throws mmexeption with explanation :"unspecified problem" when i am calling to the WaveInEvent.startRecording(). sometime it happens in the init of the WaveOut with the stream.
i thought that maybe there is a limitation of opening sound card devices for play&record or maybe naudio cant support it.
so is the limitation exist? or maybe i have to use diffrent object then WaveOut and WaveInEvent when handling multiple sound card device?

tried to play on all devices from Winamp and when I got to the forth sound card it didn't play.
I tried to plug one sound card to a different USB hub of the pc (not different port at the same hub, a new port on a different hub) and suddenly it works! also with Naudio. now i can open all of them to playback and record. I haven't tried massive check yet but its looking good.
it's seems like that the problem was that I overloaded the usb hub. I don't know if it because the usb hub doesn't has enough bandwidth or because something that belongs to voltage issue.

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.

Assure an audio device is connected

I have some Bluetooth audio devices paired to my system. These can sometimes be disconnected. If I go into the Sound control panel, look for the device in the Playback devices list, and right click&select "connect", then everything works again.
How do I do that programmatically in C#?
I've tried 32feet and NAudio already, but the State property of their BluetoothDevice and MMDevice classes is read-only.
In a perfect world, I would find a function like this:
BluetoothConnector.Connect("MyBluetoothDevice");

Is there a way to intercept the sound coming out of my speakers so that I can insert a C#.NET software-based audio filter?

I suffer from tinnitus, and there are a number of sound-based therapies that I can use to mitigate the phantom sounds.
I would like to explore the possibility of processing the sound going to my headphones, or even my speakers, from my PC with a software-based filter.
Is there a way using C# to intercept the audio stream, process it (applying a band-pass filter for example), allowing it to continue to external devices?
I would suggest to use virtual audio device to capture the sound and transmit it to the real speakers after processing. I'm not sure if it is possible to create this using c#. But you can use existing drivers like vac. So you set vac as default device. You create a c# program which records from vac, does the processing, and sends it to the speakers.

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.

How to continue playing a capture device when the device is replugged in?

OK,I'm now developing a winform app that can capture stream from a video capture device using DirectShow.NET.
And the problem is when I plug the usb capture device out. the image freezes,and after trying to stop , my code hungs on IMediaControl.Stop() method. Thus i can't continue playing. So is there a way to stop the playing progress when device is plugged out? or how to replay after the device replugs in?Thanks.
There is no well-defined behavior for scenario with unplugged device. Eventually this should result in certain error code, however a delay with timeout might be involved. The behavior is dependent on actual implementation on the underlying filter backed by hardware driver.

Categories