diff --git a/.appveyor/gitDescribe.ps1 b/.appveyor/gitDescribe.ps1
index 98fe26ca..2181f00e 100644
--- a/.appveyor/gitDescribe.ps1
+++ b/.appveyor/gitDescribe.ps1
@@ -1,6 +1,6 @@
if($Env:APPVEYOR_PULL_REQUEST_NUMBER)
{
- $Env:VersionTag = "PR_$Env:APPVEYOR_PULL_REQUEST_NUMBER"
+ $Env:VersionTag = "0.0.0-na-PR_$Env:APPVEYOR_PULL_REQUEST_NUMBER"
Return $Env:VersionTag
}
diff --git a/.gitignore b/.gitignore
index 8f7e6068..9de55a61 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
obj
PitchTracker.dll
Thumbs.db
+.transifexrc
+tx.exe
*.mp4
*.pdb
*.csproj.user
@@ -26,6 +28,8 @@ Thumbs.db
*.vshost.*
*.userprefs
*.user
+*.VC.db
+*.VC.opendb
/*.vsp
/*.ctl
/Output/Config.xml
@@ -63,3 +67,5 @@ Thumbs.db
/packages
/Output/x64
/Output/x86
+/PitchTracker/bin
+/PitchTracker/obj
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/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/English.xml b/Output/Languages/English.xml
index 8827da1a..2cd71c39 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,20 +73,26 @@
Total
Normal
Expanded
- Own Music and Background Music
- No own Music
- Only own Music
+ List all
+ List best
+ Own music and background-music
+ No own music
+ Only own music
Only selected song
All
Only names and avatars
Nothing
+ Fill
+ Jump
+ Slide
+ Zoom
Bottom
Top
Top and bottom
Dynamic
Loading
Total
- Songs
+ songs
loaded
Main Menu
Sing
@@ -94,8 +100,8 @@
Options
Profiles
No profiles found!
- Party Mode Selection
- Party Mode
+ Party-Mode Selection
+ Party-mode
Description
Author
Version
@@ -108,12 +114,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!
@@ -130,16 +136,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
@@ -152,18 +158,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
@@ -173,48 +179,54 @@
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
+ Highscore style
Record Options
Device
Input
- Channel 1
- Channel 2
- Mic Delay
+ 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
- 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
+ Karaoke effect
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
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/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
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/Swedish.xml b/Output/Languages/Swedish.xml
index b30335bc..721e4023 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
+ Novis
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,196 @@
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
+ Lista alla
+ Lista bästa
+ 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
+ Topplistestil
+ 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!
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
diff --git a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml
index 3edf6ca5..1c67c701 100644
--- a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml
+++ b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml
@@ -187,7 +187,7 @@
Center
Outline
- 1)
+
0
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyMain.xml b/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyMain.xml
index 371c3e14..c1279d0d 100644
--- a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyMain.xml
+++ b/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyMain.xml
@@ -187,7 +187,7 @@
Center
Outline
- 1)
+
0
diff --git a/Output/Themes/Ambient/Screens/ScreenHighscore.xml b/Output/Themes/Ambient/Screens/ScreenHighscore.xml
index 4e997947..a97ba707 100644
--- a/Output/Themes/Ambient/Screens/ScreenHighscore.xml
+++ b/Output/Themes/Ambient/Screens/ScreenHighscore.xml
@@ -98,7 +98,7 @@
120
160
0
- 42
+ 35
0
@@ -792,4 +792,4 @@
-
\ No newline at end of file
+
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
+
@@ -519,6 +533,48 @@
Bold
3
+
+
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+ SelectSlide
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+
+ 500
+ 460
+ 700
+ 50
+ 0
+
+
+ 505
+ 465
+ 40
+ 40
+ 0
+
+
+ 1170
+ 465
+ 40
+ 40
+ 0
+
+
+
+
+
+
+
+ 27
+ 50
+ 0
+ 205.33
+ Outline
+ Bold
+ 2
+
diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml
index 95b8464d..b847dca2 100644
--- a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml
+++ b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml
@@ -2,7 +2,7 @@
ScreenOptionsRecord
- 4
+ 5
@@ -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/Ambient/Screens/ScreenOptionsSound.xml b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml
index 9b7e88c6..9929150b 100644
--- a/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml
+++ b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml
@@ -2,7 +2,7 @@
ScreenOptionsSound
- 3
+ 4
@@ -110,6 +110,20 @@
Outline
TR_SCREENOSOUND_GAMEMUSICVOLUME
+
+
+ 75
+ 407
+ 0
+ 27
+ 0
+
+
+ Left
+ Center
+
+ Outline
+ TR_SCREENOSOUND_KARAOKEEFFECT
@@ -361,6 +375,48 @@
Outline
Bold
3
+
+
+
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+ SelectSlide
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+
+ 500
+ 400
+ 700
+ 50
+ 0
+
+
+ 505
+ 405
+ 40
+ 40
+ 0
+
+
+ 1170
+ 405
+ 40
+ 40
+ 0
+
+
+
+
+
+
+
+ 27
+ 50
+ 0
+ 500
+ Outline
+ Bold
+ 2
diff --git a/Output/Themes/Changelog/Changelog_ScreenOptionsGame.txt b/Output/Themes/Changelog/Changelog_ScreenOptionsGame.txt
index e60b7e4a..fcc4de50 100644
--- a/Output/Themes/Changelog/Changelog_ScreenOptionsGame.txt
+++ b/Output/Themes/Changelog/Changelog_ScreenOptionsGame.txt
@@ -1,5 +1,11 @@
ScreenOptionsGame
+++++++++++
+Version 3:
+
+Add:
+
+
++++++++++
Version 2:
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/Output/Themes/Changelog/Changelog_ScreenOptionsSound.txt b/Output/Themes/Changelog/Changelog_ScreenOptionsSound.txt
index d83bd921..f12bf489 100644
--- a/Output/Themes/Changelog/Changelog_ScreenOptionsSound.txt
+++ b/Output/Themes/Changelog/Changelog_ScreenOptionsSound.txt
@@ -1,5 +1,15 @@
ScreenOptionsSound
+++++++++++
+Version 4:
+
+Add:
+
+
+
+and text for the description (Text7)
+"TR_SCREENOSOUND_KARAOKEEFFECT"
+
++++++++++
Version 3:
diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs
index ea133582..7d12b96c 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
@@ -120,6 +120,8 @@ namespace Vocaluxe.Base
[DefaultValue(EOffOn.TR_CONFIG_ON)] public EOffOn BackgroundMusicUseStart;
[XmlRanged(0, 100), DefaultValue(50)] public int PreviewMusicVolume;
[XmlRanged(0, 100), DefaultValue(80)] public int GameMusicVolume;
+ [DefaultValue(EOffOn.TR_CONFIG_OFF)] public EOffOn KaraokeEffect;
+ [XmlRanged(0, 1), DefaultValue(1.0f)] public float KaraokeEffectLevel;
// ReSharper restore MemberHidesStaticFromOuterClass
}
@@ -139,6 +141,7 @@ namespace Vocaluxe.Base
[DefaultValue(ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTTOM)] public ELyricsPosition LyricsPosition;
[DefaultValue(0.1f)] public float MinLineBreakTime; //Minimum time to show the text before it is (to be) sung (if possible)
[XmlArrayItem("Player"), XmlArray] public string[] Players;
+ [DefaultValue(EHighscoreStyle.TR_CONFIG_HIGHSCORE_LIST_BEST)] public EHighscoreStyle HighscoreStyle;
}
public struct SConfigVideo
@@ -452,6 +455,10 @@ namespace Vocaluxe.Base
return "Preview Volume from 0 to 100";
case "GameMusicVolume":
return "Game Volume from 0 to 100";
+ case "KaraokeEffect":
+ return "Apply a karaoke effect to song playback (EPlaybackLib.GstreamerSharp only)";
+ case "KaraokeEffectLevel":
+ return "The level of the karaoke effect [0-1] (EPlaybackLib.GstreamerSharp only)";
case "Language":
return "Game-Language";
case "SongFolder":
@@ -520,31 +527,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.PlayerChannel1 != 0 || t.PlayerChannel2 != 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.PlayerChannel1 == player || t.PlayerChannel2 == 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()
diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs
index fad913e8..8887982f 100644
--- a/Vocaluxe/Base/CDataBase.cs
+++ b/Vocaluxe/Base/CDataBase.cs
@@ -85,9 +85,9 @@ namespace Vocaluxe.Base
return _HighscoreDB.GetDataBaseSongInfos(artist, title, out numPlayed, out dateAdded, out highscoreID);
}
- public static List LoadScore(int songID, EGameMode gameMode)
+ public static List LoadScore(int songID, EGameMode gameMode, EHighscoreStyle style)
{
- return _HighscoreDB == null ? null : _HighscoreDB.LoadScore(songID, gameMode);
+ return _HighscoreDB == null ? null : _HighscoreDB.LoadScore(songID, gameMode, style);
}
public static int AddScore(SPlayer player)
diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs
index b5d2e0c7..3a131649 100644
--- a/Vocaluxe/Base/CMain.cs
+++ b/Vocaluxe/Base/CMain.cs
@@ -91,6 +91,11 @@ namespace Vocaluxe.Base
return CConfig.SongMenu;
}
+ public EHighscoreStyle GetHighscoreStyle()
+ {
+ return CConfig.Config.Game.HighscoreStyle;
+ }
+
public EOffOn GetVideosToBackground()
{
return CConfig.Config.Video.VideosToBackground;
diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs
index f8e498c8..f8126737 100644
--- a/Vocaluxe/Base/CParty.cs
+++ b/Vocaluxe/Base/CParty.cs
@@ -283,7 +283,7 @@ namespace Vocaluxe.Base
compilerParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
compilerParams.ReferencedAssemblies.Add("System.dll");
compilerParams.ReferencedAssemblies.Add("System.Core.dll");
- compilerParams.ReferencedAssemblies.Add("libs\\managed\\VocaluxeLib.dll");
+ compilerParams.ReferencedAssemblies.Add(Path.Combine("libs","managed","VocaluxeLib.dll"));
compilerParams.GenerateInMemory = true;
#if DEBUG
compilerParams.IncludeDebugInformation = true;
diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs
index f2f84ed8..9cc3201a 100644
--- a/Vocaluxe/Base/CPlaylists.cs
+++ b/Vocaluxe/Base/CPlaylists.cs
@@ -42,6 +42,11 @@ namespace Vocaluxe.Base
get { return _Playlists.Select(t => t.Name).ToList(); }
}
+ public static List Ids
+ {
+ get { return _Playlists.Select(t => t.Id).ToList(); }
+ }
+
public static int NumPlaylists
{
get { return _Playlists.Count; }
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/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs
index 3ad3a4ef..05c52e2c 100644
--- a/Vocaluxe/Base/CSettings.cs
+++ b/Vocaluxe/Base/CSettings.cs
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Reflection;
using System.Windows.Forms;
using VocaluxeLib;
@@ -53,10 +54,44 @@ namespace Vocaluxe.Base
public static EProgramState ProgramState = EProgramState.Start;
//Adjusting of programName and version now in the assembly config.
- //I'd use the major and minor for Main releases, build number for every public release and revision for every bugfix version without any features
- private const string _ProgramCodeName = "Shining Heaven";
+ private static readonly Dictionary _CodeNames = new Dictionary()
+ {
+ {"0.3.", "Shining Heaven"},
+ {"0.4.", "Blue Sunrise"}
+ };
- public const ERevision VersionRevision = ERevision.Beta;
+ private static string _ProgramCodeName
+ {
+ get
+ {
+ var versionParts = Application.ProductVersion.Split('.');
+ string name;
+ _CodeNames.TryGetValue($"{versionParts[0]}.{versionParts[1]}.", out name);
+ if (name != null)
+ return name;
+ return "Unnamed Version";
+ }
+ }
+
+ public static ERevision VersionRevision
+ {
+ get
+ {
+ if (_Version.ToLower().Contains("alpha"))
+ {
+ return ERevision.Alpha;
+ }
+ if (_Version.ToLower().Contains("beta"))
+ {
+ return ERevision.Beta;
+ }
+ if (_Version.ToLower().Contains("rc"))
+ {
+ return ERevision.RC;
+ }
+ return ERevision.Release;
+ }
+ }
public const int DatabaseHighscoreVersion = 3;
public const int DatabaseCoverVersion = 1;
@@ -177,8 +212,7 @@ namespace Vocaluxe.Base
{
get
{
- Version v = _Assembly.Version;
- return "v" + v.Major + "." + v.Minor + "." + v.Build;
+ return Application.ProductVersion.Split('-').First();
}
}
@@ -186,11 +220,10 @@ namespace Vocaluxe.Base
{
string version = _Version + " (" + _Arch + ")";
- // ReSharper disable ConditionIsAlwaysTrueOrFalse
- if (VersionRevision != ERevision.Release)
+ string gitversion = Application.ProductVersion;
+
+ if (VersionRevision != ERevision.Release || gitversion.Split('-')[1] != "0")
{
- // ReSharper restore ConditionIsAlwaysTrueOrFalse
- string gitversion = Application.ProductVersion;
version += " " + _GetVersionStatus() + String.Format(" ({0})", gitversion);
}
@@ -200,10 +233,8 @@ namespace Vocaluxe.Base
public static string GetFullVersionText()
{
string version = ProgramName;
-
- // ReSharper disable ConditionIsAlwaysTrueOrFalse
+
if (_ProgramCodeName != "")
- // ReSharper restore ConditionIsAlwaysTrueOrFalse
version += " \"" + _ProgramCodeName + "\"";
return version + " " + _GetVersionText();
@@ -211,11 +242,9 @@ namespace Vocaluxe.Base
private static string _GetVersionStatus()
{
- string result;
+ string result = "";
- // ReSharper disable ConditionIsAlwaysTrueOrFalse
if (VersionRevision != ERevision.Release)
- // ReSharper restore ConditionIsAlwaysTrueOrFalse
result = Enum.GetName(typeof(ERevision), VersionRevision);
return result;
diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs
index dc76f86f..5acbd7c9 100644
--- a/Vocaluxe/Base/CSound.cs
+++ b/Vocaluxe/Base/CSound.cs
@@ -22,6 +22,7 @@ using Vocaluxe.Lib.Sound.Playback.OpenAL;
using Vocaluxe.Lib.Sound.Playback.PortAudio;
using VocaluxeLib;
using System.Threading;
+using Vocaluxe.Lib.Sound;
namespace Vocaluxe.Base
{
@@ -88,9 +89,9 @@ namespace Vocaluxe.Base
}
#region Stream Handling
- public static int Load(string media, bool loop = false, bool prescan = false)
+ public static int Load(string media, bool loop = false, bool prescan = false, EAudioEffect effekt = EAudioEffect.None)
{
- return _Playback.Load(media, loop, prescan);
+ return _Playback.Load(media, loop, prescan, effekt);
}
public static void Close(int stream)
diff --git a/Vocaluxe/Lib/Database/CHighscoreDB.cs b/Vocaluxe/Lib/Database/CHighscoreDB.cs
index 6733e217..35e9fe87 100644
--- a/Vocaluxe/Lib/Database/CHighscoreDB.cs
+++ b/Vocaluxe/Lib/Database/CHighscoreDB.cs
@@ -266,7 +266,7 @@ namespace Vocaluxe.Lib.Database
return lastInsertID;
}
- public List LoadScore(int songID, EGameMode gameMode)
+ public List LoadScore(int songID, EGameMode gameMode, EHighscoreStyle style)
{
var scores = new List();
using (var connection = new SQLiteConnection())
@@ -304,9 +304,37 @@ namespace Vocaluxe.Lib.Database
if (dataBaseSongID < 0)
return scores;
- command.CommandText = "SELECT PlayerName, Score, Date, Difficulty, LineNr, id FROM Scores " +
- "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " +
- "ORDER BY [Score] DESC";
+ switch (style)
+ {
+ case EHighscoreStyle.TR_CONFIG_HIGHSCORE_LIST_BEST:
+ command.CommandText = "SELECT os.PlayerName, os.Score, os.Date, os.Difficulty, os.LineNr, os.id " +
+ "FROM Scores os " +
+ "INNER JOIN ( " +
+ "SELECT sc.PlayerName, sc.Score, sc.Difficulty, sc.LineNr, MIN(sc.Date) AS Date " +
+ "FROM Scores sc " +
+ "INNER JOIN ( " +
+ "SELECT Playername, MAX(Score) AS Score, Difficulty, LineNr " +
+ "FROM Scores " +
+ "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " +
+ "GROUP BY PlayerName, Difficulty, LineNr " +
+ ") AS mc " +
+ "ON sc.PlayerName = mc.PlayerName AND sc.Difficulty = mc.Difficulty AND sc.LineNr = mc.LineNr AND sc.Score = mc.Score " +
+ "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " +
+ "GROUP BY sc.PlayerName, sc.Difficulty, sc.LineNr, sc.Score " +
+ ") AS iq " +
+ "ON os.PlayerName = iq.PlayerName AND os.Difficulty = iq.Difficulty AND os.LineNr = iq.LineNr AND os.Score = iq.Score AND os.Date = iq.Date " +
+ "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " +
+ "GROUP BY os.PlayerName, os.Difficulty, os.LineNr, os.Score " +
+ "ORDER BY os.Score DESC, os.Date ASC";
+ break;
+ case EHighscoreStyle.TR_CONFIG_HIGHSCORE_LIST_ALL:
+ command.CommandText = "SELECT PlayerName, Score, Date, Difficulty, LineNr, id " +
+ "FROM Scores " +
+ "WHERE [SongID] = @SongID AND [Medley] = @Medley AND [Duet] = @Duet AND [ShortSong] = @ShortSong " +
+ "ORDER BY [Score] DESC, [Date] ASC";
+ break;
+ }
+
command.Parameters.Add("@SongID", DbType.Int32, 0).Value = dataBaseSongID;
command.Parameters.Add("@Medley", DbType.Int32, 0).Value = medley;
command.Parameters.Add("@Duet", DbType.Int32, 0).Value = duet;
@@ -475,7 +503,7 @@ namespace Vocaluxe.Lib.Database
command.ExecuteNonQuery();
command.CommandText = "CREATE TABLE IF NOT EXISTS Songs ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
- "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER, DateAdded BIGING);";
+ "Artist TEXT NOT NULL, Title TEXT NOT NULL, NumPlayed INTEGER, DateAdded BIGINT);";
command.ExecuteNonQuery();
command.CommandText = "CREATE TABLE IF NOT EXISTS Scores ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
diff --git a/Vocaluxe/Lib/Input/CGamePad.cs b/Vocaluxe/Lib/Input/CGamePad.cs
index 482dce1a..04810d7a 100644
--- a/Vocaluxe/Lib/Input/CGamePad.cs
+++ b/Vocaluxe/Lib/Input/CGamePad.cs
@@ -161,7 +161,7 @@ namespace Vocaluxe.Lib.Input
key = Keys.Space;
else if (buttonStates.Buttons.A == OpenTK.Input.ButtonState.Pressed && _OldButtonStates.Buttons.A == OpenTK.Input.ButtonState.Released)
key = Keys.Enter;
- else if (buttonStates.Buttons.X == OpenTK.Input.ButtonState.Pressed && _OldButtonStates.Buttons.X == OpenTK.Input.ButtonState.Released)
+ else if (buttonStates.Buttons.B == OpenTK.Input.ButtonState.Pressed && _OldButtonStates.Buttons.B == OpenTK.Input.ButtonState.Released)
key = Keys.Escape;
else if (buttonStates.Buttons.Back == OpenTK.Input.ButtonState.Pressed && _OldButtonStates.Buttons.Back == OpenTK.Input.ButtonState.Released)
key = Keys.Back;
diff --git a/Vocaluxe/Lib/Sound/EAudioEffect.cs b/Vocaluxe/Lib/Sound/EAudioEffect.cs
new file mode 100644
index 00000000..cc85a9cf
--- /dev/null
+++ b/Vocaluxe/Lib/Sound/EAudioEffect.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Vocaluxe.Lib.Sound
+{
+ [Flags]
+ public enum EAudioEffect
+ {
+ None = 0,
+ Karaoke = 1
+ }
+}
diff --git a/Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs b/Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs
index 3a421cce..35e62978 100644
--- a/Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs
+++ b/Vocaluxe/Lib/Sound/Playback/CAudioStreamBase.cs
@@ -25,6 +25,7 @@ namespace Vocaluxe.Lib.Sound.Playback
private readonly int _ID;
protected readonly string _Medium;
protected readonly bool _Loop;
+ protected readonly EAudioEffect _Effect;
protected ICloseStreamListener _CloseStreamListener;
@@ -48,11 +49,12 @@ namespace Vocaluxe.Lib.Sound.Playback
public abstract bool IsPaused { get; set; }
public abstract bool IsFinished { get; }
- protected CAudioStreamBase(int id, string medium, bool loop)
+ protected CAudioStreamBase(int id, string medium, bool loop, EAudioEffect effect = EAudioEffect.None)
{
_ID = id;
_Medium = medium;
_Loop = loop;
+ _Effect = effect;
}
~CAudioStreamBase()
diff --git a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs
index 1a12441c..62bbec70 100644
--- a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs
+++ b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs
@@ -113,13 +113,13 @@ namespace Vocaluxe.Lib.Sound.Playback
#region Stream Handling
//Factory method to get a stream instance
- protected abstract IAudioStream _CreateStream(int id, string media, bool loop);
+ protected abstract IAudioStream _CreateStream(int id, string media, bool loop, EAudioEffect effect = EAudioEffect.None);
- public int Load(string medium, bool loop = false, bool prescan = false)
+ public int Load(string medium, bool loop = false, bool prescan = false, EAudioEffect effect = EAudioEffect.None)
{
if (!_Initialized)
return -1;
- IAudioStream stream = _CreateStream(_NextID++, medium, loop);
+ IAudioStream stream = _CreateStream(_NextID++, medium, loop, effect);
if (stream.Open(prescan))
{
diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs
index 73c624f8..6de16180 100644
--- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs
+++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudio.cs
@@ -35,26 +35,29 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
#if ARCH_X64
const string varName = "GSTREAMER_1_0_ROOT_X86_64";
#endif
- string gstreamerEnvVar = Environment.GetEnvironmentVariable(varName, EnvironmentVariableTarget.User);
string dllDirectory;
- if (gstreamerEnvVar == null || !Directory.Exists(gstreamerEnvVar))
- {
+
#if ARCH_X86
- dllDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "libs\\unmanaged\\gstreamer86\\bin\\");
+ dllDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "libs\\unmanaged\\gstreamer86\\bin\\");
#endif
#if ARCH_X64
- dllDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "libs\\unmanaged\\gstreamer64\\bin\\");
+ dllDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "libs\\unmanaged\\gstreamer64\\bin\\");
#endif
- if (!Directory.Exists(dllDirectory))
+ if (!Directory.Exists(dllDirectory))
+ {
+ string gstreamerEnvVar = Environment.GetEnvironmentVariable(varName, EnvironmentVariableTarget.User);
+
+ if (gstreamerEnvVar == null || !Directory.Exists(gstreamerEnvVar))
{
CLog.LogError("Gstreamer not found! Make sure you installed it correctly and if it set the environment variable '" + varName + "'!", true);
return false;
}
+ else
+ {
+ dllDirectory = gstreamerEnvVar + "bin\\";
+ }
}
- else
- {
- dllDirectory = gstreamerEnvVar + "bin\\";
- }
+
COSFunctions.AddEnvironmentPath(dllDirectory);
#endif
@@ -72,9 +75,9 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
Application.Deinit();
}
- protected override IAudioStream _CreateStream(int id, string media, bool loop)
+ protected override IAudioStream _CreateStream(int id, string media, bool loop, EAudioEffect effect = EAudioEffect.None)
{
- return new CGstreamerSharpAudioStream(id, media, loop);
+ return new CGstreamerSharpAudioStream(id, media, loop, effect);
}
}
}
\ No newline at end of file
diff --git a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs
index 5f4e1f40..09248e60 100644
--- a/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs
+++ b/Vocaluxe/Lib/Sound/Playback/GstreamerSharp/CGstreamerSharpAudioStream.cs
@@ -19,6 +19,7 @@ using System;
using GLib;
using Gst;
using Vocaluxe.Base;
+using VocaluxeLib;
namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
{
@@ -101,7 +102,7 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
}
}
- public CGstreamerSharpAudioStream(int id, string medium, bool loop) : base(id, medium, loop) {}
+ public CGstreamerSharpAudioStream(int id, string medium, bool loop, EAudioEffect effect = EAudioEffect.None) : base(id, medium, loop, effect) {}
public override bool Open(bool prescan)
{
@@ -123,9 +124,29 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
}
var audioSinkBin = new Bin("Audiosink");
- audioSinkBin.Add(convert);
- audioSinkBin.Add(audiosink);
- convert.Link(audiosink);
+ Element audiokaraoke = null;
+ if (_Effect.HasFlag(EAudioEffect.Karaoke))
+ {
+ audiokaraoke = ElementFactory.Make("audiokaraoke", "karaoke");
+ audioSinkBin.Add(audiokaraoke);
+ audioSinkBin.Add(convert);
+ audioSinkBin.Add(audiosink);
+
+ audiokaraoke.Link(audiosink);
+ audiokaraoke["level"] = CConfig.Config.Sound.KaraokeEffectLevel;
+ audiokaraoke["mono-level"] = CConfig.Config.Sound.KaraokeEffectLevel;
+
+ convert.Link(audiokaraoke);
+ }
+ else
+ {
+ audioSinkBin.Add(convert);
+ audioSinkBin.Add(audiosink);
+ convert.Link(audiosink);
+ }
+
+
+
Pad pad = convert.GetStaticPad("sink");
GhostPad ghostpad = new GhostPad("sink", pad);
@@ -135,6 +156,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
convert.Dispose();
audiosink.Dispose();
audioSinkBin.Dispose();
+ if (audiokaraoke != null)
+ {
+ audiokaraoke.Dispose();
+ }
return false;
}
@@ -145,6 +170,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
audiosink.Dispose();
audioSinkBin.Dispose();
ghostpad.Dispose();
+ if (audiokaraoke != null)
+ {
+ audiokaraoke.Dispose();
+ }
return false;
}
if (!audioSinkBin.AddPad(ghostpad))
@@ -154,6 +183,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
audiosink.Dispose();
audioSinkBin.Dispose();
ghostpad.Dispose();
+ if (audiokaraoke != null)
+ {
+ audiokaraoke.Dispose();
+ }
return false;
}
@@ -165,6 +198,10 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
audiosink.Dispose();
audioSinkBin.Dispose();
ghostpad.Dispose();
+ if (audiokaraoke != null)
+ {
+ audiokaraoke.Dispose();
+ }
return false;
}
_Element["audio-sink"] = audioSinkBin;
diff --git a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs
index 7bb4a9ad..20792586 100644
--- a/Vocaluxe/Lib/Sound/Playback/IPlayback.cs
+++ b/Vocaluxe/Lib/Sound/Playback/IPlayback.cs
@@ -36,7 +36,7 @@ namespace Vocaluxe.Lib.Sound.Playback
void CloseAll();
#region stream Handling
- int Load(string medium, bool loop = false, bool prescan = false);
+ int Load(string medium, bool loop = false, bool prescan = false, EAudioEffect effekt= EAudioEffect.None);
void Close(int streamID);
void Play(int streamID);
diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs
index 74a3704e..13ee98ad 100644
--- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs
+++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenALPlay.cs
@@ -44,9 +44,9 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL
_Context = null;
}
- protected override IAudioStream _CreateStream(int id, string media, bool loop)
+ protected override IAudioStream _CreateStream(int id, string media, bool loop, EAudioEffect effect = EAudioEffect.None)
{
- return new COpenAlStream(id, media, loop);
+ return new COpenAlStream(id, media, loop, effect);
}
}
}
\ No newline at end of file
diff --git a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs
index f9b5f41d..fd22e07c 100644
--- a/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs
+++ b/Vocaluxe/Lib/Sound/Playback/OpenAL/COpenAlStream.cs
@@ -122,7 +122,7 @@ namespace Vocaluxe.Lib.Sound.Playback.OpenAL
}
}
- public COpenAlStream(int id, string medium, bool loop) : base(id, medium, loop) {}
+ public COpenAlStream(int id, string medium, bool loop, EAudioEffect effect = EAudioEffect.None) : base(id, medium, loop, effect) {}
protected override void _Dispose(bool disposing)
{
diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs
index e96eeeab..f5110988 100644
--- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs
+++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioPlay.cs
@@ -29,9 +29,9 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio
return true;
}
- protected override IAudioStream _CreateStream(int id, string media, bool loop)
+ protected override IAudioStream _CreateStream(int id, string media, bool loop, EAudioEffect effect = EAudioEffect.None)
{
- return new CPortAudioStream(id, media, loop);
+ return new CPortAudioStream(id, media, loop, effect);
}
}
}
\ No newline at end of file
diff --git a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs
index 34421547..2002aa9c 100644
--- a/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs
+++ b/Vocaluxe/Lib/Sound/Playback/PortAudio/CPortAudioStream.cs
@@ -131,7 +131,7 @@ namespace Vocaluxe.Lib.Sound.Playback.PortAudio
}
}
- public CPortAudioStream(int id, string medium, bool loop) : base(id, medium, loop) {}
+ public CPortAudioStream(int id, string medium, bool loop, EAudioEffect effect = EAudioEffect.None) : base(id, medium, loop, effect) {}
public override bool Open(bool prescan)
{
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/Linux/Build/PostBuildEvent.sh b/Vocaluxe/Linux/Build/PostBuildEvent.sh
index c9c2d125..92b73c10 100755
--- a/Vocaluxe/Linux/Build/PostBuildEvent.sh
+++ b/Vocaluxe/Linux/Build/PostBuildEvent.sh
@@ -2,4 +2,6 @@
PROJECT=$1
cd $PROJECT
sed -i -r -e 's/AssemblyInformationalVersion\(".*?"\)/AssemblyInformationalVersion("GITVERSION")/' $PROJECT/Properties/AssemblyInfo.cs
+sed -i -r -e 's/AssemblyVersion\(".*?"\)/AssemblyVersion("SHORTVERSION")/' $PROJECT/Properties/AssemblyInfo.cs
+sed -i -r -e 's/AssemblyFileVersion\(".*?"\)/AssemblyFileVersion("SHORTVERSION")/' $PROJECT/Properties/AssemblyInfo.cs
sed -i -e 's/var matchingServerVersion = "";/var matchingServerVersion = "'$(git describe --long)'";/' $PROJECT/../Output/Website/js/main.js
diff --git a/Vocaluxe/Linux/Build/PreBuildEvent.sh b/Vocaluxe/Linux/Build/PreBuildEvent.sh
index 4d7c6ef7..9fe7bd5b 100755
--- a/Vocaluxe/Linux/Build/PreBuildEvent.sh
+++ b/Vocaluxe/Linux/Build/PreBuildEvent.sh
@@ -2,3 +2,5 @@
PROJECT=$1
cd $PROJECT
sed -i -e s/GITVERSION/$(git describe --long)/ $PROJECT/Properties/AssemblyInfo.cs
+shortv=$(git describe --abbrev=0 | sed -e 's/alpha/0/' -e 's/beta/1/' -e 's/rc/2/')
+sed -i -e s/SHORTVERSION/${shortv}/ $PROJECT/Properties/AssemblyInfo.cs
diff --git a/Vocaluxe/Properties/AssemblyInfo.cs b/Vocaluxe/Properties/AssemblyInfo.cs
index 3e00fede..4cde4f89 100644
--- a/Vocaluxe/Properties/AssemblyInfo.cs
+++ b/Vocaluxe/Properties/AssemblyInfo.cs
@@ -27,7 +27,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Vocaluxe")]
-[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -49,6 +49,6 @@ using System.Runtime.InteropServices;
// Revision
//
-[assembly: AssemblyVersion("0.3.0.83")]
-[assembly: AssemblyFileVersion("0.3.0.83")]
+[assembly: AssemblyVersion("SHORTVERSION")]
+[assembly: AssemblyFileVersion("SHORTVERSION")]
[assembly: AssemblyInformationalVersion("GITVERSION")]
diff --git a/Vocaluxe/Screens/CScreenHighscore.cs b/Vocaluxe/Screens/CScreenHighscore.cs
index 9ed25e9b..182e68ed 100644
--- a/Vocaluxe/Screens/CScreenHighscore.cs
+++ b/Vocaluxe/Screens/CScreenHighscore.cs
@@ -177,7 +177,7 @@ namespace Vocaluxe.Screens
name += " (P" + (_Scores[_Round][_Pos + p].VoiceNr + 1) + ")";
_Texts[_TextName[p]].Text = name;
- _Texts[_TextScore[p]].Text = _Scores[_Round][_Pos + p].Score.ToString("00000");
+ _Texts[_TextScore[p]].Text = _Scores[_Round][_Pos + p].Score.ToString("D");
_Texts[_TextDate[p]].Text = _Scores[_Round][_Pos + p].Date;
_ParticleEffects[_ParticleEffectNew[p]].Visible = _IsNewEntry(_Scores[_Round][_Pos + p].ID);
@@ -239,7 +239,8 @@ namespace Vocaluxe.Screens
{
int songID = CGame.GetSong(round).ID;
EGameMode gameMode = CGame.GetGameMode(round);
- _Scores[round] = CDataBase.LoadScore(songID, gameMode);
+ EHighscoreStyle style = CBase.Config.GetHighscoreStyle();
+ _Scores[round] = CDataBase.LoadScore(songID, gameMode, style);
}
}
diff --git a/Vocaluxe/Screens/CScreenMain.cs b/Vocaluxe/Screens/CScreenMain.cs
index f45915da..a884c016 100644
--- a/Vocaluxe/Screens/CScreenMain.cs
+++ b/Vocaluxe/Screens/CScreenMain.cs
@@ -54,9 +54,7 @@ namespace Vocaluxe.Screens
base.LoadTheme(xmlPath);
_Texts[_TextRelease].Text = CSettings.GetFullVersionText();
- // ReSharper disable ConditionIsAlwaysTrueOrFalse
- _Texts[_TextRelease].Visible = CSettings.VersionRevision != ERevision.Release;
- // ReSharper restore ConditionIsAlwaysTrueOrFalse
+ _Texts[_TextRelease].Visible = true;
_Statics[_StaticWarningProfiles].Visible = false;
_Texts[_TextWarningProfiles].Visible = false;
}
diff --git a/Vocaluxe/Screens/CScreenOptionsGame.cs b/Vocaluxe/Screens/CScreenOptionsGame.cs
index 71ff7197..485ce2b0 100644
--- a/Vocaluxe/Screens/CScreenOptionsGame.cs
+++ b/Vocaluxe/Screens/CScreenOptionsGame.cs
@@ -27,7 +27,7 @@ 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 2; }
+ get { return 3; }
}
private const string _SelectSlideLanguage = "SelectSlideLanguage";
@@ -36,6 +36,7 @@ namespace Vocaluxe.Screens
private const string _SelectSlideSongSorting = "SelectSlideSongSorting";
private const string _SelectSlideTabs = "SelectSlideTabs";
private const string _SelectSlideTimerMode = "SelectSlideTimerMode";
+ private const string _SelectSlideHighscoreStyle = "SelectSlideHighscoreStyle";
private const string _ButtonExit = "ButtonExit";
private const string _ButtonServer = "ButtonServer";
@@ -45,7 +46,7 @@ namespace Vocaluxe.Screens
base.Init();
_ThemeButtons = new string[] {_ButtonExit, _ButtonServer};
- _ThemeSelectSlides = new string[] {_SelectSlideLanguage, _SelectSlideDebugLevel, _SelectSlideSongMenu, _SelectSlideSongSorting, _SelectSlideTabs, _SelectSlideTimerMode};
+ _ThemeSelectSlides = new string[] {_SelectSlideLanguage, _SelectSlideDebugLevel, _SelectSlideSongMenu, _SelectSlideSongSorting, _SelectSlideTabs, _SelectSlideTimerMode, _SelectSlideHighscoreStyle};
}
public override void LoadTheme(string xmlPath)
@@ -60,6 +61,7 @@ namespace Vocaluxe.Screens
_SelectSlides[_SelectSlideSongSorting].SetValues((int)CConfig.Config.Game.SongSorting);
_SelectSlides[_SelectSlideTabs].SetValues((int)CConfig.Config.Game.Tabs);
_SelectSlides[_SelectSlideTimerMode].SetValues((int)CConfig.Config.Game.TimerMode);
+ _SelectSlides[_SelectSlideHighscoreStyle].SetValues((int)CConfig.Config.Game.HighscoreStyle);
}
public override bool HandleInput(SKeyEvent keyEvent)
@@ -140,6 +142,7 @@ namespace Vocaluxe.Screens
CConfig.Config.Game.SongSorting = (ESongSorting)_SelectSlides[_SelectSlideSongSorting].Selection;
CConfig.Config.Game.Tabs = (EOffOn)_SelectSlides[_SelectSlideTabs].Selection;
CConfig.Config.Game.TimerMode = (ETimerMode)_SelectSlides[_SelectSlideTimerMode].Selection;
+ CConfig.Config.Game.HighscoreStyle = (EHighscoreStyle)_SelectSlides[_SelectSlideHighscoreStyle].Selection;
CConfig.SaveConfig();
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)
diff --git a/Vocaluxe/Screens/CScreenOptionsSound.cs b/Vocaluxe/Screens/CScreenOptionsSound.cs
index b3deb818..c3d47d1f 100644
--- a/Vocaluxe/Screens/CScreenOptionsSound.cs
+++ b/Vocaluxe/Screens/CScreenOptionsSound.cs
@@ -27,7 +27,7 @@ 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 3; }
+ get { return 4; }
}
private const string _SelectSlideBackgroundMusic = "SelectSlideBackgroundMusic";
@@ -35,6 +35,7 @@ namespace Vocaluxe.Screens
private const string _SelectSlideBackgroundMusicSource = "SelectSlideBackgroundMusicSource";
private const string _SelectSlidePreviewMusicVolume = "SelectSlidePreviewMusicVolume";
private const string _SelectSlideGameMusicVolume = "SelectSlideGameMusicVolume";
+ private const string _SelectSlideKaraokeEffect = "SelectSlideKaraokeEffect";
private const string _ButtonExit = "ButtonExit";
@@ -46,7 +47,7 @@ namespace Vocaluxe.Screens
_ThemeButtons = new string[] {_ButtonExit};
_ThemeSelectSlides = new string[]
- {_SelectSlideBackgroundMusic, _SelectSlideBackgroundMusicVolume, _SelectSlideBackgroundMusicSource, _SelectSlidePreviewMusicVolume, _SelectSlideGameMusicVolume};
+ {_SelectSlideBackgroundMusic, _SelectSlideBackgroundMusicVolume, _SelectSlideBackgroundMusicSource, _SelectSlidePreviewMusicVolume, _SelectSlideGameMusicVolume, _SelectSlideKaraokeEffect};
}
public override void LoadTheme(string xmlPath)
@@ -64,6 +65,11 @@ namespace Vocaluxe.Screens
_SelectSlides[_SelectSlideGameMusicVolume].AddValues(new string[]
{"0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100"});
_SelectSlides[_SelectSlideGameMusicVolume].Selection = CConfig.GameMusicVolume / 5;
+ if (CConfig.Config.Sound.PlayBackLib == EPlaybackLib.GstreamerSharp)
+ {
+ _SelectSlides[_SelectSlideKaraokeEffect].SetValues((int)CConfig.Config.Sound.KaraokeEffect);
+ _SelectSlides[_SelectSlideBackgroundMusicSource].Selection = (int)CConfig.Config.Sound.KaraokeEffect;
+ }
}
public override bool HandleInput(SKeyEvent keyEvent)
@@ -147,6 +153,10 @@ namespace Vocaluxe.Screens
CConfig.Config.Sound.BackgroundMusic = (EBackgroundMusicOffOn)_SelectSlides[_SelectSlideBackgroundMusic].Selection;
CConfig.Config.Sound.BackgroundMusicSource = (EBackgroundMusicSource)_SelectSlides[_SelectSlideBackgroundMusicSource].Selection;
CConfig.BackgroundMusicVolume = _SelectSlides[_SelectSlideBackgroundMusicVolume].Selection * 5;
+ if (CConfig.Config.Sound.PlayBackLib == EPlaybackLib.GstreamerSharp)
+ {
+ CConfig.Config.Sound.KaraokeEffect = (EOffOn)_SelectSlides[_SelectSlideKaraokeEffect].Selection;
+ }
CConfig.SaveConfig();
CBackgroundMusic.SetMusicSource(CConfig.Config.Sound.BackgroundMusicSource);
diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs
index 829c69d1..7bf7e042 100644
--- a/Vocaluxe/Screens/CScreenSing.cs
+++ b/Vocaluxe/Screens/CScreenSing.cs
@@ -24,6 +24,7 @@ using System.Linq;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Base.Fonts;
+using Vocaluxe.Lib.Sound;
using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
@@ -525,7 +526,7 @@ namespace Vocaluxe.Screens
songname += " (" + CGame.RoundNr + "/" + rounds + ")";
_Texts[_TextSongName].Text = songname;
- _CurrentStream = CSound.Load(song.GetMP3(), false, true);
+ _CurrentStream = CSound.Load(song.GetMP3(), false, true, CConfig.Config.Sound.KaraokeEffect == EOffOn.TR_CONFIG_ON ? EAudioEffect.Karaoke : EAudioEffect.None);
CSound.SetStreamVolume(_CurrentStream, 100);
CSound.SetPosition(_CurrentStream, song.Start);
_CurrentTime = song.Start;
diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs
index 5d49a606..c14037ba 100644
--- a/Vocaluxe/Screens/CScreenSong.cs
+++ b/Vocaluxe/Screens/CScreenSong.cs
@@ -372,9 +372,9 @@ namespace Vocaluxe.Screens
else if (_Buttons[_ButtonOptionsOpenSelectedItem].Selected)
_HandleSelectButton();
else if (_SelectSlides[_SelectSlideOptionsPlaylistOpen].Selected)
- _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].Selection);
+ _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].SelectedTag);
else if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selected)
- _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1);
+ _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag);
else if (_Buttons[_ButtonOptionsRandomMedley].Selected)
_ToggleSongOptions(ESongOptionsView.Medley);
else if (_Buttons[_ButtonOptionsStartMedley].Selected)
@@ -533,12 +533,12 @@ namespace Vocaluxe.Screens
}
else if (_SelectSlides[_SelectSlideOptionsPlaylistOpen].IsValueSelected)
{
- _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].Selection);
+ _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistOpen].SelectedTag);
return true;
}
else if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].IsValueSelected)
{
- _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1);
+ _OpenPlaylist(_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag);
return true;
}
else if (_Buttons[_ButtonOptionsRandomMedley].Selected)
@@ -1279,16 +1279,16 @@ namespace Vocaluxe.Screens
private void _UpdatePlaylistNames()
{
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Clear();
- _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST");
- _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.Names);
+ _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST", tag: -1);
+ _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.Names, CPlaylists.Ids);
_SelectSlides[_SelectSlideOptionsPlaylistOpen].Clear();
- _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.Names);
+ _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.Names, CPlaylists.Ids);
}
private void _OpenAndAddPlaylistAction()
{
- if (_Playlist.ActivePlaylistID != (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) &&
- (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) != -1)
+ if (_Playlist.ActivePlaylistID != (_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag) &&
+ (_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag) != -1)
{
//Open an existing playlist and add song
//Check selected game-mode
@@ -1301,9 +1301,9 @@ namespace Vocaluxe.Screens
gm = EGameMode.TR_GAMEMODE_NORMAL;
//Check if Playlist really exists
- if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1 >= 0)
+ if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag >= 0)
{
- _Playlist.ActivePlaylistID = _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1;
+ _Playlist.ActivePlaylistID = _SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag;
//Add song to playlist
CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm);
@@ -1314,7 +1314,7 @@ namespace Vocaluxe.Screens
_Playlist.ScrollToBottom();
}
}
- else if ((_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) == -1)
+ else if ((_SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag) == -1)
{
//Create a new playlist and add song
//Check selected game-mode
@@ -1336,8 +1336,8 @@ namespace Vocaluxe.Screens
_OpenPlaylist(_Playlist.ActivePlaylistID);
//Add new playlist to select-slide
- _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID));
- _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID));
+ _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID), _Playlist.ActivePlaylistID);
+ _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID), _Playlist.ActivePlaylistID);
}
else
{
@@ -1359,7 +1359,7 @@ namespace Vocaluxe.Screens
private void _SetSelectSlidePlaylistToCurrentPlaylist()
{
if (_Playlist.ActivePlaylistID > -1)
- _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = _Playlist.ActivePlaylistID + 1;
+ _SelectSlides[_SelectSlideOptionsPlaylistAdd].SelectedTag = _Playlist.ActivePlaylistID;
else
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = 0;
}
diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj
index ed0f75be..66e6b613 100644
--- a/Vocaluxe/Vocaluxe.csproj
+++ b/Vocaluxe/Vocaluxe.csproj
@@ -185,6 +185,7 @@
+
@@ -478,12 +479,12 @@
xcopy /E /D /Y "$(ProjectDir)\Website" "$(SolutionDir)\PhoneGap"
powershell -command "if($Env:GIT_VERSION_TAG) {$version = $Env:GIT_VERSION_TAG;} else {$version = git describe --long;}(Get-Content -Encoding UTF8 '$(ProjectDir)..\Output\Website\js\main.js') | Foreach-Object {$_ -replace '(?<=var *matchingServerVersion * = *\")\w*(?=\" *;)', "$version"} | Set-Content -Encoding UTF8 '$(ProjectDir)..\Output\Website\js\main.js'"
-powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs') | Foreach-Object {$_ -replace '(?<=AssemblyInformationalVersion\()(.*)(?=\))', '\"GITVERSION\"'} | Set-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs'"
+powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs') | Foreach-Object {$_ -replace '(?<=AssemblyInformationalVersion\(\").*(?=\")', 'GITVERSION'} | Foreach-Object {$_ -replace '(?<=(AssemblyVersion|AssemblyFileVersion)\(\").*(?=\")', 'SHORTVERSION'} | Set-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs' "
cp -ruT "$(ProjectDir)Website" "$(SolutionDir)/PhoneGap"
$(ProjectDir)Linux/Build/PostBuildEvent.sh $(ProjectDir)
- powershell -command "if($Env:GIT_VERSION_TAG) {$version = $Env:GIT_VERSION_TAG;} else {$version = git describe --long;} (Get-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs') | Foreach-Object {$_ -replace 'GITVERSION', $version} | Set-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs'"
+ powershell -command " if($Env:GIT_VERSION_TAG) {$version = $Env:GIT_VERSION_TAG;} else {$version = git describe --long;} (Get-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs') | Foreach-Object {$_ -replace '(?<=AssemblyInformationalVersion\(\").*(?=\")', $version} | Foreach-Object {$_ -replace '(?<=(AssemblyVersion|AssemblyFileVersion)\(\").*(?=\")', $version.Split('-')[0].replace('alpha','0').replace('beta','1').replace('rc','2')} | Foreach-Object {$_ -replace '(?<=AssemblyCopyright\(\".*)[0-9]+(?=\")', (Get-Date).Year} | Set-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs' "
$(ProjectDir)Linux/Build/PreBuildEvent.sh $(ProjectDir)