CSCore: Как я могу изменить аудио процесса в режиме реального времени - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь построить эквалайзер для каждого процесса в C#, используя библиотеку CSCore. Так что в основном это расширенный микшер громкости. Моя проблема в том, что я не могу найти способ получить аудиопоток. Я могу получить IWaveSource на основе процесса, но не фактического вывода.

Вот мой текущий код:

private Equalizer eq;
private ISoundOut soundOut;
private IWaveSource waveSource;

private void Test()
{
using (var enumerator = new MMDeviceEnumerator())
{
    foreach (MMDevice device in enumerator.EnumAudioEndpoints(DataFlow.All, DeviceState.Active))
    {
        Console.WriteLine(device.FriendlyName);
        using (var sessionManager = AudioSessionManager2.FromMMDevice(device))
        {
            using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
            {
                foreach (var session in sessionEnumerator)
                {
                    using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                    using (var session2 = session.QueryInterface<AudioSessionControl2>())
                    {
                        Console.WriteLine("Peak:" + audioMeterInformation.GetPeakValue());
                        Console.WriteLine(session2.ProcessID);
                        Console.WriteLine(session2.Process.ProcessName);
                        try
                        {
                            Console.WriteLine(session2.Process.MainWindowTitle);
                            waveSource = CodecFactory.Instance.GetCodec(session2.Process.MainModule.FileName);

                            if (session2.Process.ProcessName == "Spotify")
                            {
                                eq = Equalizer.Create10BandEqualizer(waveSource.ToSampleSource());
                                foreach (EqualizerFilter filter in eq.SampleFilters)
                                {
                                    filter.AverageGainDB = 10;
                                }

                                soundOut = new DirectSoundOut(1000);
                                soundOut.Initialize(eq.ToWaveSource(16));
                                soundOut.Volume = 1.0f;
                                soundOut.Play();
                            }
                        }
                        catch
                        {
                        }
                    }
                }
            }
        }
    }
}
}

Это в основном весь код программы. Как только я начал заниматься программированием, это все, что у меня есть, кроме конструктора.

Сначала я хотел проверить, смогу ли я получить базовое c аудио воспроизведение Spotify, но это тот момент, когда я получил застрял.

Если вы знаете надлежащую документацию для библиотеки CSCore, я был бы благодарен, если бы вы поделились ссылкой на нее. В противном случае заранее спасибо.

...