CSCore Application Audio Mixer Имя + Пик
Я пытаюсь получить пик (уровень зеленой полосы в аудио микшере win7) для processID, например, 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
На данный момент это выглядит так:
1 ответ
Решение
Вы можете изменить свой код на что-то вроде этого (также посмотрите на модульные тесты 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;
}
}
}
}