Mengontrol Volume Aplikasi & VU Meter

Saya menggunakan NAudio untuk perangkat lunak perekaman layar yang saya rancang dan saya perlu tahu apakah mungkin untuk tidak hanya mengontrol volume aplikasi tertentu tetapi juga menampilkan VU Meter untuk suara aplikasi.

Saya sudah mencari di Google di mana-mana dan sepertinya saya hanya bisa mendapatkan VU Meter untuk perangkat yang saat ini ada di komputer saya dan mengatur volume untuk perangkat tersebut.

Meskipun saya menggunakan NAudio, saya terbuka untuk solusi lain.


person Asix Jin    schedule 19.11.2015    source sumber


Jawaban (1)


Saya menanyakan pertanyaan lebih detail setelah pertanyaan ini. Saya telah menemukan jawabannya, jadi saya akan meninggalkan jawabannya di sini bagi mereka yang menemukannya. Mencoba menggunakan NAudio & CSCore membuat saya cukup familiar, jadi silakan bertanya jika Anda memerlukan bantuan lebih lanjut.

Blok kode ini menggunakan CSCore dan merupakan versi jawaban yang dimodifikasi dan dikomentari yang ditemukan di sini:Mendapatkan tingkat keluaran volume terkini aplikasi windows individual seperti yang divisualisasikan dalam Mixer audio

class PeakClass
{
    static int CurrentProcessID = 0000;

    private static void Main(string[] args)
    {
        //Basically gets your default audio device and session attached to it
        using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
        {
            using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
            {
                //This will go through a list of all processes uses the device
                //the code got two line above.
                foreach (var session in sessionEnumerator)
                {
                    //This block of code will get the peak value(value needed for VU Meter)
                    //For whatever process you need it for (I believe you can also check by name
                    //but I found that less reliable)
                    using (var session2 = session.QueryInterface<AudioSessionControl2>())
                    {
                        if(session2.ProcessID == CurrentProcessID)
                        {
                            using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                            {
                                Console.WriteLine(audioMeterInformation.GetPeakValue());
                            }
                        }
                    }

                   //Uncomment this block of code if you need the peak values 
                   //of all the processes
                   //
                    //using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                    //{
                    //    Console.WriteLine(audioMeterInformation.GetPeakValue());
                    //}
                }
            }
        }
    }

    private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow)
    {
        using (var enumerator = new MMDeviceEnumerator())
        {
            using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia))
            {
                Console.WriteLine("DefaultDevice: " + device.FriendlyName);
                var sessionManager = AudioSessionManager2.FromMMDevice(device);
                return sessionManager;
            }
        }
    }
} 

Blok kode berikut memungkinkan Anda mengubah volume perangkat menggunakan NAudio

MMDevice VUDevice;

public void SetVolume(float vol)
    {
        if(vol > 0)
        {
            VUDevice.AudioEndpointVolume.Mute = false;
            VUDevice.AudioEndpointVolume.MasterVolumeLevelScalar = vol;
        }
        else
        {
            VUDevice.AudioEndpointVolume.Mute = true;
        }
        Console.WriteLine(vol);
    }

Saya memiliki kode dari dua perpustakaan berbeda hanya untuk menjawab pertanyaan yang saya posting secara langsung yaitu bagaimana cara mengatur volume dan mendapatkan nilai VU Meter (nilai puncak). CSCore dan NAudio sangat mirip sehingga sebagian besar kode di sini dapat dipertukarkan.

person Asix Jin    schedule 16.12.2015