Öncelikle, daha önce gönderildiği gibi birkaç soru olduğunu biliyorum; Ancak, , sorunu yeterince ele almıyorlar. Ben waveXXX API ile konuşmak için tüm pInvoke kancaları ile bir C# uygulaması var ve bu ile ses yakalamak ve oynamak mümkün. Ayrıca, bu API ile hoparlör (WaveOut) ses düzeyini ayarlayabiliyorum.
Sorun, nedeni ne olursa olsun, bu API'nin mikrofon (WaveIn) birimini ayarlamasına izin vermez. Bu yüzden çektiğim mikser kodunu ve pInvoke üzerinden erişimini bulmayı başardım ve bu da mikrofonun ses seviyesini ayarlamamı sağladı, ancak sadece W7 PC'mde. Başladığım mikser kodu buradan gelir: http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/05dc2d35-1d45-4837-8e16-562ee919da85 ve çalışır, ancak hoparlör sesini ayarlamak için yazılmıştır. Ben SetMicVolume yöntemi Burada gösterilen ...C# 'dan mikrofon kazanımı nasıl ayarlanır (XP ve W7 üzerinde çalışılması gerekir)
public static void SetMicVolume(int mxid, int percentage)
{
bool rc;
int mixer, vVolume;
MIXERCONTROL volCtrl = new MIXERCONTROL();
int currentVol;
mixerOpen(out mixer, mxid, 0, 0, MIXER_OBJECTF_WAVEIN);
int type = MIXERCONTROL_CONTROLTYPE_VOLUME;
rc = GetVolumeControl(mixer, MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, type, out volCtrl, out currentVol);
if (rc == false)
{
mixerClose(mixer);
mixerOpen(out mixer, 0, 0, 0, 0);
rc = GetVolumeControl(mixer, MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, type, out volCtrl, out currentVol);
if (rc == false)
throw new Exception("SetMicVolume/GetVolumeControl() failed");
}
vVolume = ((int)((float)(volCtrl.lMaximum - volCtrl.lMinimum)/100.0F) * percentage);
rc = SetVolumeControl(mixer, volCtrl, vVolume);
if (rc == false)
throw new Exception("SetMicVolume/SetVolumeControl() failed");
mixerClose(mixer);
}
Not() GetVolumeControl çağırmak için "ikinci girişim" ekledi. Bu, XP'de, GetVolumeControl'ün ilk çağrısında (bu kod için yukarıdaki siteye bakın) yapıldığı için yapılır, mixerGetLineControlsA() çağrısı MIXERR_INVALCONTROL döndüren XP sistemleriyle başarısız olur. Daha sonra, mixerOpen (out mikser, 0, 0, 0, 0) kullanarak bu ikinci denemede, kod bir hata döndürmez ancak mikrofon kazancı etkilenmez. Not, yukarıda söylediğim gibi, bu W7 üzerinde çalışır (ikinci girişim hiçbir zaman çalıştırılmaz çünkü mixerOpen kullanarak (mikser, mxid, 0, 0, MIXER_OBJECTF_WAVEIN) başarısız olur.
Mikser API'sı üzerinde iyi bir kavrayış olmadığını kabul ediyorum; Ancak, bunun neden W7 üzerinde çalışacağına dair bir ipucu varsa, ama XP değil, bunu duymak isterim. Bu arada, ben bir yanıt almak önce ben anlamaya varsa, ben kendi cevap yazacağım ben ...
Bu işlemin başarısız olduğu bir XP makinesine sahip olduğumu unutmayın, bu yüzden hala mükemmel değil ... –
Kodunuzda int mxid nedir? Nasıl alınır? –