This driver (https://github.com/Microsoft/Windows-driver-samples/tree/master/audio/sysvad) is provided by Microsoft. And in its README, the last part, it says:
Locate an MP3 or other audio file on the target computer and
double-click to play it. Then in the Sound dialog box, verify that
there is activity in the volume level indicator associated with the
SYSVAD (with APO Extensions) driver.
But in my target computer, the volume level indicator associated with the SYSVAD (with APO Extensions) driver does not change at all. And the target computer does not make any sound.
The same case to the mic, when set default mic to any of the sysvad mic array, the mic volume level will not change at all.
In my understanding, sysvad driver is virtual driver. So it will not really work. But why Microsoft README says: there is activity in the volume level indicator associated with the SYSVAD (with APO Extensions) driver.
The SYSVAD documentation leaves a lot to be desired. You won't see any activity in the volume level indicator, and you won't hear anything, since the only thing the rendering endpoints do is save a copy of the audio output to file (look for C:\STREAM_HOST_*.wav files).
The capture endpoints (including the "loopback" pins) generate constant sine-wave signals, which you can see if you use an app to record them, and then view them in a sound editor/viewer or play them back out to a real device.
I am working on SysVad too and sure it works, for Mic you can test with vlc player
Try to open the virtual mic from VLC and then you will hear sound, it's a sin wave generated by driver itself
Related
I connect a MacBook through a 3.5mm jack cable to another computer's line in input jack in the motherboard which has Realtek Audio (Windows). This enables me to use a pair of speakers connected to this last PC and hear both mac and pc through the same speakers simultaneously.
I used to be able to go the Speaker Properties panel and unmute the Rear Input. This way it uses direct monitoring so you don't experience any latency on the macbook's playback.
Some time ago a driver update seems to have removed the Level fader of the inputs together with its mute toggle :O
Now, to achieve the same, I'm only left with this option which introduces latency in the audio playback:
Enabling Listen to this device in the Rear input Recording properties.
So is there another way to regain this functionality?
Is there something like what's suggested in this other question?
Unmute audio input (microphone) in OSX programatically
Basically some command to unmute the direct monitoring of the Line In audio input on Windows, or maybe an app that controls the drivers?
Realtek audio console doesn't provide this option :(
Thanks!
I just had the same problem, but it's not because of the driver. The culprit is the new realtek audio control which has removed the lever for audio monitoring level. You have to use an old version of realtek control panel to make it work.
For example try downloading audio drivers for this motherboard
https://www.asrock.com/mb/intel/Z97M%20Pro4/index.la.asp#Download
Unzip it and look for the file RAVCpl64.exe under the Vista64 folder.
Run this and you'll get the good old control panel back! Works like a charm.
I suggest you put a shorcut on your desktop for ease of access.
I just did this and uninstalled the new control panel which sucks.
I wonder why Realtek chose to remove functionality from their software, really bad idea!
I'm developing driver for USB video capture device. First of all, I've started with CoreMediaIO sample:
https://developer.apple.com/library/content/samplecode/CoreMediaIO/Introduction/Intro.html
The kernel extension is based on IOVideoSample. It gets data from the USB device and sends to the assistant. Kext has IOKitPersonalities based on the USB device. So the device is real and should support HotPlug. Kext main class loads when the device is plugged in and unloads when the device is plugged out.
SampleAssistant was changed only to detect my kext class. PlugIn has NoCMIOHardwarePluginLazyLoadingInfo property.
When all video capture apps are closed - hotplug works well. Terminate function is being called from kext and kext object is being unloaded without any problem.
Even if you start video capture app with the stream from the device, then close it and plug out device - hotplug also works.
It works well with QuickTime player. It can find a stream and show an image, but there is one problem.
When QuickTime (or any other video capture app) works and show stream from the device - hotplug doesn't work. If you try to plug out the device it will remain in the system and USB port won't work until you reboot Mac. According to logs - terminate function wasn't called at all. Seems that something retains a link to the device.
I've started digging into the problem.
First of all, I figured out that SampleAssistant doesn't support hotplug by default. It has notification only for device arriving (DeviceArrived). I've added "interest" notification and handle only "kIOMessageSeviceIsTerminated" message - executing DeviceRemoved function and force deleting device object, but it didn't help.
There is also a file CMIO_DPA_Sample_Server_Stream.cpp. If you go to Stream::Start function and delete "mIOSAStream.Open;" and "mIOSAStream.Start();" lines - hotplug works.
Can you please advise what can be done to solve this problem?
I need to do some system-wide audio processing in my app.
I have installed Soundflower and selected it as my default output device in order to get the system audio. I know that Soundflower merely copies the mix buffer to a ThruBuffer and passes it to the apps so they can get it in their AudioDeviceIOProc callback.
What I don't understand is how to route the audio back to the Built-In output device after I've done the audio processing. I have the Soundflower device as the default, and it produces silence as I try to route the audio to the default output unit. Maybe what I need is to create a Multi-Output device in my program but I'm not sure how to do that.
You can create a multi-output device on osx - they're called "aggregate devices". You can do it manually in Audio MIDI Setup app and use that device in your app, or do it programmatically in your app.
If you do do it in app, example code seems to be rare. I cribbed the info I needed from this blog post.
NB the post is very old, I had to go to the Internet Archive Wayback Machine to find it.
There are two apps for OS X that allow you to pre-amplify audio before it gets played by the hardware: Audio Hijack (pre-amplifies output from particular applications) and Boom (pre-amplifies all system audio). These apps work by applying equalization to pre-existing audio streams - with a high pre-amp setting - before they are sent to the sound card.
My question is: how to hijack the system audio stream and then send it along to the sound card. Is this somewhere in an API, or would it require altering a system library ?
1) Create a standard sound device that shows up in audio system preferences. This has to be in the form of a kernel extension (kext). Difficult to create by just reading apple docs - try looking at an app called Soundflower.
2) Once you've loaded the kext and have the new audio device available, select it in preferences as the default output device for system audio.
3) Now you need to alter the audio and pipe it to the real system output. This can be done in an accompanying application that adds callback "IOProc" functions to a) the new device and b) your computer's built-in output device. You can then copy audio buffers from one device to the other, to pipe the audio to your speakers. To increase the volume, multiply all the bytes in the buffer by some factor. See Soundflower's accompanying app.
I am currently using the Mac OS X Audio Queue Services API for audio recording and sound analysis. Works fine using the default mic input.
If there is more than one microphone plugged into the Mac (USB, headset jack, etc.), is there a way to programmatically enumerate and select which mic is to be used for audio input within an application? (e.g. not have to send the user to the system preferences panel, which may affect a users other audio applications.) If so, which APIs should be used to select the mic input.
To enumerate available input devices please see my answer to AudioObjectGetPropertyData to get a list of input devices.
Once you've determined the input device you'd like to use, you can set the kAudioQueueProperty_CurrentDevice property to the device's UID.
I fear, no, because AQ is hard-coded to use default input (to my best knowledge). AQ is fairly limited and only iOS gives more control via AutoSessions. However, you can use AUHAL to record from an arbitrary device:
http://developer.apple.com/library/mac/#technotes/tn2091/_index.html
You won't need listing 4 from above because you'll use the AudioDeviceID for the device you have chosen (presumably by getting the list of devices using AudioObjectGetPropertyDataSize and picking the one you want).
FWIW: if you decide that's too much, you can presumably still use AudioHardwareSetProperty to set kAudioHardwarePropertyDefaultInputDevice from your code - not what you wanted but certainly less work...
If you set up the Audio Queue to read from the default input device, then it will read from the mic that is selected as default in the System Preferences->Soubd->Input tab.