public static void MainHandler() { VolumeMaster master = new VolumeMaster(); bool done = false; foreach (AudioSession session in master.Sessions) { if (session.Process != null) { Console.WriteLine("ProcessName: " + session.Process.ProcessName); Console.WriteLine("AudioSession IconPath: " + session.IconPath); Icon icon = session.GetIcon32x32(); } Console.WriteLine("DisplayName: " + session.DisplayName); Console.WriteLine("Volume: " + session.Volume); Console.WriteLine("Muted: " + session.Mute); Console.WriteLine("State: " + session.State.ToString()); Console.WriteLine("AudioSession IconPath: " + session.IconPath); Console.WriteLine(); //session.Volume = 100; } Console.WriteLine(" "); Console.WriteLine(" "); Console.WriteLine(" "); Console.WriteLine(" "); Console.WriteLine("begin coreaudio testing"); Console.WriteLine(master.MasterVolumeLevel.ToString()); master.MasterVolumeLevel = 35; Console.WriteLine(master.MasterVolumeLevel.ToString()); Console.ReadLine(); }
//-------------------------------------------------- //IMAGES START (do przerobienia) //-------------------------------------------------- //public void SendImageXOR() //{ // queueXOR = new BlockingCollection<byte[]>(); // stillSend = true; // Console.WriteLine("send image xor"); // imageXORThreadSend = new Thread(() => SendImageXOR_T()); // imageXORThreadSend.Start(); //} //public void StopImageXOR() //{ // stillSend = false; // if (imageXORThreadSend != null) // { // imageXORThreadSend.Abort(); // } // if (imageXORThreadRec != null) // { // imageXORThreadRec.Abort(); // } //} //private void SendImageXOR_T() //{ // Console.WriteLine("send image xor T"); // TcpClient imageClient = new TcpClient(); // IPAddress ownIPAddress = GetLocalIPAddress(); // TcpListener imageListener = new TcpListener(ownIPAddress, imageXORPort); // imageListener.Start(); // writer.Write("i"); // Console.WriteLine("listening for connection reply"); // writer.Write(ownIPAddress.ToString()); // imageClient = imageListener.AcceptTcpClient(); // imageListener.Stop(); // BinaryWriter imageWriter = new BinaryWriter(imageClient.GetStream()); // while (stillSend == true) // { // byte[] data = null; // try // { // data = queueXOR.Take(); // } // catch (InvalidOperationException) { } // if (data != null) // { // int datasize = data.Length; // imageWriter.Write(datasize.ToString()); // imageWriter.Write(data, 0, datasize); // } // } //} //private void ReceiveImageXOR(string _targetIPAddress) //{ // TcpClient imageClient = new TcpClient(); // imageClient.Connect(IPAddress.Parse(_targetIPAddress), imageXORPort); // Console.WriteLine("connected image"); // BinaryReader imageReader = new BinaryReader(imageClient.GetStream()); // stillSend = true; // int datasize; // while (stillSend == true) // { // datasize = int.Parse(imageReader.ReadString()); // byte[] data = new byte[datasize]; // data = imageReader.ReadBytes(datasize); // Console.WriteLine("image got " + data.Length.ToString()); // //function_PassByteArrayTo(data); // } //} //-------------------------------------------------- //IMAGES END //-------------------------------------------------- //-------------------------------------------------- //VOLUME START //-------------------------------------------------- private void InstantiateVolumeServer() //uruchomienie VolumeMastera na PC { volumeMaster = new VolumeMaster(); List <string> list = new List <string>(); //lista z nazwami procesow. uzywana do unikania duplikowania juz istniejacych sesji Icon icon; //ikona do wyslana; Bitmap bitmap; //bitmapa ikony byte[] bitmapBytes; MemoryStream ms; writer.Write((int)ClientFlags.Volume_ServerReady); //flaga oznaczajaca gotowosc do wysylania writer.Write(volumeMaster.MasterVolumeLevel.ToString()); //najpierw wysyla gloscnosc systemu. klient wie, ze to jest glosnosc systemowa i //nie potrzebuje reszty danych icon = SystemIcons.Shield; ms = new MemoryStream(); bitmap = icon.ToBitmap(); bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); //wysylanie ikonki systemowej. placeholder, wlasciwa ikonak bedzie juz na androidzie bitmapBytes = ms.ToArray(); writer.Write(bitmapBytes.Length); writer.Write(bitmapBytes, 0, bitmapBytes.Length); writer.Write(volumeMaster.Sessions.Count.ToString()); //wysyla ilosc sesji NA PC. Ilosc sesji jakie zaakceptuje android bedzie inna. for (int i = 0; i < volumeMaster.Sessions.Count; i++) //po wszystkich sesjach { string displayName; string processName; string mute; string volume; string processID; //jesli istnieje displayname procesu. niektore procesy nie maja swojego displayname if (volumeMaster.Sessions[i].DisplayName != null && volumeMaster.Sessions[i].DisplayName != "") { displayName = volumeMaster.Sessions[i].DisplayName; //writer.Write(volumeMaster.Sessions[i].DisplayName); } else { displayName = "null"; } //jesli istnieje proces. uslugi systemu nie musza miec instancji procesu aby korzystac z audioapi. jednak wiekszosc sesji ma swoj proces. if (volumeMaster.Sessions[i].Process != null) { processName = volumeMaster.Sessions[i].Process.ProcessName; processID = volumeMaster.Sessions[i].Process.Id.ToString(); //writer.Write(volumeMaster.Sessions[i].Process.ProcessName); } else { processName = "null"; processID = "0"; } //mutestatus - czy sesja jest zmutowana mute = volumeMaster.Sessions[i].Mute.ToString(); //volume volume = volumeMaster.Sessions[i].Volume.ToString(); //poniewaz android nie wie ile PC bedzie wysylal sesji, wie tylko ile bedzie maksymalnie wysylal, wysyla sie tag skip gdy sesja jest pomijana //new lub skip //PC nie wysyla duplikatów sesji. jest to zwiazane z tym, ze jeden program moze miec wiele wywolan audioapi. sesje sa grupowane po processname if (!list.Contains(processName) || processName == "null") { list.Add(processName); writer.Write("new"); writer.Write(displayName); writer.Write(processName); writer.Write(mute); writer.Write(volume); writer.Write(processID); ms = new MemoryStream(); icon = volumeMaster.Sessions[i].GetIcon32x32(); bitmap = icon.ToBitmap(); bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); bitmapBytes = ms.ToArray(); writer.Write(bitmapBytes.Length); writer.Write(bitmapBytes, 0, bitmapBytes.Length); } else { writer.Write("skip"); } } }
private void InstantiateVolumeServer() //uruchomienie VolumeMastera na PC { volumeMaster = new VolumeMaster(); writer.Write("vIS"); //flaga oznaczajaca gotowosc do wysylania writer.Write(volumeMaster.Sessions.Count.ToString()); //wysyla ilosc sesji NA PC. Ilosc sesji jakie zaakceptuje android bedzie inna. List <string> list = new List <string>(); //lista z nazwami procesow. uzywana do unikania duplikowania juz istniejacych sesji for (int i = 0; i < volumeMaster.Sessions.Count; i++) //po wszystkich sesjach { string displayName; string processName; string mute; string volume; string processID; //jesli istnieje displayname procesu. niektore procesy nie maja swojego displayname if (volumeMaster.Sessions[i].DisplayName != null && volumeMaster.Sessions[i].DisplayName != "") { displayName = volumeMaster.Sessions[i].DisplayName; //writer.Write(volumeMaster.Sessions[i].DisplayName); } else { displayName = "null"; } //jesli istnieje proces. uslugi systemu nie musza miec instancji procesu aby korzystac z audioapi. jednak wiekszosc sesji ma swoj proces. if (volumeMaster.Sessions[i].Process != null) { processName = volumeMaster.Sessions[i].Process.ProcessName; processID = volumeMaster.Sessions[i].Process.Id.ToString(); //writer.Write(volumeMaster.Sessions[i].Process.ProcessName); } else { processName = "null"; processID = "0"; } //mutestatus - czy sesja jest zmutowana mute = volumeMaster.Sessions[i].Mute.ToString(); //volume volume = volumeMaster.Sessions[i].Volume.ToString(); //poniewaz android nie wie ile PC bedzie wysylal sesji, wie tylko ile bedzie maksymalnie wysylal, wysyla sie tag skip gdy sesja jest pomijana //new lub skip //PC nie wysyla duplikatów sesji. jest to zwiazane z tym, ze jeden program moze miec wiele wywolan audioapi. sesje sa grupowane po processname if (!list.Contains(processName) || processName == "null") { list.Add(processName); writer.Write("new"); writer.Write(displayName); writer.Write(processName); writer.Write(mute); writer.Write(volume); writer.Write(processID); } else { writer.Write("skip"); } } }