/// <summary> /// Try to assign automatically player 1 and 2 to usb-mics. /// </summary> public static bool AutoAssignMics() { //Look for (usb-)mic //SRecordDevice[] Devices = new SRecordDevice[CSound.RecordGetDevices().Length]; SRecordDevice[] Devices = CSound.RecordGetDevices(); if (Devices == null) { return(false); } for (int dev = 0; dev < Devices.Length; dev++) { //Has Device some signal-names in name -> This could be a (usb-)mic if (Regex.IsMatch(Devices[dev].Name, @"Usb|Wireless", RegexOptions.IgnoreCase)) { //Check if there are inputs. if (Devices[dev].Inputs.Count >= 1) { //Check if there is one or more channels if (Devices[dev].Inputs[0].Channels >= 2) { //Set this device to player 1 MicConfig[0].DeviceName = Devices[dev].Name; MicConfig[0].DeviceDriver = Devices[dev].Driver; MicConfig[0].InputName = Devices[dev].Inputs[0].Name; MicConfig[0].Channel = 1; //Set this device to player 2 MicConfig[1].DeviceName = Devices[dev].Name; MicConfig[1].DeviceDriver = Devices[dev].Driver; MicConfig[1].InputName = Devices[dev].Inputs[0].Name; MicConfig[1].Channel = 2; return(true); } } } } //If no usb-mics found -> Look for Devices with "mic" or "mik" for (int dev = 0; dev < Devices.Length; dev++) { //Has Device some signal-names in name -> This could be a mic if (Regex.IsMatch(Devices[dev].Name, @"Mic|Mik", RegexOptions.IgnoreCase)) { //Check if there are inputs. if (Devices[dev].Inputs.Count >= 1) { bool micfound = false; //Check if there is one or more channels if (Devices[dev].Inputs[0].Channels >= 1) { //Set this device to player 1 MicConfig[0].DeviceName = Devices[dev].Name; MicConfig[0].DeviceDriver = Devices[dev].Driver; MicConfig[0].InputName = Devices[dev].Inputs[0].Name; MicConfig[0].Channel = 1; micfound = true; } if (Devices[dev].Inputs[0].Channels >= 2) { //Set this device to player 2 MicConfig[1].DeviceName = Devices[dev].Name; MicConfig[1].DeviceDriver = Devices[dev].Driver; MicConfig[1].InputName = Devices[dev].Inputs[0].Name; MicConfig[1].Channel = 2; micfound = true; } if (micfound) { return(true); } } } } return(false); }
public static void UpdatePoints(float Time) { bool DEBUG_HIT = false; CSong song = _GameMode.GetSong(); if (song == null) { return; } _Beat = GetBeatFromTime(Time, song.BPM, song.Gap); _CurrentBeat = (int)Math.Floor(_Beat); _MidBeatD = -0.5f + GetBeatFromTime(Time, song.BPM, song.Gap + CConfig.MicDelay / 1000f); _CurrentBeatD = (int)Math.Floor(_MidBeatD); for (int p = 0; p < _NumPlayer; p++) { CSound.AnalyzeBuffer(p); } if (_OldBeatD == _CurrentBeatD) { return; } for (int p = 0; p < _NumPlayer; p++) { for (int beat = _OldBeatD + 1; beat <= _CurrentBeatD; beat++) { CLine[] lines = song.Notes.GetLines(_Player[p].LineNr).Line; int Line = -1; for (int j = 0; j < lines.Length; j++) { if (beat >= lines[j].StartBeat && beat <= lines[j].EndBeat) { Line = j; break; } } if (Line >= 0) { if (Line != _Player[p].CurrentLine) { _Player[p].CurrentNote = -1; } _Player[p].CurrentLine = Line; while (_Player[p].SingLine.Count <= Line) { _Player[p].SingLine.Add(new CLine()); } CNote[] notes = lines[Line].Notes; int Note = -1; for (int j = 0; j < notes.Length; j++) { if (beat >= notes[j].StartBeat && beat <= notes[j].EndBeat) { Note = j; break; } } if (Note >= 0) { _Player[p].CurrentNote = Note; if (Line == lines.Length - 1) { if (Note == lines[Line].NoteCount - 1) { if (notes[Note].EndBeat == beat) { _Player[p].SongFinished = true; } } } if (notes[Note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT)) { int Tone = notes[Note].Tone; int TonePlayer = CSound.RecordGetTone(p); while (TonePlayer - Tone > 6) { TonePlayer -= 12; } while (TonePlayer - Tone < -6) { TonePlayer += 12; } if (DEBUG_HIT) { TonePlayer = Tone; } _Player[p].NoteDiff = Math.Abs(Tone - TonePlayer); if (_Player[p].NoteDiff <= (2 - (int)_Player[p].Difficulty)) { // valid CSound.RecordSetTone(p, Tone); _Player[p].Points += (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[Note].PointsForBeat / (double)song.Notes.GetLines(_Player[p].LineNr).Points; // update player notes (sung notes) if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (notes[Note].StartBeat == beat || nt.EndBeat + 1 != beat || nt.Tone != Tone) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } else { _Player[p].SingLine[Line].IncLastNoteLength(); } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } _Player[p].SingLine[Line].LastNote.IsPerfect(notes[Note]); _Player[p].SingLine[Line].IsPerfect(lines[Line]); if (_Player[p].SingLine[Line].PerfectLine) { _Player[p].Points += CSettings.LinebonusScore * (double)lines[Line].Points / (double)song.Notes.GetPoints(_Player[p].LineNr); } } else { if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (nt.EndBeat + 1 != beat || nt.Hit) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } else { if (nt.Tone == TonePlayer && nt.EndBeat + 1 == beat) { _Player[p].SingLine[Line].IncLastNoteLength(); } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } } } } } } } _OldBeatD = _CurrentBeatD; }