CSCore Application Audio Mixer Имя + Пик

1

я пытаюсь получить пик (уровень зеленой полосы в аудиомиксере win7) идентификатора процесса, например 5640 - Spotify.

Поиск в Интернете для хорошей библиотеки. Я нашел CSCore.

Теперь у меня есть следующее:

class Program
{
    static void Main(string[] args)
    {
        using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
        {
            using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
            {
                foreach (var session in sessionEnumerator)
                {
                    using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                    {
                        Console.WriteLine(audioMeterInformation.GetPeakValue()*100);
                    }

                }
            }
        }

        Console.ReadKey();
    }

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

}
}

Документация http://cscore.codeplex.com/ не помогла мне. Может ли кто-нибудь дать мне пример с моим кодом, как я могу получить такой вывод:

58,31232 --- идентификатор процесса --- Spotify

В момент Момент выглядит так:

Изображение 174551

Теги:
audio
wpf
cscore

1 ответ

2
Лучший ответ

Вы можете изменить свой код на что-то вроде этого (также взгляните на блок-тесты cscore):

class Program
{
    static void Main(string[] args)
    {
        using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
        using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
        {
            foreach (var session in sessionEnumerator)
            {
                Assert.IsNotNull(session);

                using (var session2 = session.QueryInterface<AudioSessionControl2>())
                using (var audioMeterInformation = session.QueryInterface<AudioMeterInformation>())
                {   
                    Debug.WriteLine("Process: {0}; Peak: {1:P}", 
                        session2.Process == null ? String.Empty : session2.Process.MainWindowTitle,
                        audioMeterInformation.GetPeakValue()*100);
                }
            }
        }

        Console.ReadKey();
    }

    private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow)
    {
        using (var enumerator = new MMDeviceEnumerator())
        {
            using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia))
            {
                Debug.WriteLine("DefaultDevice: " + device.FriendlyName);
                var sessionManager = AudioSessionManager2.FromMMDevice(device);
                return sessionManager;
            }
        }
    }
}
  • 0
    Ну, что ж, спасибо! Но sessionEnumerator не известен в вашем коде. И если я добавлю его, Assert.IsNotNull не сможет получить доступ из-за уровня безопасности. Вы можете исправить свой код, пожалуйста?
  • 0
    Я изменил свой код ... но если вы посмотрите на свой вопрос, вы увидите, что вы уже сделали все необходимое. Я просто забыл скопировать одну строку вашего кода: using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню