[wdmaudiodev] Re: Fwd: Re: Re: AVStream virtual mic: why could external application 'reset' volume level to 100%?

  • From: "Tsai Tzung-Dar" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "tdtsai1973" for DMARC)
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 16 Aug 2016 07:38:29 +0000 (UTC)

HiWhere is you Virtual Mic signal come from? Do you read it from a file or you 
redirect it from a real capture device? 
BR,Tzung-Dar Tsai

      寄件者: alexander ivash <elderorb@xxxxxxxxx>
 收件者: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx> 
 寄件日期: 2016/8/16 (週二) 3:18 AM
 主旨: [wdmaudiodev] Fwd: Re: Re: AVStream virtual mic: why could external 
application 'reset' volume level to 100%?
   
#yiv6468637176 #yiv6468637176 --body {font-size:13px;}#yiv6468637176 
#yiv6468637176 body {font-size:13px;}#yiv6468637176 body {font-size:13px;}For 
some reasons mail didn't reach mail list... resending.. 

I beg pardon for the delay, here are two files recorded from virtual mic 
attached. 
Unfortunately windows 10 sound recorder disallow recording to wav (or I didn't 
find how to achieve it) so hopefully m4a will be enough. Please let me know if 
not - I'll find other means how to produce wav. 
Regards, Alexander
Matthew van Eerde <Matthew.van.Eerde@xxxxxxxxxxxxx> писал(а) в своём письме 
Fri, 12 Aug 2016 21:54:20 +0300:


#yiv6468637176 #yiv6468637176 _filtered #yiv6468637176 {} _filtered 
#yiv6468637176 {font-family:Calibri;}#yiv6468637176 p.yiv6468637176MsoNormal, 
#yiv6468637176 li.yiv6468637176MsoNormal, #yiv6468637176 
div.yiv6468637176MsoNormal 
{margin:0in;margin-bottom:.0001pt;font-size:11.0pt;}#yiv6468637176 a:link, 
#yiv6468637176 span.yiv6468637176MsoHyperlink 
{color:blue;text-decoration:underline;}#yiv6468637176 a:visited, #yiv6468637176 
span.yiv6468637176MsoHyperlinkFollowed 
{color:#954F72;text-decoration:underline;}#yiv6468637176 p 
{margin-right:0in;margin-left:0in;font-size:12.0pt;}#yiv6468637176 
.yiv6468637176MsoChpDefault {} _filtered #yiv6468637176 {margin:1.0in 1.0in 
1.0in 1.0in;}#yiv6468637176 div.yiv6468637176WordSection1 {}#yiv6468637176 OK, 
if it’s CounterStrike, I’m willing to believe that they’re looking at the 
signal and boosting it to get more bit depth (and then turning it down if they 
clip.) So I suspect the difference between your mic and the real mic is that 
they’re getting a hotter signal out of the real mic, so they don’t need to 
boost it as much. Can you share a couple of .wav files recorded from your 
virtual mic – one with the recording volume set at 0 dB, and one set at +30 dB? 
From: alexander ivash
Sent: Friday, August 12, 2016 11:50 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AVStream virtual mic: why could external application 
'reset' volume level to 100%? Q1: what is the application in question? I 
suspect the application is either pegging the volume control at max, or is 
gradually turning up the volume in an attempt to get the signal to use as many 
bits as possible without clipping. The application is... Counter-Strike: Global 
Offense :)And I think it is really doing something special, because I didn't 
observe such behavior with other apps. But still not clear, why real mic driver 
is not affected by it. Q2: Can you share the min and max dB for your virtual 
device, and also the min and max dB for the real device?
-96 / +30 - for virtual mic on Win10 +30 / +60 - for real mic on Win10 
Regards, Alexander 
Alexander Ivash <elderorb@xxxxxxxxx> писал(а) в своём письме Fri, 12 Aug 2016 
20:23:55 +0300:


I need to get to *that* environment (will do it in a few hours) to provide you 
with exact numbers, but the issue is that I did nothing with regards to volume 
management in the driver (modified avssamp without video pin), so most likely 
it is using default values (-192 - +30)
2016-08-12 20:13 GMT+03:00 Matthew van Eerde <Matthew.van.Eerde@xxxxxxxxxxxxx>:

Thanks. Q1: what is the application in question? I suspect the application is 
either pegging the volume control at max, or is gradually turning up the volume 
in an attempt to get the signal to use as many bits as possible without 
clipping. If you right-click the volume slider, you should get the option to 
switch between “percent” and “decibels” view. Switch to “decibels” view. Then 
drag the slider all the way to the left and right to get the min and max. Q2: 
Can you share the min and max dB for your virtual device, and also the min and 
max dB for the real device? The min and max for your virtual device hopefully 
come from this 
table:https://msdn.microsoft.com/en-us/library/windows/hardware/ff536251(v=vs.85).aspx
 The min and max for the real device come from the High Definition audio class 
driver, which in turn gets them from the amplifier properties as exposed by the 
hardware. From: Alexander Ivash
Sent: Friday, August 12, 2016 9:58 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AVStream virtual mic: why could external application 
'reset' volume level to 100%? Sure! It is from different environment but it 
looks absolutely in the same way. 

2016-08-12 19:35 GMT+03:00 Matthew van Eerde <Matthew.van.Eerde@xxxxxxxxxxxxx>:

Can you send a screenshot of the mixer? From: Alexander Ivash
Sent: Friday, August 12, 2016 9:33 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AVStream virtual mic: why could external application 
'reset' volume level to 100%? The issue I'm fighting is that some applications 
reset sound volume to
100% during startup. Let say I open application, specify 50% of
volume, apply changes, check windows mixer - still 50%. Close
application - windows mixer still 50%. Open application again - mixer
is 100%. This doesn't happen with real microphones, only with my
virtual and that's the issue.

2016-08-12 19:22 GMT+03:00 Matthew van Eerde <Matthew.van.Eerde@xxxxxxxxxxxxx>:

Let’s back up a level.



What are you attempting to accomplish?



Right now you have no KSNODETYPE_VOLUME in your signal path, so Windows is
inserting a volume APO above you. Are you OK with that? If so, you don’t
need to do anything.



If you are not OK with that, why not? What is the behavior you’re seeing
that you don’t like?



From: Alexander Ivash
Sent: Friday, August 12, 2016 9:17 AM


To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AVStream virtual mic: why could external
application 'reset' volume level to 100%?



Thank you Matthew,

I understand what needs to be done from the high-level, but a bit not
sure how to achieve it. As I said at the moment I have two pins in
descriptor table (two pin factories, correct?) - one is 'bridged
input' or 'fake mic' in your diagram, right? Another one is 'real
output'. At the moment topology between them is senseless because the
data is coming directly to output pin so no matter what I will
introduce between these two pins - it will not have any influence on
the volume.

What I need is to send the data to 'fake' mic, introduce volume node
between 'fake' mic and 'real' output and that's it. But the issue is
that 'fake' mic - is bridged pin. Can I send the data to it? Can I
attach automation table it it? Based on my understanding 'bridged' is
not real pin, should I convert it not bridged, but still
'KSPIN_DATAFLOW_IN', 'KSNODETYPE_MICROPHONE' ?

Regards, Alexander

2016-08-12 18:46 GMT+03:00 Matthew van Eerde
<Matthew.van.Eerde@xxxxxxxxxxxxx>:
If you want Windows (and apps) to manipulate the volume by talking to your
driver, you need to update your topology to have a KSNODETYPE_VOLUME node
which supports the KSPROPERTY_AUDIO_VOLUMELEVEL property.



The simplest such topology looks like this:



Microphone pin factory --> volume node --> streaming pin factory



The microphone factory represents the connection to the (fake) physical
microphone. Windows will use the KSPIN_DESCRIPTOR.Category field to decide
whether this is a microphone, a line in, etc.



The streaming pin factory represents the connection to Windows. Windows
will
query format support on this pin factory, call KsCreatePin here, and
submit
streaming IRPs.



Things in between (nodes) represent stuff that happens between the (fake)
physical microphone and Windows. Volume is one such thing. You could also
stick a mute node here, an automatic gain control, or all kinds of other
things.



From: Alexander Ivash
Sent: Friday, August 12, 2016 4:59 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AVStream virtual mic: why could external
application 'reset' volume level to 100%?



Based on msdn, there is no such a node like
'KSPROPERTY_AUDIO_VOLUMELEVEL', did you mean
'KSPROPERTY_AUDIO_VOLUMELEVEL' property for 'KSNODETYPE_VOLUME' node?
If yes, do I understand correctly that I have to specify such a node,
adjust topology to make data flow through this node and implement
handler for 'KSPROPERTY_AUDIO_VOLUMELEVEL' ?

If all the above is true, I'n not sure how to achieve it with my
current structure / topology..

At the moment my filter has one input pin and one output, input pin is
not used, it is declared as 'bridged' just to make sysaudio happy and
allow driver to be visible as a mic. The actual data is being inside
'Process' function of output pin.

And topology is as simple as the following:

const
KSNODE_DESCRIPTOR AudioNodes[] =
{
DEFINE_NODE_DESCRIPTOR(NULL, &KSNODETYPE_ADC, NULL),
};

const
KSTOPOLOGY_CONNECTION AudioConnections[] =
{ //--FromNode-------FromPin----ToNode---------ToPin
{ KSFILTER_NODE,    1,      0,              0 },
{ 0,                1,      KSFILTER_NODE,  0 }
};

Pin 0 - is real output pin
Pin 1 - is not used bridged pin

Not sure what is the right place to insert 'KSNODETYPE_VOLUME' node
into such a topology... I feel like I should introduce additional
'real' input PIN (or just changed 'bridged' to real), move population
of data from 'output' to 'input' and introduce 'KSNODETYPE_VOLUME' in
between 'output' and 'input'. Does it makes any sense? Or I can just
implement 'KSPROPERTY_AUDIO_VOLUMELEVEL' for my output pin? Based on
my understanding it will not help because docs say:

'The KSPROPERTY_AUDIO_VOLUMELEVEL property specifies the volume level
of a channel in a volume node (KSNODETYPE_VOLUME)'

... but hopefully I'm wrong..

2016-08-12 1:19 GMT+03:00 Matthew van Eerde
<Matthew.van.Eerde@xxxxxxxxxxxxx>:
Windows offers an API to applications to change the endpoint volume.



If the driver offers a KSPROPERTY_AUDIO_VOLUMELEVEL node, the API will be
connected to this node.



If the driver does not, Windows will insert a software volume APO.





https://msdn.microsoft.com/en-us/library/windows/hardware/ff536251(v=vs.85).aspx



From: Alexander Ivash
Sent: Thursday, August 11, 2016 3:18 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] AVStream virtual mic: why could external
application
'reset' volume level to 100%?



For some reasons it happens with virtual mic, but everything looks
fine with real one, what could be the difference?

Another observation, real mic's volume level changes from "+40dB" to
"+60dB" in Win10, while virtual mic changes from "0" to "100". Is it
because I didn't specify 'volume' node in topology or something like
this?

Regards, Alexander
******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:
mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/









-- Написано с помощью почтового клиента Opera: http://www.opera.com/mail/



-- Написано с помощью почтового клиента Opera: http://www.opera.com/mail/


-- Написано с помощью почтового клиента Opera: http://www.opera.com/mail/

  

PNG image

Other related posts: