From 3f4a2fbb817a8abd11ce20561ceb6f9407576bf3 Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sun, 6 Mar 2016 12:28:47 +0100 Subject: [PATCH 01/44] Add support for multichannel recording Support for "unlimited" amount of channels per recording device. Upped ScreenOptionsRecord version and added neccessary lines to be able to configure n channels per device. Added language strings for Player 1-6. Tested on a machine with Tascam US-16x08 audio interface and Singstar Wireless Microphones used simultaneously. --- Output/Languages/English.xml | 8 +- .../Ambient/Screens/ScreenOptionsRecord.xml | 468 ++++++++++++++++-- .../Changelog_ScreenOptionsRecord.txt | 18 +- Vocaluxe/Base/CConfig.cs | 4 +- Vocaluxe/Base/CRecord.cs | 4 +- Vocaluxe/Lib/Sound/Record/CRecordBase.cs | 38 +- .../Record/DirectSound/CDirectSoundRecord.cs | 10 +- Vocaluxe/Lib/Sound/Record/IRecord.cs | 8 +- .../Record/PortAudio/CPortAudioRecord.cs | 26 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 234 ++++----- 10 files changed, 595 insertions(+), 223 deletions(-) diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index 8827da1a..4a783eef 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -182,8 +182,12 @@ Record Options Device Input - Channel 1 - Channel 2 + Player 1 + Player 2 + Player 3 + Player 4 + Player 5 + Player 6 Mic Delay Warning: At least one player is assigned to two mics. Delay Test diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml index 95b8464d..c7357bae 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml @@ -91,7 +91,7 @@ 0 - + EnergyBeam @@ -102,7 +102,7 @@ 0 - + EnergyBeam @@ -112,6 +112,50 @@ 16 0 + + + EnergyBeam + + + 390 + 354 + 100 + 16 + 0 + + + + EnergyBeam + + + 390 + 416 + 100 + 16 + 0 + + + + EnergyBeam + + + 390 + 474 + 100 + 16 + 0 + + + + EnergyBeam + + + 390 + 536 + 100 + 16 + 0 + @@ -145,7 +189,7 @@ 75 - 347 + 167 0 27 0 @@ -159,7 +203,7 @@ 640 - 537 + 615 0 27 970 @@ -171,7 +215,7 @@ Outline TR_SCREENORECORD_MIC_WARNING - + 75 227 0 @@ -183,9 +227,9 @@ Center Outline - TR_SCREENORECORD_CHANNEL_1 + TR_SCREENORECORD_PLAYER_1 - + 75 287 0 @@ -197,31 +241,143 @@ Center Outline - TR_SCREENORECORD_CHANNEL_2 - - - 330 - 227 - -1 + TR_SCREENORECORD_PLAYER_2 + + + 75 + 347 + 0 27 0 - Right + Left + Center + + Outline + TR_SCREENORECORD_PLAYER_3 + + + 75 + 407 + 0 + 27 + 0 + + + Left + Center + + Outline + TR_SCREENORECORD_PLAYER_4 + + + 75 + 467 + 0 + 27 + 0 + + + Left + Center + + Outline + TR_SCREENORECORD_PLAYER_5 + + + 75 + 527 + 0 + 27 + 0 + + + Left + Center + + Outline + TR_SCREENORECORD_PLAYER_6 + + + 320 + 227 + -2 + 27 + 100 + + + Center Center Outline - - 330 + + 320 287 - -1 + -2 27 - 0 + 100 - Right + Center + Center + + Outline + + + + 320 + 347 + -2 + 27 + 100 + + + Center + Center + + Outline + + + + 320 + 407 + -2 + 27 + 100 + + + Center + Center + + Outline + + + + 320 + 467 + -2 + 27 + 100 + + + Center + Center + + Outline + + + + 320 + 527 + -2 + 27 + 100 + + + Center Center Outline @@ -268,7 +424,7 @@ Button Button - 355 + 985 600 150 50 @@ -345,7 +501,7 @@ Bold 1 - + SelectSlideArrowLeft SelectSlideArrowRight @@ -387,7 +543,7 @@ Bold 7 - + SelectSlideArrowLeft SelectSlideArrowRight @@ -429,7 +585,7 @@ Bold 7 - + SelectSlideArrowLeft SelectSlideArrowRight @@ -466,6 +622,174 @@ 27 50 0 + 154 + Outline + Bold + 7 + + + + SelectSlideArrowLeft + SelectSlideArrowRight + SelectSlide + SelectSlideArrowLeft + SelectSlideArrowRight + + 500 + 400 + 700 + 50 + 0 + + + 505 + 405 + 40 + 40 + 0 + + + 1170 + 405 + 40 + 40 + 0 + + + + + + + + 27 + 50 + 0 + 154 + Outline + Bold + 7 + + + + SelectSlideArrowLeft + SelectSlideArrowRight + SelectSlide + SelectSlideArrowLeft + SelectSlideArrowRight + + 500 + 460 + 700 + 50 + 0 + + + 505 + 465 + 40 + 40 + 0 + + + 1170 + 465 + 40 + 40 + 0 + + + + + + + + 27 + 50 + 0 + 154 + Outline + Bold + 7 + + + + SelectSlideArrowLeft + SelectSlideArrowRight + SelectSlide + SelectSlideArrowLeft + SelectSlideArrowRight + + 500 + 520 + 700 + 50 + 0 + + + 505 + 525 + 40 + 40 + 0 + + + 1170 + 525 + 40 + 40 + 0 + + + + + + + + 27 + 50 + 0 + 154 + Outline + Bold + 7 + + + + SelectSlideArrowLeft + SelectSlideArrowRight + SelectSlide + SelectSlideArrowLeft + SelectSlideArrowRight + + 500 + 160 + 700 + 50 + 0 + + + 505 + 165 + 40 + 40 + 0 + + + 1170 + 165 + 40 + 40 + 0 + + + + + + + + 27 + 50 + 0 123.2 Outline Bold @@ -475,13 +799,13 @@ - + - 50 - 400 - 230 - 150 + 270 + 220 + 100 + 40 -1 12 @@ -490,18 +814,15 @@ TR_CONFIG_OFF - - 26 - 10 - + - + - 400 - 400 - 230 - 150 + 270 + 280 + 100 + 40 -1 12 @@ -510,10 +831,75 @@ TR_CONFIG_OFF - - 26 - 10 - + + + + + + 270 + 340 + 100 + 40 + -1 + + 12 + 2 + + TR_CONFIG_OFF + + + + + + + + 270 + 400 + 100 + 40 + -1 + + 12 + 2 + + TR_CONFIG_OFF + + + + + + + + 270 + 460 + 100 + 40 + -1 + + 12 + 2 + + TR_CONFIG_OFF + + + + + + + + 270 + 520 + 100 + 40 + -1 + + 12 + 2 + + TR_CONFIG_OFF + + + diff --git a/Output/Themes/Changelog/Changelog_ScreenOptionsRecord.txt b/Output/Themes/Changelog/Changelog_ScreenOptionsRecord.txt index 1eb9f362..b41f8990 100644 --- a/Output/Themes/Changelog/Changelog_ScreenOptionsRecord.txt +++ b/Output/Themes/Changelog/Changelog_ScreenOptionsRecord.txt @@ -9,4 +9,20 @@ This is a new theme-element. Check ScreenOptionsRecord.xml for style-possibiliti ++++++++++ Version 4: Rename Text 3/4 to TextChannel1/2 -Rename Text5 to Text3 \ No newline at end of file +Rename Text5 to Text3 +++++++++++ +Version 5: + +Added: +StaticEnergyPlayer1-6 +TextPlayer1-6 +TextDelayPlayer1-6 +SelectSlideRecordPlayer1-6 +EqualizerPlayer1-6 + +Removed: +StaticEnergyChannel1-2 +TextChannel1-2 +TextDelayChannel1-2 +SelectSlideRecordChannel1-2 +EqualizerChannel1-2 \ No newline at end of file diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index ea133582..b64dd215 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -530,7 +530,7 @@ namespace Vocaluxe.Base if (devices == null) return false; - return devices.Any(t => t.PlayerChannel1 != 0 || t.PlayerChannel2 != 0); + return devices.Any(t => t.PlayerChannel[0] != 0 || t.PlayerChannel[1] != 0); } /// @@ -544,7 +544,7 @@ namespace Vocaluxe.Base if (devices == null) return false; - return devices.Any(t => t.PlayerChannel1 == player || t.PlayerChannel2 == player); + return devices.Any(t => t.PlayerChannel.Contains(player)); } public static int GetMaxNumMics() diff --git a/Vocaluxe/Base/CRecord.cs b/Vocaluxe/Base/CRecord.cs index 8c55f6e8..cd82e459 100644 --- a/Vocaluxe/Base/CRecord.cs +++ b/Vocaluxe/Base/CRecord.cs @@ -126,8 +126,8 @@ namespace Vocaluxe.Base { foreach (CRecordDevice device in devices) { - device.PlayerChannel1 = _GetPlayerFromMicConfig(device.Name, device.Driver, 1); - device.PlayerChannel2 = _GetPlayerFromMicConfig(device.Name, device.Driver, 2); + for(int ch = 0; ch < device.Channels; ++ch) + device.PlayerChannel[ch] = _GetPlayerFromMicConfig(device.Name, device.Driver, ch+1); } return devices; } diff --git a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs index dde798fe..eb8b2391 100644 --- a/Vocaluxe/Lib/Sound/Record/CRecordBase.cs +++ b/Vocaluxe/Lib/Sound/Record/CRecordBase.cs @@ -18,6 +18,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using Vocaluxe.Base; +using System; namespace Vocaluxe.Lib.Sound.Record { @@ -76,32 +77,25 @@ namespace Vocaluxe.Lib.Sound.Record /// Recorded samples, assume Int16 and interleaved for multi-channels protected void _HandleData(CRecordDevice device, byte[] data) { - byte[] leftBuffer; - byte[] rightBuffer; - if (device.Channels == 2) + int totalChannels = device.Channels; + int doubleChannels = totalChannels * 2; + byte[][] allBuffers = new byte[totalChannels][]; + + for (int currChannel = 0; currChannel < totalChannels; ++currChannel) + allBuffers[currChannel] = new byte[data.Length / totalChannels]; + + for (int i = 0; i < data.Length / doubleChannels; ++i) { - leftBuffer = new byte[data.Length / 2]; - rightBuffer = new byte[data.Length / 2]; - //[]: Sample, L: Left channel R: Right channel - //[LR][LR][LR][LR][LR][LR] - //The data is interleaved and needs to be demultiplexed - for (int i = 0; i < data.Length / 4; i++) - { - leftBuffer[i * 2] = data[i * 4]; - leftBuffer[i * 2 + 1] = data[i * 4 + 1]; - rightBuffer[i * 2] = data[i * 4 + 2]; - rightBuffer[i * 2 + 1] = data[i * 4 + 3]; - } + for (int j = 0; j < doubleChannels; ++j) + allBuffers[(int)Math.Floor(j / (double)2)][i * 2 + (j % 2)] = data[i * doubleChannels + j]; } - else - leftBuffer = rightBuffer = data; - if (device.PlayerChannel1 > 0) - _Buffer[device.PlayerChannel1 - 1].ProcessNewBuffer(leftBuffer); - - if (device.PlayerChannel2 > 0) - _Buffer[device.PlayerChannel2 - 1].ProcessNewBuffer(rightBuffer); + for (int ch = 0; ch < totalChannels; ++ch) + { + if (device.PlayerChannel[ch] > 0) + _Buffer[device.PlayerChannel[ch] - 1].ProcessNewBuffer(allBuffers[ch]); + } } /// diff --git a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs index 43e501bf..1c8def06 100644 --- a/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/DirectSound/CDirectSoundRecord.cs @@ -68,9 +68,15 @@ namespace Vocaluxe.Lib.Sound.Record.DirectSound foreach (CRecordDevice device in _Devices) { - if (device.PlayerChannel1 > 0 || device.PlayerChannel2 > 0) + bool usingDevice = false; + for (int ch = 0; ch < device.Channels; ++ch) { - var source = new CSoundCardSource(device.Driver, (short)device.Channels) {SampleRateKhz = 44.1}; + if (device.PlayerChannel[ch] > 0) + usingDevice = true; + } + if (usingDevice) + { + var source = new CSoundCardSource(device.Driver, (short)device.Channels) { SampleRateKhz = 44.1 }; source.SampleDataReady += _OnDataReady; source.Start(); diff --git a/Vocaluxe/Lib/Sound/Record/IRecord.cs b/Vocaluxe/Lib/Sound/Record/IRecord.cs index 7f020daa..e8166dae 100644 --- a/Vocaluxe/Lib/Sound/Record/IRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/IRecord.cs @@ -27,19 +27,15 @@ namespace Vocaluxe.Lib.Sound.Record public readonly string Driver; public readonly int Channels; - public int PlayerChannel1; - public int PlayerChannel2; + public int[] PlayerChannel; public CRecordDevice(int id, string name, string driver, int channels) { ID = id; Name = name; Driver = driver; - - if (channels > 2) - channels = 2; //more are not supported in vocaluxe - Channels = channels; + PlayerChannel = new int[channels]; } } diff --git a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs index da2eaf9d..4702e400 100644 --- a/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs +++ b/Vocaluxe/Lib/Sound/Record/PortAudio/CPortAudioRecord.cs @@ -99,16 +99,21 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio for (int dev = 0; dev < _Devices.Count; dev++) { - if (_Devices[dev].PlayerChannel1 > 0 || _Devices[dev].PlayerChannel2 > 0) + bool usingDevice = false; + for (int ch = 0; ch < _Devices[dev].Channels; ++ch) { + if (_Devices[dev].PlayerChannel[ch] > 0) + usingDevice = true; + } + if (usingDevice) { PortAudioSharp.PortAudio.PaStreamParameters? inputParams = new PortAudioSharp.PortAudio.PaStreamParameters - { - channelCount = _Devices[dev].Channels, - device = _Devices[dev].ID, - sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, - suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency, - hostApiSpecificStreamInfo = IntPtr.Zero - }; + { + channelCount = _Devices[dev].Channels, + device = _Devices[dev].ID, + sampleFormat = PortAudioSharp.PortAudio.PaSampleFormat.paInt16, + suggestedLatency = PortAudioSharp.PortAudio.Pa_GetDeviceInfo(_Devices[dev].ID).defaultLowInputLatency, + hostApiSpecificStreamInfo = IntPtr.Zero + }; if (!_PaHandle.OpenInputStream( out _RecHandle[dev], ref inputParams, @@ -181,10 +186,7 @@ namespace Vocaluxe.Lib.Sound.Record.PortAudio { CRecordDevice dev = _Devices[userData.ToInt32()]; uint numBytes; - if (dev.Channels == 2) - numBytes = frameCount * 4; - else - numBytes = frameCount * 2; + numBytes = frameCount * (uint)dev.Channels * 2; byte[] recbuffer = new byte[numBytes]; diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index dca9586b..da838eda 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -31,13 +31,13 @@ namespace Vocaluxe.Screens // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion { - get { return 4; } + get { return 5; } } private const string _SelectSlideRecordDevices = "SelectSlideRecordDevices"; - private const string _SelectSlideRecordChannel1 = "SelectSlideRecordChannel1"; - private const string _SelectSlideRecordChannel2 = "SelectSlideRecordChannel2"; + private readonly string[] _SelectSlideRecordPlayer = { "SelectSlideRecordPlayer1", "SelectSlideRecordPlayer2", "SelectSlideRecordPlayer3", "SelectSlideRecordPlayer4", "SelectSlideRecordPlayer5", "SelectSlideRecordPlayer6" }; + private const string _SelectSlideDelay = "SelectSlideDelay"; private const string _StaticWarning = "StaticWarning"; @@ -46,22 +46,19 @@ namespace Vocaluxe.Screens private const string _ButtonExit = "ButtonExit"; private const string _ButtonDelayTest = "ButtonDelayTest"; - private const string _TextChannel1 = "TextChannel1"; - private const string _TextChannel2 = "TextChannel2"; + private readonly string[] _TextPlayer = { "TextPlayer1", "TextPlayer2", "TextPlayer3", "TextPlayer4", "TextPlayer5", "TextPlayer6" }; - private const string _TextDelayChannel1 = "TextDelayChannel1"; - private const string _TextDelayChannel2 = "TextDelayChannel2"; + private readonly string[] _TextDelayPlayer = { "TextDelayPlayer1", "TextDelayPlayer2", "TextDelayPlayer3", "TextDelayPlayer4", "TextDelayPlayer5", "TextDelayPlayer6" }; - private const string _EqualizerChannel1 = "EqualizerChannel1"; - private const string _EqualizerChannel2 = "EqualizerChannel2"; + private readonly string[] _EqualizerPlayer = { "EqualizerPlayer1", "EqualizerPlayer2", "EqualizerPlayer3", "EqualizerPlayer4", "EqualizerPlayer5", "EqualizerPlayer6" }; - private readonly string[] _StaticEnergyChannel = new string[] {"StaticEnergyChannel1", "StaticEnergyChannel2"}; + private readonly string[] _StaticEnergyPlayer = new string[] { "StaticEnergyPlayer1", "StaticEnergyPlayer2", "StaticEnergyPlayer3", "StaticEnergyPlayer4", "StaticEnergyPlayer5", "StaticEnergyPlayer6" }; private float[] _ChannelEnergy; private ReadOnlyCollection _Devices; private int _DeviceNr; - private readonly CDelayTest _DelayTest = new CDelayTest(2); + private readonly CDelayTest _DelayTest = new CDelayTest(6); public override EMusicType CurrentMusicType { @@ -73,43 +70,27 @@ namespace Vocaluxe.Screens base.Init(); var values = new List {_StaticWarning}; - values.AddRange(_StaticEnergyChannel); + values.AddRange(_StaticEnergyPlayer); _ThemeStatics = values.ToArray(); - _ThemeTexts = new string[] {_TextWarning, _TextChannel1, _TextChannel2, _TextDelayChannel1, _TextDelayChannel2}; + _ThemeTexts = new string[] {_TextWarning, _TextPlayer[0], _TextPlayer[1], _TextPlayer[2], _TextPlayer[3], _TextPlayer[4], _TextPlayer[5], _TextDelayPlayer[0], _TextDelayPlayer[1], _TextDelayPlayer[2], _TextDelayPlayer[3], _TextDelayPlayer[4], _TextDelayPlayer[5] }; _ThemeButtons = new string[] {_ButtonExit, _ButtonDelayTest}; - _ThemeSelectSlides = new string[] {_SelectSlideRecordDevices, _SelectSlideRecordChannel1, _SelectSlideRecordChannel2, _SelectSlideDelay}; - _ThemeEqualizers = new string[] {_EqualizerChannel1, _EqualizerChannel2}; + _ThemeSelectSlides = new string[] {_SelectSlideRecordDevices, _SelectSlideRecordPlayer[0], _SelectSlideRecordPlayer[1], _SelectSlideRecordPlayer[2], _SelectSlideRecordPlayer[3], _SelectSlideRecordPlayer[4], _SelectSlideRecordPlayer[5], _SelectSlideDelay }; + _ThemeEqualizers = new string[] {_EqualizerPlayer[0], _EqualizerPlayer[1], _EqualizerPlayer[2], _EqualizerPlayer[3], _EqualizerPlayer[4], _EqualizerPlayer[5]}; } public override void LoadTheme(string xmlPath) { base.LoadTheme(xmlPath); - int max = CSettings.MaxNumPlayer + 1; - if (max > 7) - max = 7; - - _SelectSlides[_SelectSlideRecordChannel1].NumVisible = max; - _SelectSlides[_SelectSlideRecordChannel2].NumVisible = max; - - _SelectSlides[_SelectSlideRecordChannel1].AddValue(CLanguage.Translate("TR_CONFIG_OFF")); - _SelectSlides[_SelectSlideRecordChannel2].AddValue(CLanguage.Translate("TR_CONFIG_OFF")); - - for (int i = 1; i <= CSettings.MaxNumPlayer; i++) - { - _SelectSlides[_SelectSlideRecordChannel1].AddValue(i.ToString()); - _SelectSlides[_SelectSlideRecordChannel2].AddValue(i.ToString()); - } - for (int i = 0; i < 26; i++) _SelectSlides[_SelectSlideDelay].AddValue((i * 20) + " ms"); - _ChannelEnergy = new float[_StaticEnergyChannel.Length]; + _ChannelEnergy = new float[_StaticEnergyPlayer.Length]; for (int i = 0; i < _ChannelEnergy.Length; i++) { - _Statics[_StaticEnergyChannel[i]].Visible = false; + _Statics[_StaticEnergyPlayer[i]].Visible = false; _ChannelEnergy[i] = 0f; } } @@ -151,27 +132,11 @@ namespace Vocaluxe.Screens break; case Keys.Left: - if (_SelectSlides[_SelectSlideRecordDevices].Selected) - _OnDeviceEvent(); - - if (_SelectSlides[_SelectSlideRecordChannel1].Selected || - _SelectSlides[_SelectSlideRecordChannel2].Selected) - _SetMicConfig(); - - if (_SelectSlides[_SelectSlideDelay].Selected) - _SaveDelayConfig(); + _SelectSlideAction(); break; case Keys.Right: - if (_SelectSlides[_SelectSlideRecordDevices].Selected) - _OnDeviceEvent(); - - if (_SelectSlides[_SelectSlideRecordChannel1].Selected || - _SelectSlides[_SelectSlideRecordChannel2].Selected) - _SetMicConfig(); - - if (_SelectSlides[_SelectSlideDelay].Selected) - _SaveDelayConfig(); + _SelectSlideAction(); break; } } @@ -190,15 +155,7 @@ namespace Vocaluxe.Screens if (mouseEvent.LB && _IsMouseOverCurSelection(mouseEvent)) { - if (_SelectSlides[_SelectSlideRecordDevices].Selected) - _OnDeviceEvent(); - - if (_SelectSlides[_SelectSlideRecordChannel1].Selected || - _SelectSlides[_SelectSlideRecordChannel2].Selected) - _SetMicConfig(); - - if (_SelectSlides[_SelectSlideDelay].Selected) - _SaveDelayConfig(); + _SelectSlideAction(); if (_Buttons[_ButtonExit].Selected) { @@ -220,42 +177,32 @@ namespace Vocaluxe.Screens if (_DelayTest.Running) { _DelayTest.Update(); - _Texts[_TextDelayChannel1].Text = (_DelayTest.Delays[0] == 0) ? "???" : _DelayTest.Delays[0].ToString("000") + " ms"; - _Texts[_TextDelayChannel2].Text = (_DelayTest.Delays[1] == 0) ? "???" : _DelayTest.Delays[1].ToString("000") + " ms"; + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) + _Texts[_TextDelayPlayer[p]].Text = (_DelayTest.Delays[p] == 0) ? "??? ms" : _DelayTest.Delays[p].ToString("000") + " ms"; } if (_CheckMicConfig()) { - int player = _SelectSlides[_SelectSlideRecordChannel1].Selection - 1; - if (player >= 0) + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) { - _ChannelEnergy[0] = CRecord.GetMaxVolume(player); - _Equalizers[_EqualizerChannel1].Update(CRecord.ToneWeigth(player), CRecord.GetMaxVolume(player)); - } - else - { - _ChannelEnergy[0] = 0f; - _Equalizers[_EqualizerChannel1].Reset(); - } - - player = _SelectSlides[_SelectSlideRecordChannel2].Selection - 1; - if (player >= 0) - { - _ChannelEnergy[1] = CRecord.GetMaxVolume(player); - _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player), CRecord.GetMaxVolume(player)); - } - else - { - _ChannelEnergy[1] = 0f; - _Equalizers[_EqualizerChannel2].Reset(); + if(_SelectSlides[_SelectSlideRecordPlayer[p]].Selection > 0) + { + _ChannelEnergy[p] = CRecord.GetMaxVolume(p); + _Equalizers[_EqualizerPlayer[p]].Update(CRecord.ToneWeigth(p), CRecord.GetMaxVolume(p)); + } + else + { + _ChannelEnergy[p] = 0f; + _Equalizers[_EqualizerPlayer[p]].Reset(); + } } } else { for (int i = 0; i < _ChannelEnergy.Length; i++) _ChannelEnergy[i] = 0f; - _Equalizers[_EqualizerChannel1].Reset(); - _Equalizers[_EqualizerChannel2].Reset(); + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) + _Equalizers[_EqualizerPlayer[p]].Reset(); } bool showWarning = !_CheckMicConfig(); @@ -288,9 +235,8 @@ namespace Vocaluxe.Screens _UpdateChannels(); } - - _SelectSlides[_SelectSlideRecordChannel1].Visible = _Devices != null; - _SelectSlides[_SelectSlideRecordChannel2].Visible = _Devices != null; + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) + _SelectSlides[_SelectSlideRecordPlayer[p]].Visible = _Devices != null; _Statics[_StaticWarning].Visible = false; _Texts[_TextWarning].Visible = false; @@ -309,17 +255,17 @@ namespace Vocaluxe.Screens { base.Draw(); - for (int i = 0; i < _StaticEnergyChannel.Length; i++) + for (int i = 0; i < _StaticEnergyPlayer.Length; i++) { if (_ChannelEnergy[i] > 0f) { - var rect = new SRectF(_Statics[_StaticEnergyChannel[i]].Rect.X, - _Statics[_StaticEnergyChannel[i]].Rect.Y, - _Statics[_StaticEnergyChannel[i]].Rect.W * _ChannelEnergy[i], - _Statics[_StaticEnergyChannel[i]].Rect.H, - _Statics[_StaticEnergyChannel[i]].Rect.Z); + var rect = new SRectF(_Statics[_StaticEnergyPlayer[i]].Rect.X, + _Statics[_StaticEnergyPlayer[i]].Rect.Y, + _Statics[_StaticEnergyPlayer[i]].Rect.W * _ChannelEnergy[i], + _Statics[_StaticEnergyPlayer[i]].Rect.H, + _Statics[_StaticEnergyPlayer[i]].Rect.Z); - CDraw.DrawTexture(_Statics[_StaticEnergyChannel[i]].Texture, _Statics[_StaticEnergyChannel[i]].Rect, + CDraw.DrawTexture(_Statics[_StaticEnergyPlayer[i]].Texture, _Statics[_StaticEnergyPlayer[i]].Rect, new SColorF(1f, 1f, 1f, 1f), rect); } } @@ -363,18 +309,14 @@ namespace Vocaluxe.Screens foreach (CRecordDevice device in _Devices) { - if (device.PlayerChannel1 > 0) + for (int ch = 0; ch < (uint)device.Channels; ++ch) { - CConfig.Config.Record.MicConfig[device.PlayerChannel1 - 1].Channel = 1; - CConfig.Config.Record.MicConfig[device.PlayerChannel1 - 1].DeviceName = device.Name; - CConfig.Config.Record.MicConfig[device.PlayerChannel1 - 1].DeviceDriver = device.Driver; - } - - if (device.PlayerChannel2 > 0) - { - CConfig.Config.Record.MicConfig[device.PlayerChannel2 - 1].Channel = 2; - CConfig.Config.Record.MicConfig[device.PlayerChannel2 - 1].DeviceName = device.Name; - CConfig.Config.Record.MicConfig[device.PlayerChannel2 - 1].DeviceDriver = device.Driver; + if (device.PlayerChannel[ch] > 0) + { + CConfig.Config.Record.MicConfig[device.PlayerChannel[ch] - 1].Channel = ch+1; + CConfig.Config.Record.MicConfig[device.PlayerChannel[ch] - 1].DeviceName = device.Name; + CConfig.Config.Record.MicConfig[device.PlayerChannel[ch] - 1].DeviceDriver = device.Driver; + } } } CConfig.SaveConfig(); @@ -382,31 +324,62 @@ namespace Vocaluxe.Screens CRecord.Start(); } - private void _SetPlayerColors() - { - _Texts[_TextChannel1].Color = _SelectSlides[_SelectSlideRecordChannel1].Selection <= 0 - ? new SColorF(1, 1, 1, 1) : CThemes.GetPlayerColor(_SelectSlides[_SelectSlideRecordChannel1].Selection); - _Texts[_TextChannel2].Color = _SelectSlides[_SelectSlideRecordChannel2].Selection <= 0 - ? new SColorF(1, 1, 1, 1) : CThemes.GetPlayerColor(_SelectSlides[_SelectSlideRecordChannel2].Selection); - } - private void _SetMicConfig() { if (_DeviceNr < 0) return; CRecordDevice device = _Devices[_DeviceNr]; - device.PlayerChannel1 = _SelectSlides[_SelectSlideRecordChannel1].Selection; - device.PlayerChannel2 = _SelectSlides[_SelectSlideRecordChannel2].Selection; - _SetPlayerColors(); + + for (int ch = 0; ch < device.Channels; ++ch) + device.PlayerChannel[ch] = 0; + + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) + { + int ch = _SelectSlides[_SelectSlideRecordPlayer[p]].Selection; + + if (ch > 0) + device.PlayerChannel[ch-1] = p+1; + + } + } + + private void _SelectSlideAction() + { + if (_SelectSlides[_SelectSlideRecordDevices].Selected) + _OnDeviceEvent(); + + for (int i = 0; i < _SelectSlideRecordPlayer.Length; ++i) + if (_SelectSlides[_SelectSlideRecordPlayer[i]].Selected) + _SetMicConfig(); + + if (_SelectSlides[_SelectSlideDelay].Selected) + _SaveDelayConfig(); } private void _UpdateChannels() { - _SelectSlides[_SelectSlideRecordChannel1].Selection = _Devices[_DeviceNr].PlayerChannel1; - _SelectSlides[_SelectSlideRecordChannel2].Selection = _Devices[_DeviceNr].PlayerChannel2; + int max = _Devices[_DeviceNr].Channels + 1; + + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) + { + _SelectSlides[_SelectSlideRecordPlayer[p]].Clear(); + _SelectSlides[_SelectSlideRecordPlayer[p]].NumVisible = max; + _SelectSlides[_SelectSlideRecordPlayer[p]].AddValue(CLanguage.Translate("TR_CONFIG_OFF")); + } + + for (int i = 1; i <= _Devices[_DeviceNr].Channels; ++i) + { + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) + _SelectSlides[_SelectSlideRecordPlayer[p]].AddValue(i.ToString()); + + int pc = _Devices[_DeviceNr].PlayerChannel[i-1]; + if (pc > 0) + { + _SelectSlides[_SelectSlideRecordPlayer[pc-1]].Selection = i; + } + } _SaveMicConfig(); - _SetPlayerColors(); } private bool _CheckMicConfig() @@ -420,20 +393,15 @@ namespace Vocaluxe.Screens foreach (CRecordDevice device in _Devices) { - if (device.PlayerChannel1 > 0) + for (int i = 0; i < device.Channels; ++i) { - if (isSet[device.PlayerChannel1 - 1]) - return false; + if (device.PlayerChannel[i] > 0) + { + if (isSet[device.PlayerChannel[i] - 1]) + return false; - isSet[device.PlayerChannel1 - 1] = true; - } - - if (device.PlayerChannel2 > 0) - { - if (isSet[device.PlayerChannel2 - 1]) - return false; - - isSet[device.PlayerChannel2 - 1] = true; + isSet[device.PlayerChannel[i] - 1] = true; + } } } return true; @@ -443,7 +411,7 @@ namespace Vocaluxe.Screens { _SaveMicConfig(); _DelayTest.Reset(); - _DelayTest.Start(new int[] {_SelectSlides[_SelectSlideRecordChannel1].Selection - 1, _SelectSlides[_SelectSlideRecordChannel2].Selection - 1}); + _DelayTest.Start(new int[] {0, 1, 2, 3, 4, 5}); } private void _GetFirstConfiguredRecordDevice(ref int device) From 139579a1cafd4360918c682ff2835e1c235f2be1 Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sun, 6 Mar 2016 17:20:10 +0100 Subject: [PATCH 02/44] Up the version on ScreenOptionsRecord for the Ambient theme --- Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml index c7357bae..b847dca2 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml @@ -2,7 +2,7 @@ ScreenOptionsRecord - 4 + 5 From 3a6ed62282dc91e801d6839b8bfeefbae0723bf4 Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sun, 6 Mar 2016 20:04:06 +0100 Subject: [PATCH 03/44] Edit IsMicConfig to fix "accidental" wiping of microphone config Previously Vocaluxe would autoassign player 1 and 2 if these players were both configured on channels higher than 2. Mashed together IsMicConfig() and IsMicConfig(int player) to handle both specific and any player microphone config check. --- Vocaluxe/Base/CConfig.cs | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index b64dd215..67d6bcac 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -520,31 +520,27 @@ namespace Vocaluxe.Base return (1f / Config.Graphics.MaxFPS) * 1000f; } - /// - /// Checks, if there is a mic-configuration - /// - /// - public static bool IsMicConfig() - { - ReadOnlyCollection devices = CRecord.GetDevices(); - if (devices == null) - return false; - - return devices.Any(t => t.PlayerChannel[0] != 0 || t.PlayerChannel[1] != 0); - } - /// /// Checks, if there is a mic-configuration /// /// Player-Number /// - public static bool IsMicConfig(int player) + public static bool IsMicConfig(int player = 0) { ReadOnlyCollection devices = CRecord.GetDevices(); if (devices == null) return false; - return devices.Any(t => t.PlayerChannel.Contains(player)); + if (player > 0) + return devices.Any(t => t.PlayerChannel.Contains(player)); + + for (int p = 0; p < CSettings.MaxNumPlayer; ++p) + if (devices.Any(t => t.PlayerChannel.Contains(p+1))) + { + return true; + } + + return false; } public static int GetMaxNumMics() From 1826959cb9f60f6f26c55115292703fe1ecfde5a Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sat, 26 Mar 2016 20:16:22 +0100 Subject: [PATCH 04/44] Make lyric styles translatable --- Output/Languages/English.xml | 4 ++++ Vocaluxe/Base/CConfig.cs | 2 +- VocaluxeLib/Enums.cs | 8 ++++---- VocaluxeLib/Menu/CLyric.cs | 14 +++++++------- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index 4a783eef..34ebb162 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -80,6 +80,10 @@ All Only names and avatars Nothing + Fill + Jump + Slide + Zoom Bottom Top Top and bottom diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 67d6bcac..85d7d409 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -104,7 +104,7 @@ namespace Vocaluxe.Base [DefaultValue(EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH)] public EPlayerInfo PlayerInfo; [DefaultValue(EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_OFF)] public EFadePlayerInfo FadePlayerInfo; [DefaultValue(ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC)] public ECoverLoading CoverLoading; - [DefaultValue(ELyricStyle.Slide)] public ELyricStyle LyricStyle; + [DefaultValue(ELyricStyle.TR_CONFIG_LYRICSTYLE_SLIDE)] public ELyricStyle LyricStyle; } public struct SConfigSound diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs index 40d69883..fb4f08a2 100644 --- a/VocaluxeLib/Enums.cs +++ b/VocaluxeLib/Enums.cs @@ -321,10 +321,10 @@ namespace VocaluxeLib public enum ELyricStyle { - Fill, - Jump, - Slide, - Zoom + TR_CONFIG_LYRICSTYLE_FILL, + TR_CONFIG_LYRICSTYLE_JUMP, + TR_CONFIG_LYRICSTYLE_SLIDE, + TR_CONFIG_LYRICSTYLE_ZOOM } #endregion Config diff --git a/VocaluxeLib/Menu/CLyric.cs b/VocaluxeLib/Menu/CLyric.cs index 7b17d0c0..1fa29533 100644 --- a/VocaluxeLib/Menu/CLyric.cs +++ b/VocaluxeLib/Menu/CLyric.cs @@ -88,7 +88,7 @@ namespace VocaluxeLib.Menu _Line = new CSongLine(); _Text = new CText(_PartyModeID); - LyricStyle = ELyricStyle.Fill; + LyricStyle = ELyricStyle.TR_CONFIG_LYRICSTYLE_FILL; } public CLyric(SThemeLyrics theme, int partyModeID) @@ -100,7 +100,7 @@ namespace VocaluxeLib.Menu _Text = new CText(_PartyModeID); _Width = 1f; - LyricStyle = ELyricStyle.Fill; + LyricStyle = ELyricStyle.TR_CONFIG_LYRICSTYLE_FILL; ThemeLoaded = true; } @@ -185,14 +185,14 @@ namespace VocaluxeLib.Menu { switch (LyricStyle) { - case ELyricStyle.Fill: + case ELyricStyle.TR_CONFIG_LYRICSTYLE_FILL: _DrawFill(); break; - case ELyricStyle.Slide: + case ELyricStyle.TR_CONFIG_LYRICSTYLE_SLIDE: _DrawSlide(); break; - case ELyricStyle.Zoom: - case ELyricStyle.Jump: + case ELyricStyle.TR_CONFIG_LYRICSTYLE_ZOOM: + case ELyricStyle.TR_CONFIG_LYRICSTYLE_JUMP: _DrawZoomOrJump(); break; default: @@ -368,7 +368,7 @@ namespace VocaluxeLib.Menu return; _SetText(highlightNote); _Text.X = hX; - if (LyricStyle == ELyricStyle.Jump) + if (LyricStyle == ELyricStyle.TR_CONFIG_LYRICSTYLE_JUMP) _DrawJumpingNode(highlightNote); else _DrawZoomedNote(highlightNote, hEndBeat); From a4d03196c188149f57b0d872479d67924b0de56b Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sat, 26 Mar 2016 20:17:27 +0100 Subject: [PATCH 05/44] "Fix"the two other "Englishes" --- Output/Languages/Asturian.xml | 2 +- Output/Languages/Portuguese.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Output/Languages/Asturian.xml b/Output/Languages/Asturian.xml index 81ac1285..fb85669c 100644 --- a/Output/Languages/Asturian.xml +++ b/Output/Languages/Asturian.xml @@ -1,6 +1,6 @@ - Inglés + Asturianu Vocaluxe y Colar diff --git a/Output/Languages/Portuguese.xml b/Output/Languages/Portuguese.xml index cb0cfea6..dd66ff44 100644 --- a/Output/Languages/Portuguese.xml +++ b/Output/Languages/Portuguese.xml @@ -1,6 +1,6 @@ - Inglês + Português Vocaluxe e Sair From ec9ff294284412f7cbf0e2c0934acd19ca217601 Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sat, 26 Mar 2016 21:50:45 +0100 Subject: [PATCH 06/44] Adjustments to the English language-file --- Output/Languages/English.xml | 118 +++++++++++++++++------------------ 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index 34ebb162..f5fc89bc 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -11,7 +11,7 @@ Video streams Textures ToneAbs - Max Volume + Max volume Loaded songs Mouse Memory usage @@ -28,9 +28,9 @@ Amateur Tone Deaf Guest - Normal User + Normal user Administrator - Keyboard User + Keyboard user Software OpenGL Direct3D @@ -46,19 +46,19 @@ Level 2 Level 3 Max - Song List + List Dreidel - TileBoard + Tiles Book - On Demand - At Startup + On demand + At startup Dynamic None Random Folder Artist - Artist Letter - Title Letter + Artist by letter + Title by letter Edition Genre Year @@ -73,9 +73,9 @@ Total Normal Expanded - Own Music and Background Music - No own Music - Only own Music + Own music and background-music + No own music + Only own music Only selected song All Only names and avatars @@ -90,7 +90,7 @@ Dynamic Loading Total - Songs + songs loaded Main Menu Sing @@ -98,8 +98,8 @@ Options Profiles No profiles found! - Party Mode Selection - Party Mode + Party-Mode Selection + Party-mode Description Author Version @@ -112,12 +112,12 @@ Number of players Player Selection Player - 1 Player - 2 Player - 3 Player - 4 Player - 5 Player - 6 Player + 1 player + 2 players + 3 players + 4 players + 5 players + 6 players Warning: There is no mic assigned to player %v! Warning: There are no mics assigned to players %v! Warning: There is no profile assigned to player %v! @@ -134,16 +134,16 @@ Select Sing a random medley Sing medley-songs - New Playlist + New playlist Song Options Search: - No Language + No language No Year No Genre No Edition All Songs - (%v Songs) - (%v Song) + (%v songs) + (%v song) %a - %t Pause Stop singing @@ -156,18 +156,18 @@ Overall score Highscore Profiles - Player Name - Game Difficulty + Player name + Game difficulty Avatar - User Role + User role Active New Delete - Take Snapshot - Save Snapshot - Delete Snapshot + Take snapshot + Save snapshot + Delete snapshot Webcam - Menu Options + Options Game Sound Record @@ -177,12 +177,12 @@ Server address Game Options Language - Debug Level - Song Menu - Song Sorting + Debug level + Song-menu style + Song sorting Tabs - Game Difficulty - Timer-Mode + Game difficulty + Timer mode Record Options Device Input @@ -192,37 +192,37 @@ Player 4 Player 5 Player 6 - Mic Delay + Mic delay Warning: At least one player is assigned to two mics. - Delay Test - Options Sound - Background Music - Background Music Volume - Background Music Source - Preview Music Volume - Game Music Volume + Delay test + Sound Options + Background music + Background-music volume + Background-music source + Preview-music volume + Game-music volume Theme Options Theme Skin - Cover Theme - Show Note-Lines - Show Tone-Helper - Timer-Look - Fade player-info - Cover Loading Behavior + Cover theme + Show note lines + Show tone-helper + Timeline mode + Fade player info + Cover-loading behavior Lyrics Options - Style + Animation style Lyrics position Video Options - Video Backgrounds - Video Preview + Video backgrounds + Video preview Videos while singing - Display current backgroundmusic video + Display current background-music video Webcams - Webcam-Resolution - Screen adjustments - Press CTR + ALT (+ SHIFT) + Arrows|\"+\" to adjust screen - CTR + ALT + 0 to reset + Webcam resolution + Adjust screen + Press CTRL + ALT (+ SHIFT) + Arrows to adjust screen + CTRL + ALT + 0 to reset Top left Top right Bottom left From 8e4c4abdba5c5e2a8a0d6acd2790fd7222de87c3 Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sat, 26 Mar 2016 22:00:55 +0100 Subject: [PATCH 07/44] Adjusted Swedish language-file --- Output/Languages/Swedish.xml | 220 ++++++++++++++++++----------------- 1 file changed, 114 insertions(+), 106 deletions(-) diff --git a/Output/Languages/Swedish.xml b/Output/Languages/Swedish.xml index b30335bc..f54f35b3 100644 --- a/Output/Languages/Swedish.xml +++ b/Output/Languages/Swedish.xml @@ -12,25 +12,25 @@ Texturer ToneAbs Max Volym - Laddade sånger + Laddade låtar Mus Minnesanvändning Normal Duett Medley Kort version - Vokal Hjälte + Sånghjälte Superstjärna Frontsångare - Stigande Stjärna - Hoppfullt - Vill Gärna + Stigande stjärna + Hoppfull + Efterapare Amatör Tondöv Gäst - Normal Användare + Normal användare Administratör - Tangentbord Användare + Tangentbordsanvändare Mjukvara OpenGL Direct3D @@ -41,185 +41,193 @@ Högsta Av På - Endast FPS + Endast bildfrekvens Nivå 1 Nivå 2 Nivå 3 Max - Låtlista + Lista Dreidel - Bricktavla + Rutnät Bok - På Begäran - Vid Uppstart + På begäran + Vid uppstart Dynamiskt Ingen Slumpmässig Mapp Artist - Artist Bokstav - Titel Bokstav - Edition + Artist efter bokstav + Titel efter bokstav + Utgåva Genre År Årtionde Språk Tillagd datum Lätt - Normalt - Svårt - Nuvarande + Medel + Svår + Aktuell Återstående - Totalt + Total Normal Utvidgad - Egen Musik och Bakgrundsmusik - Ingen egen Musik - Endast egen Musik + Egen musik och bakgrundsmusik + Ingen egen musik + Endast egen musik Endast vald låt Alla Endast namn och avatarer Ingenting + Fyll + Hoppa + Svep + Zooma Nederst Överst Överst och nederst Dynamisk Laddar Totalt - Sånger - Laddad - Huvud Meny + låtar + laddat + Huvudmeny Sjung Party Alternativ Profiler Inga profiler funna! - Party Läge Väljare - Party Läge + Val av partyläge + Partyläge Beskrivning - Författare + Skapare Version - kan ej ladda detta party läge + Kan ej ladda detta partyläge Det finns inga mikrofoner konfigurerade! - %d mikrofoner krävs för denna party-mode! - Mål publik + %d mikrofoner krävs för denna partyläge! + Målgrupp Inga lag Antal lag Antal spelare - Spelarväljare + Val av spelare Spelare - Spelare 1 - Spelare 2 - Spelare 3 - Spelare 4 - Spelare 5 - Spelare 6 - Varning: Det finns ingen Mic tilldelad Spelare %v! - Varning: Det finns ingen Micar tilldelad Spelarna %v! + 1 spelare + 2 spelare + 3 spelare + 4 spelare + 5 spelare + 6 spelare + Varning: Det finns ingen mikrofon tilldelad spelare %v! + Varning: Det finns inga mikrofoner tilldelade spelare %v! Varning: Det finns ingen profil för spelare %v! Varning: Det finns inga profiler för spelare %v! Låtval Sjung - Lägg till Spellista + Lägg till spellista Stäng Välj slumpmässig låt - Välg slumpmässig kategori + Välj slumpmässig kategori Sjung alla låtar Sjung alla synliga låtar Öppna spellista Välj Sjung slumpmässig medley - Sjung medley-låt - Ny Spellista - Låt Alternativ + Sjung medleylåt + Ny spellista + Låtalternativ Sök: - Inget Språk - Inget År - Ingen Genre - Ingen Edition - Alla Låtar - (%v Låtar) - (%v Låt) + Inget språk + Inget år + Ingen genre + Ingen utgåva + Alla låtar + (%v låtar) + (%v låt) %a - %t Paus - Stoppa Låt + Avsluta låt Fortsätt - Hoppa över Låt + Hoppa över låt Resultat Rankning Poäng Svårighetsgrad Totalpoäng - Highscore + Topplista Profiler Spelarnamn - Spelets Svårighetsgrad - Avatar + Svårighetsgrad + Profilbild Användarroll Aktiv Ny - Ta Bort - Ta Ögonblicksbild - Spara Ögonblicksbild - Ta Bort Ögonblicksbild - Webkamera - Meny Alternativ + Radera + Ta ögonblicksbild + Spara ögonblicksbild + Radera ögonblicksbild + Webbkamera + Alternativ Spel Ljud Inspelning Video - Låt Text + Låttext Tema - Server adress - Spel Alternativ + Serveradress + Spelalternativ Språk Felsökningsnivå - Låt Meny - Låt Sortering + Låtmeny + Låtsortering Flikar - Spelets Svårighetsgrad - Timer-Läge - Inspelnings Alternativ + Spelets svårighetsgrad + Timerläge + Inspelningsalternativ Enhet Ingång - Kanal 1 - Kanal 2 - Mic Fördröjning - Varning: Minst en spelare är tilldelad 2 mikrofoner. + Spelare 1 + Spelare 2 + Spelare 3 + Spelare 4 + Spelare 5 + Spelare 6 + Mikrofonfördröjning + Varning: Minst en spelare är tilldelad flera mikrofoner. Fördröjningstest - Alternativ Ljud + Ljudalternativ Bakgrundsmusik - Bakgrundsmusik Volym - Bakgrundsmusik Källa - Förhandstest Musik Volym - Spel Musik Volym - Tema Alternativ + Volym på bakgrundsmusik + Källa för bakgrundsmusik + Volym på förhandsvisning + Volym på musik under spel + Temaalternativ Tema - Skin - Omslag Tema - Visa Not Linjer - Visa Tone Hjälp - Timer Utseende - Tona bort spelar-info - Beteende För Hur Omslag Laddas - Låttext Alternativ - Utseende + Skal + Omslagstema + Visa notlinjer + Visa tonindikator + Tidslinjeläge + Tona spelarinfo + Omslagsladdning + Låttextsalternativ + Animeringsstil Textposition - Video Alternativ - Video Bakgrund - Video Förhandsvisning - Video Samtidigt Med Låt - Visa Video för nuvarande Bakgrundsmusik - Webkameror - Webkamera Upplösning - Skärmjusteringar - Tryck CTR + ALT (+ SHIFT) + Pilar\"+\" för att justera skärmen - CTR + ALT + 0 för att återställa - Överst till vänster - Överst till höger - Nederst till vänster - Nederst till höger + Videoalternativ + Videobakgrund + Videoförhandsvisning + Video under spel + Visa video för aktuell bakgrundsmusik + Webbkameror + Webbkameraupplösning + Justera skärm + Tryck CTRL + ALT (+ SHIFT) + Pilar för att justera skärmen + CTRL + ALT + 0 för att återställa + Övre vänster + Övre höger + Nedre vänster + Nedre höger Volym - Server adress - Servern kan inte nås. Var god kontrollera config.xml! + Serveradress + Servern körs inte. Var god kontrollera config.xml! From 66f890493b1d6aeec6dc2859b6941c85b8f440e4 Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sat, 26 Mar 2016 22:11:52 +0100 Subject: [PATCH 08/44] Change "Efterapare" to "Novis" I guess "novis" is less uncommon than "efterapare"... --- Output/Languages/Swedish.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Output/Languages/Swedish.xml b/Output/Languages/Swedish.xml index f54f35b3..d078b7d1 100644 --- a/Output/Languages/Swedish.xml +++ b/Output/Languages/Swedish.xml @@ -24,7 +24,7 @@ Frontsångare Stigande stjärna Hoppfull - Efterapare + Novis Amatör Tondöv Gäst From 4fb905d0b32495826ec0f8b414e9735d4742ff08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20K=C3=BCpper?= Date: Fri, 1 Apr 2016 11:11:19 +0200 Subject: [PATCH 09/44] Language update --- .gitignore | 2 + Output/Languages/Czech.xml | 3 -- Output/Languages/Dutch.xml | 3 -- Output/Languages/French.xml | 3 -- Output/Languages/German.xml | 12 +++-- Output/Languages/Hungarian.xml | 51 ++++++++++++++----- Output/Languages/Italian.xml | 8 +-- Output/Languages/Spanish.xml | 3 -- Output/Languages/Turkish.xml | 3 -- .../PartyModes/Challenge/Languages/French.xml | 1 + .../Challenge/Languages/Hungarian.xml | 1 + .../Challenge/Languages/Italian.xml | 2 + 12 files changed, 57 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 8f7e6068..f9e43ee9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ obj PitchTracker.dll Thumbs.db +.transifexrc +tx.exe *.mp4 *.pdb *.csproj.user diff --git a/Output/Languages/Czech.xml b/Output/Languages/Czech.xml index 7e4062bc..67132acc 100644 --- a/Output/Languages/Czech.xml +++ b/Output/Languages/Czech.xml @@ -46,7 +46,6 @@ Úroveň 2 Úroveň 3 Nejvíce - Seznam Drejdl (čtyřboká kostka) Herní deska Kniha @@ -182,8 +181,6 @@ Nastavení nahrávání Zařízení Vstup - Kanál 1 - Kanál 2 Zpoždění mikrofonu Varování: Alespoň jeden hráčům je přiřazen ke dvěma mikrofonům. Zkouška zpoždění diff --git a/Output/Languages/Dutch.xml b/Output/Languages/Dutch.xml index 1a371da2..a83aa554 100644 --- a/Output/Languages/Dutch.xml +++ b/Output/Languages/Dutch.xml @@ -46,7 +46,6 @@ Niveau 2 Niveau 3 Max - Lijst Dreidel Tegels Boek @@ -182,8 +181,6 @@ Opname-opties Apparaat Input - Kanaal 1 - Kanaal 2 Microfoonvertraging Waarschuwing: Ten minste één speler is toegewezen aan twee microfoons. Vertragingstest diff --git a/Output/Languages/French.xml b/Output/Languages/French.xml index 5d43fcbe..371b3e07 100644 --- a/Output/Languages/French.xml +++ b/Output/Languages/French.xml @@ -46,7 +46,6 @@ Niveau 2 Niveau 3 Max - Liste Caroussel Damier Livre @@ -182,8 +181,6 @@ Options d'Enregistrement Appareil Entrée - Canal 1 - Canal 2 Retard du Micro Attention: Au moins un des joueurs est assigné à 2 micros. Test du Retard diff --git a/Output/Languages/German.xml b/Output/Languages/German.xml index 24c141fa..a076eb67 100644 --- a/Output/Languages/German.xml +++ b/Output/Languages/German.xml @@ -46,7 +46,7 @@ Level 2 Level 3 Maximal - Songliste + Song-Liste Dreidel TileBoard Book @@ -101,7 +101,7 @@ Version Dieser Party-Modus konnte nicht geladen werden. Es sind keine Mikros konfiguriert! - Für diesen Party-Modus werden %d Mikros benötigt! + Für diesen Modus werden %d Mikrofone benötigt! Zielgruppe Keine Teams Anzahl der Teams @@ -182,8 +182,12 @@ Aufnahmeeinstellungen Soundkarte Eingang - Kanal 1 - Kanal 2 + Spieler 1 + Spieler 2 + Spieler 3 + Spieler 4 + Spieler 5 + Spieler 6 Mikrofon-Verzögerung Warnung: Momentan sind einem Spieler zwei Mikrofone zugeordnet! Verzögerungs-Test diff --git a/Output/Languages/Hungarian.xml b/Output/Languages/Hungarian.xml index 5515e2d4..4b53a152 100644 --- a/Output/Languages/Hungarian.xml +++ b/Output/Languages/Hungarian.xml @@ -9,11 +9,12 @@ Kiválasztás Audio streams Video streams - Textures + Textúrák ToneAbs - Max Volume - Loaded songs - Mouse + Max Hangerő + Betöltött dalok + Egér + Memóriahasználat Normál Duett Dalrészlet @@ -26,6 +27,9 @@ Fejlődőképes Amatőr Botfülű + Vendég + Normál felhasználó + Adminisztrátor Szoftveres OpenGL Direct3D @@ -36,12 +40,11 @@ Legmagasabb Ki Be - Only FPS - Level 1 - Level 2 - Level 3 + Csak FPS + 1. Szint + 2. Szint + 3. Szint Max - Lista Körhinta Csempe Könyv @@ -59,6 +62,7 @@ Év Évtized Nyelv + Hozzáadva Könnyű Normál Nehéz @@ -70,24 +74,31 @@ Saját és Háttérzene Nincs Saját Zene Csak Saját zene + Csak a kiválasztott dal Mindent Csak Nevek és Profilképek Semmit + Alul + Felül + Felül és alul + Dinamikusan Betöltés - Összes - Dalok + Összesen + dal betöltve Főmenü Éneklés Buli Beállítások Profilok + Nincsenek profilok! Parti Mód Választás Parti Mód Leírás Készítő Verzió Nem Betölthető Parti Mód. + Nincs mikrofon beállítva! Célközönség Csapatok Nélkül Csapatok Száma @@ -113,6 +124,7 @@ Összes Dal Éneklése Itt látható Dalok Éneklése Lista Megnyitása + Kiválaszt Véletlenszerű Dalrészlet Éneklése Dalrészletek Éneklése Új Lista @@ -125,6 +137,7 @@ Minden Dal (%v Dal) (%v Dal) + %a - %t Szünet Befejezés Folytatás @@ -139,6 +152,7 @@ Játékos Neve Nehézségi Szint Profilkép + Szerepkor Jelenlegi Új Törlés @@ -153,6 +167,7 @@ Kép Dalszöveg Téma + Szerver címe Játék Beállítások Nyelv Debug Level @@ -164,8 +179,6 @@ Mikrofon Beállítások Eszköz Bemenet - Csatorna 1 - Csatorna 2 Mikrofon Késleltetés Figyelem: Egy játékos két mikrofont használ. Késleltetés Tesztelése @@ -186,9 +199,21 @@ Borító Betöltés Dalszöveg Beállítások Stílus + Dalszöveg helyzete Képi Beállítások Animált Háttér Videó Előnézet Videó Éneklés Közben + Jelenlegi Háttérzene Videó Mutatása + Webkamerák + Webkamera-felbontás + Képernyő pozicionálás + Visszaállítás: CTRL + ALT + 0 + Bal felső + Jobb felső + Bal alsó + Jobb alsó Hangerő + Szerver címe + A szerver nem fut. Ellenőrizd a config.xml-t! diff --git a/Output/Languages/Italian.xml b/Output/Languages/Italian.xml index ca474c09..df414128 100644 --- a/Output/Languages/Italian.xml +++ b/Output/Languages/Italian.xml @@ -46,7 +46,7 @@ Livello 2 Livello 3 Max - Elenco + Lista canzoni Dreidel Scacchiera Libro @@ -93,6 +93,7 @@ Festa Opzioni Profili + Nessun profilo trovato! Seleziona modalità festa Modalità festa Descrizione @@ -100,6 +101,7 @@ Versione Impossibile caricare questa modalità festa. Nessun microfono configurato! + %d microfoni richiesti per questa party-mode! Target di riferimento Nessuna squadra Numero di squadre @@ -180,8 +182,6 @@ Opzioni registrazione Dispositivo Input - Canale 1 - Canale 2 Ritardo microfono Attenzione: Ad un giocatore sono assegnati due microfoni. Test ritardo @@ -211,6 +211,8 @@ Webcam Risoluzione-Webcam Sistemazione schermo + Premi CTR + ALT (+ SHIFT) + Freccia|\"+\" per sistemare lo schermo + CTR + ALT + 0 per ripristinare Sopra a sinistra Sopra a destra Sotto a sinistra diff --git a/Output/Languages/Spanish.xml b/Output/Languages/Spanish.xml index e91ed167..62a482ac 100644 --- a/Output/Languages/Spanish.xml +++ b/Output/Languages/Spanish.xml @@ -46,7 +46,6 @@ Nivel 2 Nivel 3 Máx - Lista Dreidel Cuadrícula Libro @@ -182,8 +181,6 @@ Opciones de Grabación Dispositivo Entrada - Canal 1 - Canal 2 Retraso del Micrófono Advertencia: Al menos un jugador ha sido asignado a dos micrófonos. Prueba de Retraso diff --git a/Output/Languages/Turkish.xml b/Output/Languages/Turkish.xml index e56f01e0..f7cdcb15 100644 --- a/Output/Languages/Turkish.xml +++ b/Output/Languages/Turkish.xml @@ -41,7 +41,6 @@ Seviye 2 Seviye 3 Max - Liste Dreidel Döşemeli Pano Kitap @@ -164,8 +163,6 @@ Kaydetme Seçenekleri Aygıt Giriş - Kanal 1 - Kanal 2 Mikrofon Gecikmesi Uyarı: Tek oyuncuya iki mikrofon atandı. Gecikme Testi diff --git a/Output/PartyModes/Challenge/Languages/French.xml b/Output/PartyModes/Challenge/Languages/French.xml index d3038922..7ff1b981 100644 --- a/Output/PartyModes/Challenge/Languages/French.xml +++ b/Output/PartyModes/Challenge/Languages/French.xml @@ -16,6 +16,7 @@ Nombre de micros Nombre de tours Mode Challenge: Choix des joueurs + Sélectionner au hasard Mode Challenge: Résumé Pos Nom diff --git a/Output/PartyModes/Challenge/Languages/Hungarian.xml b/Output/PartyModes/Challenge/Languages/Hungarian.xml index 29050e5d..30b313a2 100644 --- a/Output/PartyModes/Challenge/Languages/Hungarian.xml +++ b/Output/PartyModes/Challenge/Languages/Hungarian.xml @@ -16,6 +16,7 @@ Mikrofonok Száma Körök Száma Bajnokság Mód: Válassz Játékost + Véletlenszerű választás Bajnokság Mód: Áttekintés Poz Név diff --git a/Output/PartyModes/Challenge/Languages/Italian.xml b/Output/PartyModes/Challenge/Languages/Italian.xml index 8bb7714c..05b77510 100644 --- a/Output/PartyModes/Challenge/Languages/Italian.xml +++ b/Output/PartyModes/Challenge/Languages/Italian.xml @@ -15,6 +15,8 @@ Numero di giocatori Numero di microfoni Numero di turni + Numero di giullari + Ricarica i giullari ogni turno Modalità Sfida: Scegli il Giocatore Selezione casuale Modalità Sfida: Panoramica From d41376517866d924bdd95029076afb7f0c9813a3 Mon Sep 17 00:00:00 2001 From: Jiiniasu Date: Sun, 4 Sep 2016 18:32:24 +0200 Subject: [PATCH 10/44] Add Highscore Style Setting Add ability to select whether the highscore screen should display all scores or only the best score for each player, difficulty and duet-track. --- Output/Languages/English.xml | 3 + .../Ambient/Screens/ScreenOptionsGame.xml | 58 ++++++++++++++++++- .../Changelog/Changelog_ScreenOptionsGame.txt | 6 ++ Vocaluxe/Base/CConfig.cs | 1 + Vocaluxe/Base/CMain.cs | 5 ++ Vocaluxe/Lib/Database/CHighscoreDB.cs | 9 ++- Vocaluxe/Screens/CScreenOptionsGame.cs | 7 ++- VocaluxeLib/Enums.cs | 6 ++ VocaluxeLib/IBasic.cs | 2 + 9 files changed, 92 insertions(+), 5 deletions(-) diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index f5fc89bc..c3aefaf8 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -73,6 +73,8 @@ Total Normal Expanded + List all + List best Own music and background-music No own music Only own music @@ -183,6 +185,7 @@ Tabs Game difficulty Timer mode + Highscore style Record Options Device Input diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml b/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml index 5b3b6ec4..c546c94a 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml @@ -2,7 +2,7 @@ ScreenOptionsGame - 2 + 3 @@ -191,6 +191,20 @@ Outline TR_SCREENOGAME_TIMERMODE + + 75 + 467 + 0 + 27 + 0 + + + Left + Center + + Outline + TR_SCREENOGAME_HIGHSCORESTYLE +