Software zum "manuellen" Spielen von Buzz-Spielen

Ich habe 2 Playstation Buzz! USB-Controller, sodass 8 Personen parallel teilnehmen können. Ich weiß auch, dass diese Summer an den PC angeschlossen werden können.

Anwendungsfall: Ich mache Schulungen für alle möglichen Dinge (Wireshark, Debugging, ...) Nach einer Unterrichtsstunde möchte ich mit den Teilnehmern ein Quiz durchführen. Die Teilnehmer können kleine Dinge gewinnen, zB Süßigkeiten. Früher habe ich alles manuell gemacht, aber manchmal kam es zu Diskussionen, wer als erster die Antwort lieferte. Da alle Schulungen sehr technisch sind, dachte ich, dass die Verwendung der Buzzer ein nettes Gimmick wäre.

Ich suche jetzt nach einer Software, die

  • läuft auf Windows 7 x64 und Windows 10
  • erkennt alle Controller (unterstützt mindestens 2)
  • erlaubt dem Moderator eine Frage zu stellen (Buzzer bereit machen)
  • findet die erste Person heraus, die den Summer drückt
  • einen Ton abspielen, wenn der erste Summer gedrückt wurde
  • stoppt die Frage (setzt Summer in die Warteschleife)
  • hebt den Summer der Person hervor, die zuerst gedrückt hat (rotes Licht)

Das ist es schon. Die restlichen 4 Buttons benötige ich nicht, da die Beantwortung der Frage von mir übernommen wird.

Ich kenne Buzzmania , aber das ist schon zu automatisiert und ich möchte keine Fragen im Voraus generieren. Ich konnte Du kennst JackBuzz nicht zum Laufen bringen .

Antworten (1)

Wow, ich hätte nicht gedacht, dass es so einfach wird. Mit dem BuzzIO Nuget-Paket für .NET habe ich alles in 45 Minuten zum Laufen gebracht.

Hier ist eine minimale Anwendung ohne jegliches objektorientiertes Design.

using System;
using System.Collections.Generic;
using System.Linq;
using BuzzIO;

namespace BuzzExample
{
    class Program
    {
        private static IEnumerable<IBuzzHandsetDevice> _handsets;

        static void Main()
        {
            _handsets = new BuzzHandsetFinder().FindHandsets();
            foreach (var handset in _handsets)
            {
                handset.SetLights(true, true, true, true);
                handset.ButtonChanged += HandsetOnButtonChanged;
            }

            Console.WriteLine("Press Enter to end");
            Console.ReadLine();
        }

        private static void HandsetOnButtonChanged(object sender, BuzzButtonChangedEventArgs args)
        {
            for (int i = 0; i < args.Buttons.Length; i++)
            {
                Console.Write($"{i}: ");
                if (!args.Buttons[i].Any) Console.Write("None");
                if (args.Buttons[i].Blue) Console.Write("Blue ");
                if (args.Buttons[i].Green) Console.Write("Green ");
                if (args.Buttons[i].Yellow) Console.Write("Yellow ");
                if (args.Buttons[i].Orange) Console.Write("Orange ");
                if (args.Buttons[i].Red) Console.Write("Buzzer ");
                Console.WriteLine();
            }
            Console.WriteLine();

            var lights = new bool[4];
            for (int i = 0; i < args.Buttons.Length; i++)
            {
                lights[i] = args.Buttons[i].Any;
            }
            _handsets.First().SetLights(lights[0], lights[1], lights[2], lights[3]);
        }
    }
}

Hinweis für Windows 10: Der Controller ist möglicherweise als "HID-kompatibler Gamecontroller" installiert. In diesem Fall findet die Bibliothek die angeschlossenen Controller möglicherweise nicht. Um das zu beheben, gehen Sie zum Geräte-Manager und stellen Sie den Treiber auf „HID-kompatibles Gerät“ um. Meine hat die Hersteller-ID (VID) 054C für Sony und die Produkt-ID (PID) 1000.

Für den Buzzer-Sound habe ich Audacity verwendet und den folgenden Sound generiert

  • Tongenerator 2
  • Wellenform: Sägezahn
  • Frequenz: 300 bis 200 Hz
  • Amplitude: 0,8 bis 0,8
  • Interpolation: linear
  • Dauer: 0,2 Sekunden

Zum Abspielen von Sound können Sie eine eingebettete Ressource und einen SoundPlayer verwenden:

 // Playing sound from embedded resource
 Stream buzzerStream = Resource.buzz;
 buzzPlayer = new SoundPlayer(buzzerStream);
 ...
 buzzPlayer.Play();