Merge branch 'develop' into More-Customisable-Notes

This commit is contained in:
Jiiniasu authored and GitHub committed 2017-09-02 18:25:16 +02:00
commit dcfbdad4e7
60 files changed
+5852 -1888

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
Write-Host "Deployment finished -> do en empty commit on the gh-pages branch to update the page"
cd ..
git clone -q "https://github.com/Vocaluxe/Vocaluxe.git" -b "gh-pages" --single-branch "VocaluxeWeb"
cd VocaluxeWeb
git config --global user.email "noreply@vocaluxe.org"
git config --global user.name "VocaluxeBuildBot"
git commit --allow-empty -m "Trigger page update after a new publish (triggered by $Env:APPVEYOR_REPO_COMMIT_MESSAGE [$Env:APPVEYOR_REPO_COMMIT])"
git push -q "https://$($Env:GitHubKey):x-oauth-basic@github.com/Vocaluxe/Vocaluxe.git" "gh-pages"
cd ..\Vocaluxe
+17 -9
View File
@@ -7,6 +7,8 @@ else{
Return; Return;
} }
$Env:IS_BETA_RELEASE = ($Env:APPVEYOR_REPO_TAG_NAME -match "beta")
$getRelaseInfoParams = @{ $getRelaseInfoParams = @{
Uri = "https://api.github.com/repos/Vocaluxe/Vocaluxe/releases/tags/$targetTag"; Uri = "https://api.github.com/repos/Vocaluxe/Vocaluxe/releases/tags/$targetTag";
Method = 'GET'; Method = 'GET';
@@ -23,20 +25,26 @@ catch [System.Net.WebException]
# No Release found for this tag # No Release found for this tag
$statusCode = [int]$_.Exception.Response.StatusCode $statusCode = [int]$_.Exception.Response.StatusCode
$html = $_.Exception.Response.StatusDescription $html = $_.Exception.Response.StatusDescription
Write-Host "No Release found for this tag ($html): $($Env:APPVEYOR_REPO_TAG_NAME)" Write-Host "No Release found for this tag ($html): $targetTag"
Return; Return;
} }
$assetId = ($result.assets | where {$_.name -EQ "Vocaluxe_$($Env:APPVEYOR_REPO_TAG_NAME)_Windows_$($Env:PLATFORM).zip" } | Select-Object -first 1 ).id $releaseId = $result.id
if(!$assetId){ if(!$releaseId){
# No matching asset found in this release # No matching release found in this release
Write-Host "No matching asset found in this release: Vocaluxe_$($Env:APPVEYOR_REPO_TAG_NAME)_Windows_$($Env:PLATFORM).zip" Write-Host "No matching release found"
Return;
}
if($result.body -match $Env:APPVEYOR_REPO_COMMIT){
# An other build already recreated the release
Write-Host "An other build already recreated the release"
Return; Return;
} }
$deleteAssetParams = @{ $deleteAssetParams = @{
Uri = "https://api.github.com/repos/Vocaluxe/Vocaluxe/releases/assets/$assetId"; Uri = "https://api.github.com/repos/Vocaluxe/Vocaluxe/releases/$releaseId";
Method = 'DELETE'; Method = 'DELETE';
Headers = @{ Headers = @{
Authorization = 'Basic ' + [Convert]::ToBase64String( Authorization = 'Basic ' + [Convert]::ToBase64String(
@@ -45,14 +53,14 @@ $deleteAssetParams = @{
} }
try{ try{
$result = Invoke-RestMethod @deleteAssetParams $result = Invoke-RestMethod @deleteAssetParams
Write-Host "Successfully deleted asset: Vocaluxe_$($Env:APPVEYOR_REPO_TAG_NAME)_Windows_$($Env:PLATFORM).zip" Write-Host "Successfully deleted release for: $targetTag"
} }
catch [System.Net.WebException] catch [System.Net.WebException]
{ {
# Could not delete asset # Could not delete release
$statusCode = [int]$_.Exception.Response.StatusCode $statusCode = [int]$_.Exception.Response.StatusCode
$html = $_.Exception.Response.StatusDescription $html = $_.Exception.Response.StatusDescription
Write-Host "Could not delete asset ($html): Vocaluxe_$($Env:APPVEYOR_REPO_TAG_NAME)_Windows_$($Env:PLATFORM).zip" Write-Host "Could not delete release ($html) for: $targetTag"
Return; Return;
} }
+1
View File
@@ -4,4 +4,5 @@ cd $PROJECT
sed -i -r -e 's/AssemblyInformationalVersion\(".*?"\)/AssemblyInformationalVersion("GITVERSION")/' $PROJECT/Properties/AssemblyInfo.cs 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/AssemblyVersion\(".*?"\)/AssemblyVersion("SHORTVERSION")/' $PROJECT/Properties/AssemblyInfo.cs
sed -i -r -e 's/AssemblyFileVersion\(".*?"\)/AssemblyFileVersion("SHORTVERSION")/' $PROJECT/Properties/AssemblyInfo.cs sed -i -r -e 's/AssemblyFileVersion\(".*?"\)/AssemblyFileVersion("SHORTVERSION")/' $PROJECT/Properties/AssemblyInfo.cs
sed -i -r -e 's/AssemblyTitle\(".*?"\)/AssemblyTitle("FULLVERSION")/' $PROJECT/Properties/AssemblyInfo.cs
sed -i -e 's/var matchingServerVersion = "";/var matchingServerVersion = "'$(git describe --long)'";/' $PROJECT/../Output/Website/js/main.js sed -i -e 's/var matchingServerVersion = "";/var matchingServerVersion = "'$(git describe --long)'";/' $PROJECT/../Output/Website/js/main.js
+29
View File
@@ -0,0 +1,29 @@
#!/bin/sh
PROJECT=$1
cd $PROJECT
arch=$2
version=$(git describe --long)
shortVersion=${version%%-*}
shortVersionClean=$(echo $shortVersion | sed -e 's/alpha/0/' -e 's/beta/1/' -e 's/rc/2/' -e 's/[[:alpha:]]//g')
case ${shortVersion##*.} in
alpha*)
releaseType='Alpha'
;;
beta*)
releaseType='Beta'
;;
rc*)
releaseType='RC'
;;
*)
releaseType='Release'
;;
esac
versionName=$(grep -oP "\"${shortVersionClean%.*}.\" *: *\"\K([^\"]+)(?=\")" ../.build/versionNames.json)
fullVersionName="Vocaluxe $([ "$versionName" == "" ] && echo "" || echo "'$versionName' ")$shortVersion ($arch) $([ "$releaseType" == "Release" ] && echo "" || echo "$releaseType ")($version)"
sed -i -e s/GITVERSION/$(git describe --long)/ $PROJECT/Properties/AssemblyInfo.cs
sed -i -e s/SHORTVERSION/"$shortVersionClean"/ $PROJECT/Properties/AssemblyInfo.cs
sed -i -e s/FULLVERSION/"$fullVersionName"/ $PROJECT/Properties/AssemblyInfo.cs
+7
View File
@@ -0,0 +1,7 @@
{
"0.0.": "Unversioned Build",
"0.1.": "Rising Start",
"0.2.": "Sparkling Sky",
"0.3.": "Shining Heaven",
"0.4.": "Blue Sunrise"
}
+23
View File
@@ -0,0 +1,23 @@
param(
[Parameter(Mandatory=$true)]
[String]$ProjectDir
)
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"
(Get-Content -Encoding UTF8 "$($ProjectDir)Properties\AssemblyInfo.cs") `
| Foreach-Object {$_ -replace '(?<=AssemblyInformationalVersion\(\").*(?=\")', 'GITVERSION'} `
| Foreach-Object {$_ -replace '(?<=(AssemblyVersion|AssemblyFileVersion)\(\").*(?=\")', 'SHORTVERSION'} `
| Foreach-Object {$_ -replace '(?<=AssemblyTitle\(\").*(?=\")', 'FULLVERSION'} `
| Set-Content -Encoding UTF8 "$($ProjectDir)Properties\AssemblyInfo.cs"
+40
View File
@@ -0,0 +1,40 @@
param(
[Parameter(Mandatory=$true)]
[String]$ProjectDir,
[Parameter(Mandatory=$true)]
[String]$Arch
)
if($Env:GIT_VERSION_TAG)
{
$version = $Env:GIT_VERSION_TAG;
}
else
{
$version = git describe --long;
}
$shortVersion = $version.Split('-')[0];
[System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$versionName = (New-Object System.Web.Script.Serialization.JavaScriptSerializer).Deserialize((Get-Content "$($ProjectDir)..\.build\versionNames.json"), `
[System.Collections.Hashtable])[([regex]"[0-9]+\.[0-9]+\.").Match($shortVersion).Value]
$releaseType = switch -wildcard ($shortVersion.Split('.')[2])
{
"alpha*" {"Alpha"}
"beta*" {"Beta"}
"rc*" {"RC"}
default {"Release"}
};
$fullVersionName = "Vocaluxe $(if($versionName) {"'"+$versionName+"' "} else {''})$shortVersion ($Arch) $(if($releaseType -ne "Release") {'$releaseType '} else {''})($version)"
(Get-Content -Encoding UTF8 "$($ProjectDir)Properties\AssemblyInfo.cs") `
| Foreach-Object {$_ `
-replace '(?<=AssemblyInformationalVersion\(").*(?=")', $version `
-replace '(?<=(AssemblyVersion|AssemblyFileVersion)\(").*(?=")', `
($version.Split('-')[0].replace('alpha','0').replace('beta','1').replace('rc','2') -replace "[a-zA-Z]+","")`
-replace '(?<=AssemblyTitle\(").*(?=")', $fullVersionName `
-replace '(?<=AssemblyCopyright\(".*)[0-9]+(?=")', (Get-Date).Year} `
| Set-Content -Encoding UTF8 "$($ProjectDir)Properties\AssemblyInfo.cs"
+7 -5
View File
@@ -2,6 +2,7 @@ obj
PitchTracker.dll PitchTracker.dll
Thumbs.db Thumbs.db
.transifexrc .transifexrc
.vs
tx.exe tx.exe
*.mp4 *.mp4
*.pdb *.pdb
@@ -30,6 +31,7 @@ tx.exe
*.user *.user
*.VC.db *.VC.db
*.VC.opendb *.VC.opendb
*.dll.config
/*.vsp /*.vsp
/*.ctl /*.ctl
/Output/Config.xml /Output/Config.xml
@@ -48,16 +50,16 @@ tx.exe
/Output/Songs /Output/Songs
/Output/Playlists/*.xml /Output/Playlists/*.xml
/Output/Profiles/*.xml /Output/Profiles/*.xml
/Output/Profiles/*.png
/Output/PartyModes/*/Code/* /Output/PartyModes/*/Code/*
/PartyModes/*/*/*.dll /PartyModes/*/*/*.dll
/VocaluxeLib/bin /VocaluxeLib/bin
/ServerLib/bin/ClientServerLib.dll /ServerLib/bin/ClientServerLib.dll
/Installer/setup-cache /Installer/setup-cache
/Installer/setup-SetupFiles /Installer/Files
/Installer/vocaluxe-*-setup.exe /Installer/log.txt
/Installer/Vocaluxe*.rar /Installer/setup-cache
/Installer/Prerequisites/GStreamer x64/gstreamer-1.0-x86_64-1.4.1.msi /Installer/Setup Files
/Installer/Prerequisites/GStreamer x86/gstreamer-1.0-x86-1.4.1.msi
/WebserverInitalConfig/bin /WebserverInitalConfig/bin
/PhoneGap/ /PhoneGap/
/TestResults /TestResults
Binary file not shown.
-14
View File
@@ -1,14 +0,0 @@
REM compile x64
call "%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" x64
devenv.com ..\Vocaluxe.sln /Rebuild "InstallerWin|x64"
REM remove old x64 executables if found and rename
if exist "..\Output\Vocaluxe_x64.exe" del "..\Output\Vocaluxe_x64.exe"
ren "..\Output\Vocaluxe.exe" "Vocaluxe_x64.exe"
REM compile x86
call "%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" x86
devenv.com ..\Vocaluxe.sln /Rebuild "InstallerWin|x86"
REM compile installer
AdvancedInstaller.com /rebuild setup.aip
+74
View File
@@ -0,0 +1,74 @@
:: Build script for vocaluxe installer (x86 and x64 versions)
::
:: Requirements
:: - wget.exe: http://gnuwin32.sourceforge.net/packages/wget.htm
:: - unzip.exe: http://gnuwin32.sourceforge.net/packages/unzip.htm
:: - nuget.exe: https://www.nuget.org/downloads
:: - Visual Studio with devenv.exe (should be located in somewhere in Visual Studio folder, e.g. C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE)
:: - AdvancedInstaller
@ECHO OFF
echo Cloning vocaluxe from github and checkout master
if exist "Files" (
cd Files
git checkout -q develop >> log.txt
git pull -q >> log.txt
cd ../
) else (
git clone -q https://github.com/Vocaluxe/Vocaluxe.git Files > log.txt
cd Files
git checkout -q develop >> log.txt
cd ../
)
echo - Done
echo.
echo Download ambient videos and move them to themes folder
wget --append-output=log.txt -q -O videos.zip https://github.com/lukeIam/VocaluxeDependencies/blob/master/zips/themes/vocaluxe.themes.ambient.video.zip?raw=true || goto :error
unzip -q -o -d Files/Output videos.zip || goto :error
del /q videos.zip >> log.txt || goto :error
echo - Done
echo.
echo Delete lib-folder to prevent packing wrong dlls
del /q Files\Output\libs >> log.txt || goto :error
echo - Done
echo.
echo Restore dependencies and build x64
nuget restore Files/Vocaluxe.sln >> log.txt || goto :error
devenv Files/Vocaluxe.sln /Build "InstallerWin|x64" >> log.txt || goto :error
echo - Done
echo.
echo Build x64 installer
AdvancedInstaller.com /rebuild setup.aip -buildslist x64 >> log.txt || goto :error
echo - Done
echo.
echo Delete lib-folder to prevent packing wrong dlls
del /q Files\Output\libs >> log.txt || goto :error
echo - Done
echo.
echo Restore dependencies and build x86
nuget restore Files/Vocaluxe.sln >> log.txt || goto :error
devenv Files/Vocaluxe.sln /Build "InstallerWin|x86" >> log.txt || goto :error
echo - Done
echo.
echo Build x86 installer
AdvancedInstaller.com /rebuild setup.aip -buildslist x86 >> log.txt || goto :error
echo - Done
echo.
echo Everything is done!
pause
goto :EOF
:error
echo Failed with error #%errorlevel%.
echo See log.txt for more details.
pause
exit /b %errorlevel%
-20
View File
@@ -1,20 +0,0 @@
@echo off
SET version=v0.3.0
SET status=Beta
SET buildnum=0081
SET buildname=Vocaluxe %version% %status% (%buildnum%).rar
REM compile x64
call "%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" x64
devenv.com ..\Vocaluxe.sln /Rebuild "ReleaseWin|x64"
REM remove old x64 executables if found and rename
if exist "..\Output\Vocaluxe_x64.exe" del "..\Output\Vocaluxe_x64.exe"
ren "..\Output\Vocaluxe.exe" "Vocaluxe_x64.exe"
REM compile x86
call "%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" x86
devenv.com ..\Vocaluxe.sln /Rebuild "ReleaseWin|x86"
REM package
rar a -r -ep1 -x..\Output\CoverDB.sqlite -x..\Output\HighscoreDB.sqlite -x..\Output\*.log -x..\Output\*.pdb -x..\Output\Config.xml -x..\Output\Vocaluxe.vshost* -x..\Output\Songs -x..\Output\Screenshots -x..\Output\Playlists "%buildname%" "..\Output\*"
+3864 -846
View File
File diff suppressed because it is too large. Load diff
+4
View File
@@ -73,6 +73,8 @@
<string name="TR_CONFIG_TIMERMODE_TOTAL">Celkem</string> <string name="TR_CONFIG_TIMERMODE_TOTAL">Celkem</string>
<string name="TR_CONFIG_TIMERLOOK_NORMAL">Normální</string> <string name="TR_CONFIG_TIMERLOOK_NORMAL">Normální</string>
<string name="TR_CONFIG_TIMERLOOK_EXPANDED">Rozšířené</string> <string name="TR_CONFIG_TIMERLOOK_EXPANDED">Rozšířené</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_ALL">Uvést vše</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_BEST">Uvést nejlepší</string>
<string name="TR_CONFIG_OWN_MUSIC">Vlastní hudba a hudba na pozadí</string> <string name="TR_CONFIG_OWN_MUSIC">Vlastní hudba a hudba na pozadí</string>
<string name="TR_CONFIG_NO_OWN_MUSIC">Žádná vlastní hudba</string> <string name="TR_CONFIG_NO_OWN_MUSIC">Žádná vlastní hudba</string>
<string name="TR_CONFIG_ONLY_OWN_MUSIC">Pouze vlastní hudba</string> <string name="TR_CONFIG_ONLY_OWN_MUSIC">Pouze vlastní hudba</string>
@@ -183,6 +185,7 @@
<string name="TR_SCREENOGAME_TABS">Karty</string> <string name="TR_SCREENOGAME_TABS">Karty</string>
<string name="TR_SCREENOGAME_DIFFICULTY">Obtížnost hry</string> <string name="TR_SCREENOGAME_DIFFICULTY">Obtížnost hry</string>
<string name="TR_SCREENOGAME_TIMERMODE">Režim časomíry</string> <string name="TR_SCREENOGAME_TIMERMODE">Režim časomíry</string>
<string name="TR_SCREENOGAME_HIGHSCORESTYLE">Styl pro nejlepší výsledky</string>
<string name="TR_SCREENORECORD_OPTIONS">Nastavení nahrávání</string> <string name="TR_SCREENORECORD_OPTIONS">Nastavení nahrávání</string>
<string name="TR_SCREENORECORD_DEVICE">Zařízení</string> <string name="TR_SCREENORECORD_DEVICE">Zařízení</string>
<string name="TR_SCREENORECORD_INPUT">Vstup</string> <string name="TR_SCREENORECORD_INPUT">Vstup</string>
@@ -201,6 +204,7 @@
<string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Zdroj hudby na pozadí</string> <string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Zdroj hudby na pozadí</string>
<string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Hlasitost ukázky</string> <string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Hlasitost ukázky</string>
<string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Hlasitost hry</string> <string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Hlasitost hry</string>
<string name="TR_SCREENOSOUND_KARAOKEEFFECT">Efekt Karaoke</string>
<string name="TR_SCREENOTHEME_OPTIONS">Nastavení tématu</string> <string name="TR_SCREENOTHEME_OPTIONS">Nastavení tématu</string>
<string name="TR_SCREENOTHEME_THEME">Téma</string> <string name="TR_SCREENOTHEME_THEME">Téma</string>
<string name="TR_SCREENOTHEME_SKIN">Vzhled</string> <string name="TR_SCREENOTHEME_SKIN">Vzhled</string>
+9
View File
@@ -46,6 +46,7 @@
<string name="TR_CONFIG_LEVEL2">Niveau 2</string> <string name="TR_CONFIG_LEVEL2">Niveau 2</string>
<string name="TR_CONFIG_LEVEL3">Niveau 3</string> <string name="TR_CONFIG_LEVEL3">Niveau 3</string>
<string name="TR_CONFIG_LEVEL_MAX">Max</string> <string name="TR_CONFIG_LEVEL_MAX">Max</string>
<string name="TR_CONFIG_LIST">Afficher</string>
<string name="TR_CONFIG_DREIDEL">Caroussel</string> <string name="TR_CONFIG_DREIDEL">Caroussel</string>
<string name="TR_CONFIG_TILE_BOARD">Damier</string> <string name="TR_CONFIG_TILE_BOARD">Damier</string>
<string name="TR_CONFIG_BOOK">Livre</string> <string name="TR_CONFIG_BOOK">Livre</string>
@@ -72,6 +73,8 @@
<string name="TR_CONFIG_TIMERMODE_TOTAL">Total</string> <string name="TR_CONFIG_TIMERMODE_TOTAL">Total</string>
<string name="TR_CONFIG_TIMERLOOK_NORMAL">Normal</string> <string name="TR_CONFIG_TIMERLOOK_NORMAL">Normal</string>
<string name="TR_CONFIG_TIMERLOOK_EXPANDED">Développé</string> <string name="TR_CONFIG_TIMERLOOK_EXPANDED">Développé</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_ALL">Tout afficher</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_BEST">Afficher les meilleurs</string>
<string name="TR_CONFIG_OWN_MUSIC">Musique personnelle et Musique de fond</string> <string name="TR_CONFIG_OWN_MUSIC">Musique personnelle et Musique de fond</string>
<string name="TR_CONFIG_NO_OWN_MUSIC">Pas de Musique personnelle</string> <string name="TR_CONFIG_NO_OWN_MUSIC">Pas de Musique personnelle</string>
<string name="TR_CONFIG_ONLY_OWN_MUSIC">Seulement la Musique personnelle</string> <string name="TR_CONFIG_ONLY_OWN_MUSIC">Seulement la Musique personnelle</string>
@@ -79,6 +82,10 @@
<string name="TR_CONFIG_FADEPLAYERINFO_ALL">Tout</string> <string name="TR_CONFIG_FADEPLAYERINFO_ALL">Tout</string>
<string name="TR_CONFIG_FADEPLAYERINFO_INFO">Seulement noms et avatars</string> <string name="TR_CONFIG_FADEPLAYERINFO_INFO">Seulement noms et avatars</string>
<string name="TR_CONFIG_FADEPLAYERINFO_OFF">Rien</string> <string name="TR_CONFIG_FADEPLAYERINFO_OFF">Rien</string>
<string name="TR_CONFIG_LYRICSTYLE_FILL">Remplir</string>
<string name="TR_CONFIG_LYRICSTYLE_JUMP">Sauter</string>
<string name="TR_CONFIG_LYRICSTYLE_SLIDE">Glisser</string>
<string name="TR_CONFIG_LYRICSTYLE_ZOOM">Zoomer</string>
<string name="TR_CONFIG_LYRICSPOSITION_BOTTOM">En bas</string> <string name="TR_CONFIG_LYRICSPOSITION_BOTTOM">En bas</string>
<string name="TR_CONFIG_LYRICSPOSITION_TOP">En haut</string> <string name="TR_CONFIG_LYRICSPOSITION_TOP">En haut</string>
<string name="TR_CONFIG_LYRICSPOSITION_BOTH">En haut et en bas</string> <string name="TR_CONFIG_LYRICSPOSITION_BOTH">En haut et en bas</string>
@@ -178,6 +185,7 @@
<string name="TR_SCREENOGAME_TABS">Dossiers</string> <string name="TR_SCREENOGAME_TABS">Dossiers</string>
<string name="TR_SCREENOGAME_DIFFICULTY">Difficulté du Jeu</string> <string name="TR_SCREENOGAME_DIFFICULTY">Difficulté du Jeu</string>
<string name="TR_SCREENOGAME_TIMERMODE">Mode du Minuteur</string> <string name="TR_SCREENOGAME_TIMERMODE">Mode du Minuteur</string>
<string name="TR_SCREENOGAME_HIGHSCORESTYLE">Style meilleur score</string>
<string name="TR_SCREENORECORD_OPTIONS">Options d'Enregistrement</string> <string name="TR_SCREENORECORD_OPTIONS">Options d'Enregistrement</string>
<string name="TR_SCREENORECORD_DEVICE">Appareil</string> <string name="TR_SCREENORECORD_DEVICE">Appareil</string>
<string name="TR_SCREENORECORD_INPUT">Entrée</string> <string name="TR_SCREENORECORD_INPUT">Entrée</string>
@@ -196,6 +204,7 @@
<string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Source de la Musique de fond</string> <string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Source de la Musique de fond</string>
<string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Volume de la Musique de prévisualisation</string> <string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Volume de la Musique de prévisualisation</string>
<string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Volume de la Musique du jeu</string> <string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Volume de la Musique du jeu</string>
<string name="TR_SCREENOSOUND_KARAOKEEFFECT">Effet Karaoké</string>
<string name="TR_SCREENOTHEME_OPTIONS">Options du Thème</string> <string name="TR_SCREENOTHEME_OPTIONS">Options du Thème</string>
<string name="TR_SCREENOTHEME_THEME">Thème</string> <string name="TR_SCREENOTHEME_THEME">Thème</string>
<string name="TR_SCREENOTHEME_SKIN">Environnement graphique</string> <string name="TR_SCREENOTHEME_SKIN">Environnement graphique</string>
+7
View File
@@ -46,6 +46,7 @@
<string name="TR_CONFIG_LEVEL2">Livello 2</string> <string name="TR_CONFIG_LEVEL2">Livello 2</string>
<string name="TR_CONFIG_LEVEL3">Livello 3</string> <string name="TR_CONFIG_LEVEL3">Livello 3</string>
<string name="TR_CONFIG_LEVEL_MAX">Max</string> <string name="TR_CONFIG_LEVEL_MAX">Max</string>
<string name="TR_CONFIG_LIST">Elenco</string>
<string name="TR_CONFIG_DREIDEL">Dreidel</string> <string name="TR_CONFIG_DREIDEL">Dreidel</string>
<string name="TR_CONFIG_TILE_BOARD">Scacchiera</string> <string name="TR_CONFIG_TILE_BOARD">Scacchiera</string>
<string name="TR_CONFIG_BOOK">Libro</string> <string name="TR_CONFIG_BOOK">Libro</string>
@@ -72,6 +73,8 @@
<string name="TR_CONFIG_TIMERMODE_TOTAL">Totale</string> <string name="TR_CONFIG_TIMERMODE_TOTAL">Totale</string>
<string name="TR_CONFIG_TIMERLOOK_NORMAL">Normale</string> <string name="TR_CONFIG_TIMERLOOK_NORMAL">Normale</string>
<string name="TR_CONFIG_TIMERLOOK_EXPANDED">Espanso</string> <string name="TR_CONFIG_TIMERLOOK_EXPANDED">Espanso</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_ALL">Elenco tutti</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_BEST">Elenco migliori</string>
<string name="TR_CONFIG_OWN_MUSIC">Musica personale e musica di sfondo</string> <string name="TR_CONFIG_OWN_MUSIC">Musica personale e musica di sfondo</string>
<string name="TR_CONFIG_NO_OWN_MUSIC">Nessuna musica personale</string> <string name="TR_CONFIG_NO_OWN_MUSIC">Nessuna musica personale</string>
<string name="TR_CONFIG_ONLY_OWN_MUSIC">Solo musica personale</string> <string name="TR_CONFIG_ONLY_OWN_MUSIC">Solo musica personale</string>
@@ -79,6 +82,9 @@
<string name="TR_CONFIG_FADEPLAYERINFO_ALL">Tutto</string> <string name="TR_CONFIG_FADEPLAYERINFO_ALL">Tutto</string>
<string name="TR_CONFIG_FADEPLAYERINFO_INFO">Solo nomi e avatar</string> <string name="TR_CONFIG_FADEPLAYERINFO_INFO">Solo nomi e avatar</string>
<string name="TR_CONFIG_FADEPLAYERINFO_OFF">Niente</string> <string name="TR_CONFIG_FADEPLAYERINFO_OFF">Niente</string>
<string name="TR_CONFIG_LYRICSTYLE_FILL">Riempi</string>
<string name="TR_CONFIG_LYRICSTYLE_JUMP">Salta</string>
<string name="TR_CONFIG_LYRICSTYLE_ZOOM">Zoom</string>
<string name="TR_CONFIG_LYRICSPOSITION_BOTTOM">Sotto</string> <string name="TR_CONFIG_LYRICSPOSITION_BOTTOM">Sotto</string>
<string name="TR_CONFIG_LYRICSPOSITION_TOP">Sopra</string> <string name="TR_CONFIG_LYRICSPOSITION_TOP">Sopra</string>
<string name="TR_CONFIG_LYRICSPOSITION_BOTH">Sopra e sotto</string> <string name="TR_CONFIG_LYRICSPOSITION_BOTH">Sopra e sotto</string>
@@ -196,6 +202,7 @@
<string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Sorgente musica di sfondo</string> <string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Sorgente musica di sfondo</string>
<string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Anteprima volume musica</string> <string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Anteprima volume musica</string>
<string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Volume musica di gioco</string> <string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Volume musica di gioco</string>
<string name="TR_SCREENOSOUND_KARAOKEEFFECT">Effetto karaoke</string>
<string name="TR_SCREENOTHEME_OPTIONS">Opzioni tema</string> <string name="TR_SCREENOTHEME_OPTIONS">Opzioni tema</string>
<string name="TR_SCREENOTHEME_THEME">Tema</string> <string name="TR_SCREENOTHEME_THEME">Tema</string>
<string name="TR_SCREENOTHEME_SKIN">Skin</string> <string name="TR_SCREENOTHEME_SKIN">Skin</string>
+32
View File
@@ -46,6 +46,7 @@
<string name="TR_CONFIG_LEVEL2">Nivel 2</string> <string name="TR_CONFIG_LEVEL2">Nivel 2</string>
<string name="TR_CONFIG_LEVEL3">Nivel 3</string> <string name="TR_CONFIG_LEVEL3">Nivel 3</string>
<string name="TR_CONFIG_LEVEL_MAX">Máx</string> <string name="TR_CONFIG_LEVEL_MAX">Máx</string>
<string name="TR_CONFIG_LIST">Listado</string>
<string name="TR_CONFIG_DREIDEL">Dreidel</string> <string name="TR_CONFIG_DREIDEL">Dreidel</string>
<string name="TR_CONFIG_TILE_BOARD">Cuadrícula</string> <string name="TR_CONFIG_TILE_BOARD">Cuadrícula</string>
<string name="TR_CONFIG_BOOK">Libro</string> <string name="TR_CONFIG_BOOK">Libro</string>
@@ -72,6 +73,8 @@
<string name="TR_CONFIG_TIMERMODE_TOTAL">Total</string> <string name="TR_CONFIG_TIMERMODE_TOTAL">Total</string>
<string name="TR_CONFIG_TIMERLOOK_NORMAL">Normal</string> <string name="TR_CONFIG_TIMERLOOK_NORMAL">Normal</string>
<string name="TR_CONFIG_TIMERLOOK_EXPANDED">Expandido</string> <string name="TR_CONFIG_TIMERLOOK_EXPANDED">Expandido</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_ALL">Ver todo</string>
<string name="TR_CONFIG_HIGHSCORE_LIST_BEST">Mejores puntuaciones</string>
<string name="TR_CONFIG_OWN_MUSIC">Canciones del juego y tema Vocaluxe</string> <string name="TR_CONFIG_OWN_MUSIC">Canciones del juego y tema Vocaluxe</string>
<string name="TR_CONFIG_NO_OWN_MUSIC">Sin canciones del juego</string> <string name="TR_CONFIG_NO_OWN_MUSIC">Sin canciones del juego</string>
<string name="TR_CONFIG_ONLY_OWN_MUSIC">Solo canciones del juego</string> <string name="TR_CONFIG_ONLY_OWN_MUSIC">Solo canciones del juego</string>
@@ -79,6 +82,10 @@
<string name="TR_CONFIG_FADEPLAYERINFO_ALL">Todas</string> <string name="TR_CONFIG_FADEPLAYERINFO_ALL">Todas</string>
<string name="TR_CONFIG_FADEPLAYERINFO_INFO">Solo nombres y avatares</string> <string name="TR_CONFIG_FADEPLAYERINFO_INFO">Solo nombres y avatares</string>
<string name="TR_CONFIG_FADEPLAYERINFO_OFF">Nada</string> <string name="TR_CONFIG_FADEPLAYERINFO_OFF">Nada</string>
<string name="TR_CONFIG_LYRICSTYLE_FILL">Rellenar</string>
<string name="TR_CONFIG_LYRICSTYLE_JUMP">Saltar</string>
<string name="TR_CONFIG_LYRICSTYLE_SLIDE">Deslizar</string>
<string name="TR_CONFIG_LYRICSTYLE_ZOOM">Zoom</string>
<string name="TR_CONFIG_LYRICSPOSITION_BOTTOM">Abajo</string> <string name="TR_CONFIG_LYRICSPOSITION_BOTTOM">Abajo</string>
<string name="TR_CONFIG_LYRICSPOSITION_TOP">Arriba</string> <string name="TR_CONFIG_LYRICSPOSITION_TOP">Arriba</string>
<string name="TR_CONFIG_LYRICSPOSITION_BOTH">Arriba y abajo</string> <string name="TR_CONFIG_LYRICSPOSITION_BOTH">Arriba y abajo</string>
@@ -89,11 +96,22 @@
<string name="TR_SCREENLOAD_LOADED">cargadas</string> <string name="TR_SCREENLOAD_LOADED">cargadas</string>
<string name="TR_SCREENMAIN_MENU">Menú Principal</string> <string name="TR_SCREENMAIN_MENU">Menú Principal</string>
<string name="TR_SCREENMAIN_BUTTON_SING">Cantar</string> <string name="TR_SCREENMAIN_BUTTON_SING">Cantar</string>
<string name="TR_SCREENMAIN_BUTTON_PARTY">Fiesta</string>
<string name="TR_SCREENMAIN_BUTTON_OPTIONS">Opciones</string> <string name="TR_SCREENMAIN_BUTTON_OPTIONS">Opciones</string>
<string name="TR_SCREENMAIN_BUTTON_PROFILES">Perfiles</string> <string name="TR_SCREENMAIN_BUTTON_PROFILES">Perfiles</string>
<string name="TR_SCREENMAIN_TEXT_NOPROFILES">¡No se encuentra perfil!</string> <string name="TR_SCREENMAIN_TEXT_NOPROFILES">¡No se encuentra perfil!</string>
<string name="TR_SCREENPARTY_TITLE">Selección del modo fiesta</string>
<string name="TR_SCREENPARTY_MODES">Modo fiesta</string>
<string name="TR_SCREENPARTY_DESCRIPTION">Descripción</string>
<string name="TR_SCREENPARTY_AUTHOR">Autor</string>
<string name="TR_SCREENPARTY_VERSION">Versión</string>
<string name="TR_SCREENPARTY_ERROR">No se puede cargar este modo de fiesta</string>
<string name="TR_SCREENPARTY_ERROR_MICS">¡No hay micrófonos configurados!</string> <string name="TR_SCREENPARTY_ERROR_MICS">¡No hay micrófonos configurados!</string>
<string name="TR_SCREENPARTY_ERROR_MIC_NUM">¡Se necesitan %d micrófonos para este modo fiesta!</string> <string name="TR_SCREENPARTY_ERROR_MIC_NUM">¡Se necesitan %d micrófonos para este modo fiesta!</string>
<string name="TR_SCREENPARTY_TARGETAUDIENCE">Audiencia objetiva</string>
<string name="TR_SCREENPARTY_NOTEAMS">No hay equipos</string>
<string name="TR_SCREENPARTY_NUMTEAMS">Número de equipos</string>
<string name="TR_SCREENPARTY_NUMPLAYERS">Número de jugadores</string>
<string name="TR_SCREENNAMES_MENU">Selección de Jugadores</string> <string name="TR_SCREENNAMES_MENU">Selección de Jugadores</string>
<string name="TR_SCREENNAMES_PLAYER">Jugador</string> <string name="TR_SCREENNAMES_PLAYER">Jugador</string>
<string name="TR_SCREENNAMES_1PLAYER">1 Jugador</string> <string name="TR_SCREENNAMES_1PLAYER">1 Jugador</string>
@@ -107,7 +125,19 @@
<string name="TR_SCREENNAMES_WARNING_PROFILES_SG">Advertencia: ¡No hay perfil asignados al jugador %v!</string> <string name="TR_SCREENNAMES_WARNING_PROFILES_SG">Advertencia: ¡No hay perfil asignados al jugador %v!</string>
<string name="TR_SCREENNAMES_WARNING_PROFILES_PL">Advertencia: ¡No hay perfiles asignados a los jugadores %v!</string> <string name="TR_SCREENNAMES_WARNING_PROFILES_PL">Advertencia: ¡No hay perfiles asignados a los jugadores %v!</string>
<string name="TR_SCREENSONG_MENU">Selección de Canciones</string> <string name="TR_SCREENSONG_MENU">Selección de Canciones</string>
<string name="TR_SCREENSONG_BUTTON_SING">Cantar</string>
<string name="TR_SCREENSONG_BUTTON_PLAYLIST">Añadir a lista de reproducción</string>
<string name="TR_SCREENSONG_BUTTON_CANCEL">Cerrar</string>
<string name="TR_SCREENSONG_BUTTON_RANDOM">Seleccionar una canción aleatoriamente</string>
<string name="TR_SCREENSONG_BUTTON_RANDOMCAT">Seleccionar una categoria aleatoriamente</string>
<string name="TR_SCREENSONG_BUTTON_SINGALL">Cantar todas las canciones</string>
<string name="TR_SCREENSONG_BUTTON_SINGALLVISIBLE">Cantar todas las canciones visibles</string>
<string name="TR_SCREENSONG_BUTTON_OPENPLAYLIST">Abrir lista de reproducción</string>
<string name="TR_SCREENSONG_BUTTON_OPEN_SELECTED_ITEM">Seleccionar</string> <string name="TR_SCREENSONG_BUTTON_OPEN_SELECTED_ITEM">Seleccionar</string>
<string name="TR_SCREENSONG_BUTTON_RANDOMMEDLEY">Cantar una versión corta de canción aleatoria</string>
<string name="TR_SCREENSONG_BUTTON_STARTMEDLEY">Cantar versión corta de canción</string>
<string name="TR_SCREENSONG_NEWPLAYLIST">Nueva lista de reproducción</string>
<string name="TR_SCREENSONG_SONGOPTIONS">Opciones de canción</string>
<string name="TR_SCREENSONG_SEARCH">Buscar:</string> <string name="TR_SCREENSONG_SEARCH">Buscar:</string>
<string name="TR_SCREENSONG_NOLANGUAGE">Sin Idioma</string> <string name="TR_SCREENSONG_NOLANGUAGE">Sin Idioma</string>
<string name="TR_SCREENSONG_NOYEAR">Sin Año</string> <string name="TR_SCREENSONG_NOYEAR">Sin Año</string>
@@ -155,6 +185,7 @@
<string name="TR_SCREENOGAME_TABS">Etiquetas</string> <string name="TR_SCREENOGAME_TABS">Etiquetas</string>
<string name="TR_SCREENOGAME_DIFFICULTY">Dificultad del Juego</string> <string name="TR_SCREENOGAME_DIFFICULTY">Dificultad del Juego</string>
<string name="TR_SCREENOGAME_TIMERMODE">Modo del Timer</string> <string name="TR_SCREENOGAME_TIMERMODE">Modo del Timer</string>
<string name="TR_SCREENOGAME_HIGHSCORESTYLE">Estilo de puntuación máxima</string>
<string name="TR_SCREENORECORD_OPTIONS">Opciones de Grabación</string> <string name="TR_SCREENORECORD_OPTIONS">Opciones de Grabación</string>
<string name="TR_SCREENORECORD_DEVICE">Dispositivo</string> <string name="TR_SCREENORECORD_DEVICE">Dispositivo</string>
<string name="TR_SCREENORECORD_INPUT">Entrada</string> <string name="TR_SCREENORECORD_INPUT">Entrada</string>
@@ -173,6 +204,7 @@
<string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Origen de la Música de Fondo</string> <string name="TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE">Origen de la Música de Fondo</string>
<string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Volumen de la música de la vista previa</string> <string name="TR_SCREENOSOUND_PREVIEWMUSICVOLUME">Volumen de la música de la vista previa</string>
<string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Volumen de la música del juego</string> <string name="TR_SCREENOSOUND_GAMEMUSICVOLUME">Volumen de la música del juego</string>
<string name="TR_SCREENOSOUND_KARAOKEEFFECT">Efecto karaoke</string>
<string name="TR_SCREENOTHEME_OPTIONS">Opciones de Estilo</string> <string name="TR_SCREENOTHEME_OPTIONS">Opciones de Estilo</string>
<string name="TR_SCREENOTHEME_THEME">Estilo</string> <string name="TR_SCREENOTHEME_THEME">Estilo</string>
<string name="TR_SCREENOTHEME_SKIN">Skin</string> <string name="TR_SCREENOTHEME_SKIN">Skin</string>
@@ -15,6 +15,8 @@
<string name="TR_SCREENCONFIG_NUMPLAYERS">Počet hráčů</string> <string name="TR_SCREENCONFIG_NUMPLAYERS">Počet hráčů</string>
<string name="TR_SCREENCONFIG_NUMMICS">Počet mikrofonů</string> <string name="TR_SCREENCONFIG_NUMMICS">Počet mikrofonů</string>
<string name="TR_SCREENCONFIG_NUMROUNDS">Počet kol</string> <string name="TR_SCREENCONFIG_NUMROUNDS">Počet kol</string>
<string name="TR_SCREENCONFIG_NUMJOKERS">Počet žolíků</string>
<string name="TR_SCREENCONFIG_REFILLJOKERS">Doplnit žolíky každé kolo</string>
<string name="TR_SCREENNAMES_TITLE">Soutěžní režim: Výběr hráče</string> <string name="TR_SCREENNAMES_TITLE">Soutěžní režim: Výběr hráče</string>
<string name="TR_SCREENNAMES_BUTTON_RANDOM">Vybrat náhodně</string> <string name="TR_SCREENNAMES_BUTTON_RANDOM">Vybrat náhodně</string>
<string name="TR_SCREENMAIN_TITLE">Soutěžní režim: Přehled</string> <string name="TR_SCREENMAIN_TITLE">Soutěžní režim: Přehled</string>
@@ -15,6 +15,8 @@
<string name="TR_SCREENCONFIG_NUMPLAYERS">Nombre de joueurs</string> <string name="TR_SCREENCONFIG_NUMPLAYERS">Nombre de joueurs</string>
<string name="TR_SCREENCONFIG_NUMMICS">Nombre de micros</string> <string name="TR_SCREENCONFIG_NUMMICS">Nombre de micros</string>
<string name="TR_SCREENCONFIG_NUMROUNDS">Nombre de tours</string> <string name="TR_SCREENCONFIG_NUMROUNDS">Nombre de tours</string>
<string name="TR_SCREENCONFIG_NUMJOKERS">Nombre de jokers</string>
<string name="TR_SCREENCONFIG_REFILLJOKERS">Remplir de nouveau les jokers à tour</string>
<string name="TR_SCREENNAMES_TITLE">Mode Challenge: Choix des joueurs</string> <string name="TR_SCREENNAMES_TITLE">Mode Challenge: Choix des joueurs</string>
<string name="TR_SCREENNAMES_BUTTON_RANDOM">Sélectionner au hasard</string> <string name="TR_SCREENNAMES_BUTTON_RANDOM">Sélectionner au hasard</string>
<string name="TR_SCREENMAIN_TITLE">Mode Challenge: Résumé</string> <string name="TR_SCREENMAIN_TITLE">Mode Challenge: Résumé</string>
@@ -15,6 +15,8 @@
<string name="TR_SCREENCONFIG_NUMPLAYERS">TODO: Number of players</string> <string name="TR_SCREENCONFIG_NUMPLAYERS">TODO: Number of players</string>
<string name="TR_SCREENCONFIG_NUMMICS">TODO: Number of mics</string> <string name="TR_SCREENCONFIG_NUMMICS">TODO: Number of mics</string>
<string name="TR_SCREENCONFIG_NUMROUNDS">TODO: Number of rounds</string> <string name="TR_SCREENCONFIG_NUMROUNDS">TODO: Number of rounds</string>
<string name="TR_SCREENCONFIG_NUMJOKERS">Número de comodines</string>
<string name="TR_SCREENCONFIG_REFILLJOKERS">Rellenar comodines cada ronda</string>
<string name="TR_SCREENNAMES_TITLE">TODO: Challenge Mode: Choose Player</string> <string name="TR_SCREENNAMES_TITLE">TODO: Challenge Mode: Choose Player</string>
<string name="TR_SCREENNAMES_BUTTON_RANDOM">Seleccionar aleatoriamente</string> <string name="TR_SCREENNAMES_BUTTON_RANDOM">Seleccionar aleatoriamente</string>
<string name="TR_SCREENMAIN_TITLE">TODO: Challenge Mode: Overview</string> <string name="TR_SCREENMAIN_TITLE">TODO: Challenge Mode: Overview</string>
+1 -1
View File
@@ -2,7 +2,7 @@
<root> <root>
<PlayerName>Guest 3</PlayerName> <PlayerName>Guest 3</PlayerName>
<Difficulty>TR_CONFIG_EASY</Difficulty> <Difficulty>TR_CONFIG_EASY</Difficulty>
<UserRole>TR_USERROLE_NORMAL</UserRole> <UserRole>TR_USERROLE_GUEST</UserRole>
<Active>TR_CONFIG_ON</Active> <Active>TR_CONFIG_ON</Active>
<Avatar>Avatar_m.png</Avatar> <Avatar>Avatar_m.png</Avatar>
</root> </root>
+28 -13
View File
@@ -1,4 +1,4 @@
Vocaluxe 0.3 README Vocaluxe 0.4 README
---------------------------- ----------------------------
================================= =================================
@@ -23,25 +23,29 @@ Vocaluxe is an entirely new development in C#, inspired by the original UltraSta
and the great Ultrastar Deluxe project. and the great Ultrastar Deluxe project.
Supported Operating Systems / Requirements: Supported Operating Systems / Requirements:
- WinXP, Vista, Windows 7 or Windows 8 with .NET 4.0 - Windows Vista, Windows 7, Windows 8 or Windows 10 with .NET 4.0
- Linux (no official support)
- 1 GHz CPU, 512 MB RAM, Graphics card with OpenGL 2.1 or DirectX 9.0 support - 1 GHz CPU, 512 MB RAM, Graphics card with OpenGL 2.1 or DirectX 9.0 support
- Visual C++ Redistributable Packages 2008 and 2012 - Visual C++ Redistributable Package 2010
================================= =================================
= 2. Release Notes = = 2. Release Notes =
================================= =================================
- The program supports 32bit and 64bit (Vocaluxe_x64.exe) operating systems. - The program supports 32bit and 64bit (appropriate download package) operating systems.
- To add your existing song collection to Vocaluxe, put your songs into the 'Songs' subfolder. - When using installer, you can find all mentioned folder in 'Documents/Vocaluxe', otherwise
they should be created just next to 'Vocaluxe.exe'
- To add your existing song collection to Vocaluxe, put your songs into the 'Songs' subfolder.
Alternatively, you can add multiple song paths to Vocaluxe by editing your Config.xml: Alternatively, you can add multiple song paths to Vocaluxe by editing your Config.xml:
<Game> <Game>
<!--SongFolder: SongFolder1, SongFolder2, SongFolder3, ...--> <!--SongFolder: Add each song folder in a seperate SongFolder entry-->
<SongFolder1>C:\Vocaluxe\Songs</SongFolder1> <SongFolder>C:\Vocaluxe\Songs</SongFolder>
<SongFolder2>D:\EvenMore\Songs</SongFolder2> <SongFolder>D:\EvenMore\Songs</SongFolder>
- To use your highscore database from UltraStar deluxe 1.0.1, UltraStar deluxe CMD Mod or - To use your highscore database from UltraStar deluxe 1.0.1, UltraStar deluxe CMD Mod or
UltraStar deluxe 1.1, simply copy your Ultrastar.db (rename if necessary) into the main UltraStar deluxe 1.1, simply copy your Ultrastar.db (rename if necessary) into the main
@@ -101,6 +105,8 @@ or from the console:
load playlist from this path. load playlist from this path.
Example: Example:
Vocaluxe.exe -PlaylistFolder D:\MyPlaylists Vocaluxe.exe -PlaylistFolder D:\MyPlaylists
-OldTheme yes : Try to load theme that is created for vocaluxe 0.2 or older (or some pre-release version of 0.3). Enter theme editor and save your theme to convert every file to new syntax. This will be removed in a future version.
Complete example: Complete example:
@@ -128,14 +134,18 @@ Vocaluxe.exe -ConfigFile MyConfig.xml -ScoreFile C:\Vocaluxe\Highscores\MyHighsc
Song screen Song screen
[F3] to open/close the song search menu [F3] to open/close the song search menu
[SPACE] to open/close the song menu [SPACE] to open/close the song menu
[TAB] to switch selection of song menu and playlist (if opened)
[CTRL] + [R] to select a random song [CTRL] + [R] to select a random song
[CTRL] + [A] to sing all songs [CTRL] + [A] to sing all songs
[CTRL] + [S] to sing current song in medley version
[CTRL] + [V] to sing all songs from a category [CTRL] + [V] to sing all songs from a category
[NUM_1]..[NUM_6] to use a Joker for team 1..6 [NUM_1]..[NUM_6] to use a Joker for team 1..6
[A]..[Z] to jump to category/song title starting with that letter [A]..[Z] to jump to category/song title starting with that letter
Name selection screen Name selection screen
[1]..[6] to activate player selection. [1]..[6] to activate player selection.
[P] to activate fast player selection
[+] or [-] to increase/decrease number of player
[Cursor] to select a profile. [Cursor] to select a profile.
[Enter] to confirm a selection. [Enter] to confirm a selection.
@@ -145,20 +155,25 @@ Sing screen
[T] to change the time format of the timer. [T] to change the time format of the timer.
[I] to change view of player information. [I] to change view of player information.
[W] to activate the configured webcam. [W] to activate the configured webcam.
[V] to change video aspect ratio
Score and highscore screen
[LEFT] or [RIGHT] to show (high)scores of another round (if there is more than one)
================================= =================================
= 5. Help & Suppport = = 5. Help & Suppport =
================================= =================================
Bug Tracker: http://84.200.73.138/redmine/projects/vocaluxe Vocaluxe Homepage: https://vocaluxe.org
Bug Tracker: https://github.com/Vocaluxe/Vocaluxe/issues
Translations: https://www.transifex.com/projects/p/vocaluxe/ Translations: https://www.transifex.com/projects/p/vocaluxe/
GitHub Wiki: https://github.com/Vocaluxe/Vocaluxe/wiki GitHub Wiki: https://github.com/Vocaluxe/Vocaluxe/wiki
Support Forum (German): http://www.ultra-star.de Support Forum (German): http://www.ultra-star.de
Song-DataBase (USDB): http://usdb.animux.de/ Song-DataBase (USDB): http://usdb.animux.de/
================================= =================================
= 6. Source Code = = 6. Source Code =
================================= =================================
Source Code (GitHub): https://github.com/Vocaluxe/Vocaluxe Source Code (GitHub): https://github.com/Vocaluxe/Vocaluxe
SF.Net Page: http://sourceforge.net/projects/vocaluxe/ SF.Net Page (outdated): http://sourceforge.net/projects/vocaluxe/
@@ -37,6 +37,7 @@ namespace VocaluxeLib.PartyModes.Challenge
base.Init(); base.Init();
_PartyMode = (CPartyModeChallenge)base._PartyMode; _PartyMode = (CPartyModeChallenge)base._PartyMode;
_AllowChangePlayerNum = false; _AllowChangePlayerNum = false;
_Teams = false;
} }
public override void OnShow() public override void OnShow()
@@ -37,6 +37,7 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
base.Init(); base.Init();
_PartyMode = (CPartyModeChallengeMedley)base._PartyMode; _PartyMode = (CPartyModeChallengeMedley)base._PartyMode;
_AllowChangePlayerNum = false; _AllowChangePlayerNum = false;
_Teams = false;
} }
public override void OnShow() public override void OnShow()
@@ -60,7 +60,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
// ReSharper disable ClassNeverInstantiated.Global // ReSharper disable ClassNeverInstantiated.Global
public sealed class CPartyModeTicTacToe : CPartyMode public sealed class CPartyModeTicTacToe : CPartyMode
// ReSharper restore ClassNeverInstantiated.Global // ReSharper restore ClassNeverInstantiated.Global
{ {
public override int MinMics public override int MinMics
{ {
@@ -96,7 +96,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe
get { return 10; } get { return 10; }
} }
private enum EStage public readonly EGameMode[] AvailableGameModes = { EGameMode.TR_GAMEMODE_NORMAL, EGameMode.TR_GAMEMODE_SHORTSONG, EGameMode.TR_GAMEMODE_DUET };
private enum EStage
{ {
Config, Config,
Names, Names,
@@ -119,7 +121,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public int CategoryIndex; public int CategoryIndex;
public int PlaylistID; public int PlaylistID;
public EGameMode GameMode; public int GameMode;
public List<CRound> Rounds; public List<CRound> Rounds;
public List<int> Songs; public List<int> Songs;
@@ -160,7 +162,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
SongSource = ESongSource.TR_ALLSONGS, SongSource = ESongSource.TR_ALLSONGS,
PlaylistID = 0, PlaylistID = 0,
CategoryIndex = 0, CategoryIndex = 0,
GameMode = EGameMode.TR_GAMEMODE_NORMAL, GameMode = 0,
Rounds = new List<CRound>(), Rounds = new List<CRound>(),
Songs = new List<int>(), Songs = new List<int>(),
NumJokerRandom = new int[2], NumJokerRandom = new int[2],
@@ -432,20 +434,20 @@ namespace VocaluxeLib.PartyModes.TicTacToe
for (int i = 0; i < CBase.Playlist.GetSongCount(GameData.PlaylistID); i++) for (int i = 0; i < CBase.Playlist.GetSongCount(GameData.PlaylistID); i++)
{ {
int id = CBase.Playlist.GetSong(GameData.PlaylistID, i).SongID; int id = CBase.Playlist.GetSong(GameData.PlaylistID, i).SongID;
if (CBase.Songs.GetSongByID(id).AvailableGameModes.Contains(GameData.GameMode)) if (CBase.Songs.GetSongByID(id).AvailableGameModes.Contains(AvailableGameModes[GameData.GameMode]))
GameData.Songs.Add(id); GameData.Songs.Add(id);
} }
break; break;
case ESongSource.TR_ALLSONGS: case ESongSource.TR_ALLSONGS:
ReadOnlyCollection<CSong> avSongs = CBase.Songs.GetSongs(); ReadOnlyCollection<CSong> avSongs = CBase.Songs.GetSongs();
GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(GameData.GameMode)).Select(song => song.ID)); GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(AvailableGameModes[GameData.GameMode])).Select(song => song.ID));
break; break;
case ESongSource.TR_CATEGORY: case ESongSource.TR_CATEGORY:
CBase.Songs.SetCategory(GameData.CategoryIndex); CBase.Songs.SetCategory(GameData.CategoryIndex);
avSongs = CBase.Songs.GetVisibleSongs(); avSongs = CBase.Songs.GetVisibleSongs();
GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(GameData.GameMode)).Select(song => song.ID)); GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(AvailableGameModes[GameData.GameMode])).Select(song => song.ID));
CBase.Songs.SetCategory(-1); CBase.Songs.SetCategory(-1);
break; break;
@@ -493,7 +495,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
if (isDuet) if (isDuet)
players[1].VoiceNr = 1; players[1].VoiceNr = 1;
CBase.Game.AddSong(round.SongID, GameData.GameMode); CBase.Game.AddSong(round.SongID, AvailableGameModes[GameData.GameMode]);
} }
private void _SetNumJokers() private void _SetNumJokers()
@@ -160,8 +160,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_SelectSlides[_SelectSlideGameMode].Visible = true; _SelectSlides[_SelectSlideGameMode].Visible = true;
_SelectSlides[_SelectSlideGameMode].Clear(); _SelectSlides[_SelectSlideGameMode].Clear();
_SelectSlides[_SelectSlideGameMode].SetValues<EGameMode>((int)_PartyMode.GameData.GameMode); _SelectSlides[_SelectSlideGameMode].AddValues(_PartyMode.AvailableGameModes.Select(gm => gm.ToString()));
_SelectSlides[_SelectSlideGameMode].RemoveValue(EGameMode.TR_GAMEMODE_MEDLEY.ToString()); _SelectSlides[_SelectSlideGameMode].Selection = _PartyMode.GameData.GameMode;
} }
private void _UpdateSlides() private void _UpdateSlides()
@@ -171,9 +171,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_PartyMode.GameData.SongSource = (ESongSource)_SelectSlides[_SelectSlideSongSource].Selection; _PartyMode.GameData.SongSource = (ESongSource)_SelectSlides[_SelectSlideSongSource].Selection;
_PartyMode.GameData.PlaylistID = _SelectSlides[_SelectSlidePlaylist].Selection; _PartyMode.GameData.PlaylistID = _SelectSlides[_SelectSlidePlaylist].Selection;
_PartyMode.GameData.CategoryIndex = _SelectSlides[_SelectSlideCategory].Selection; _PartyMode.GameData.CategoryIndex = _SelectSlides[_SelectSlideCategory].Selection;
_PartyMode.GameData.GameMode = (EGameMode)_SelectSlides[_SelectSlideGameMode].Selection; _PartyMode.GameData.GameMode = _SelectSlides[_SelectSlideGameMode].Selection;
EGameMode gm = _PartyMode.GameData.GameMode; EGameMode gm = _PartyMode.AvailableGameModes[_PartyMode.GameData.GameMode];
if (_PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST) if (_PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST)
{ {
+13 -7
View File
@@ -1,4 +1,11 @@
![Vocaluxe Logo](https://raw.githubusercontent.com/Vocaluxe/Vocaluxe/develop/Output/Graphics/Logo.png) ![Vocaluxe Logo](https://raw.githubusercontent.com/Vocaluxe/Vocaluxe/develop/Output/Graphics/Logo.png)
[![Build status](https://ci.appveyor.com/api/projects/status/y9ylgebv14i7usxx/branch/develop?svg=true)](https://ci.appveyor.com/project/VocaluxeBuildBot/vocaluxe/branch/develop)
[![Nightly build](https://img.shields.io/badge/nightly%20build-latest-blue.svg)](https://vocaluxe.org/#download)
[![Latest stable release](https://img.shields.io/github/release/vocaluxe/Vocaluxe.svg?label=stable%20release)](https://vocaluxe.org/#download)
[![Known bugs](https://img.shields.io/github/issues-raw/vocaluxe/vocaluxe/bug.svg?label=known%20bugs)](https://github.com/Vocaluxe/Vocaluxe/labels/bug)
[![Feature requests](https://img.shields.io/github/issues-raw/vocaluxe/vocaluxe/feature%20request.svg?label=feature%20requests&colorB=007ec6)](https://github.com/Vocaluxe/Vocaluxe/labels/feature%20request)
[![License](https://img.shields.io/badge/licence-GPLv3-blue.svg)](https://github.com/Vocaluxe/Vocaluxe/blob/develop/LICENSE.txt)
[1. About](#1-about) [1. About](#1-about)
[2. Download](#2-download) [2. Download](#2-download)
@@ -12,17 +19,15 @@ It features mouse, keyboard, gamepad and Wiimote navigation, a multi-language in
Vocaluxe offers diversified party modes and can optionally be controlled via a browser (desktop and mobile supported). Vocaluxe offers diversified party modes and can optionally be controlled via a browser (desktop and mobile supported).
Supported Operating Systems / Requirements: Supported Operating Systems / Requirements:
- WinXP, Vista, Windows 7, Windows 8, Windows 8.1 and Windows 10 with .NET 4.0 - Windows Vista, Windows 7, Windows 8, Windows 8.1 and Windows 10 with .NET 4.0
- Linux (tested on Arch Linux) - *Linux* (no official support)
- 1 GHz CPU, 512 MB RAM, Graphics card with OpenGL 2.1 or DirectX 9.0 support - 1 GHz CPU, 512 MB RAM, Graphics card with OpenGL 2.1 or DirectX 9.0 support
- Visual C++ Redistributable Package 2010
## 2. Download ## 2. Download
You can download precompiled Windows binaries at here: You can download precompiled Windows binaries at here:
http://vocaluxe.sourceforge.net/index.php?p=download https://vocaluxe.org/#download
Nightly builds are available here:
https://github.com/Vocaluxe/Vocaluxe/releases
## 3. Contributing ## 3. Contributing
You want to fix a bug or add a cool new feature to Vocaluxe? Awesome! You want to fix a bug or add a cool new feature to Vocaluxe? Awesome!
@@ -43,6 +48,7 @@ You have a problem or a question implementing your change?
Just [open an issue](https://github.com/Vocaluxe/Vocaluxe/issues/new) or mention `@Vocaluxe` in a comment on GitHub. Just [open an issue](https://github.com/Vocaluxe/Vocaluxe/issues/new) or mention `@Vocaluxe` in a comment on GitHub.
## 4. Help & Support ## 4. Help & Support
Vocaluxe Homepage: https://vocaluxe.org/
GitHub Wiki: https://github.com/Vocaluxe/Vocaluxe/wiki GitHub Wiki: https://github.com/Vocaluxe/Vocaluxe/wiki
GitHub Issues Tracker: https://github.com/Vocaluxe/Vocaluxe/issues GitHub Issues Tracker: https://github.com/Vocaluxe/Vocaluxe/issues
Translations: https://www.transifex.com/projects/p/vocaluxe/ Translations: https://www.transifex.com/projects/p/vocaluxe/
+8 -8
View File
@@ -193,11 +193,11 @@ namespace Vocaluxe.Base
//Folders //Folders
public static readonly List<string> SongFolders = new List<string> public static readonly List<string> SongFolders = new List<string>
{ {
#if WIN #if INSTALLER
Path.Combine(CSettings.DataFolder, CSettings.FolderNameSongs),
CSettings.FolderNameSongs
#elif WIN
CSettings.FolderNameSongs CSettings.FolderNameSongs
#elif INSTALLER
CSettings.FolderNameSongs,
Path.Combine(CSettings.DataFolder, CSettings.FolderNameSongs)
#elif LINUX #elif LINUX
Path.Combine(CSettings.DataFolder, CSettings.FolderNameSongs) Path.Combine(CSettings.DataFolder, CSettings.FolderNameSongs)
#endif #endif
@@ -208,11 +208,11 @@ namespace Vocaluxe.Base
/// </summary> /// </summary>
public static readonly List<string> ProfileFolders = new List<string> public static readonly List<string> ProfileFolders = new List<string>
{ {
#if WIN #if INSTALLER
Path.Combine(CSettings.DataFolder, CSettings.FolderNameProfiles),
CSettings.FolderNameProfiles
#elif WIN
CSettings.FolderNameProfiles CSettings.FolderNameProfiles
#elif INSTALLER
CSettings.FolderNameProfiles,
Path.Combine(CSettings.DataFolder, CSettings.FolderNameProfiles)
#elif LINUX #elif LINUX
Path.Combine(CSettings.DataFolder, CSettings.FolderNameProfiles) Path.Combine(CSettings.DataFolder, CSettings.FolderNameProfiles)
#endif #endif
+8 -51
View File
@@ -20,8 +20,10 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Xml;
namespace Vocaluxe.Base namespace Vocaluxe.Base
{ {
@@ -35,6 +37,8 @@ namespace Vocaluxe.Base
// ReSharper restore UnusedMember.Global // ReSharper restore UnusedMember.Global
} }
/// <summary> /// <summary>
/// This class contains settings for the program /// This class contains settings for the program
/// These are not editable, everything that can be changed by the user is in CConfig /// These are not editable, everything that can be changed by the user is in CConfig
@@ -52,26 +56,7 @@ namespace Vocaluxe.Base
//TODO: This should not be here as it can change //TODO: This should not be here as it can change
//State of the program //State of the program
public static EProgramState ProgramState = EProgramState.Start; public static EProgramState ProgramState = EProgramState.Start;
//Adjusting of programName and version now in the assembly config.
private static readonly Dictionary<string,string> _CodeNames = new Dictionary<string, string>()
{
{"0.3.", "Shining Heaven"},
{"0.4.", "Blue Sunrise"}
};
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 public static ERevision VersionRevision
{ {
@@ -208,6 +193,7 @@ namespace Vocaluxe.Base
{ {
get { return _Assembly.Name; } get { return _Assembly.Name; }
} }
private static string _Version private static string _Version
{ {
get get
@@ -215,39 +201,10 @@ namespace Vocaluxe.Base
return Application.ProductVersion.Split('-').First(); return Application.ProductVersion.Split('-').First();
} }
} }
private static string _GetVersionText()
{
string version = _Version + " (" + _Arch + ")";
string gitversion = Application.ProductVersion;
if (VersionRevision != ERevision.Release || gitversion.Split('-')[1] != "0")
{
version += " " + _GetVersionStatus() + String.Format(" ({0})", gitversion);
}
return version;
}
public static string GetFullVersionText() public static string GetFullVersionText()
{ {
string version = ProgramName; return ((AssemblyTitleAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false).First()).Title;
if (_ProgramCodeName != "")
version += " \"" + _ProgramCodeName + "\"";
return version + " " + _GetVersionText();
}
private static string _GetVersionStatus()
{
string result = "";
if (VersionRevision != ERevision.Release)
result = Enum.GetName(typeof(ERevision), VersionRevision);
return result;
} }
public static float GetRenderAspect() public static float GetRenderAspect()
+1 -1
View File
@@ -126,10 +126,10 @@ namespace Vocaluxe.Base
string noCategoryName; string noCategoryName;
switch (CSongs.Sorter.SongSorting) switch (CSongs.Sorter.SongSorting)
{ {
case ESongSorting.TR_CONFIG_FOLDER:
case ESongSorting.TR_CONFIG_NONE: case ESongSorting.TR_CONFIG_NONE:
noCategoryName = CLanguage.Translate("TR_SCREENSONG_ALLSONGS"); noCategoryName = CLanguage.Translate("TR_SCREENSONG_ALLSONGS");
break; break;
case ESongSorting.TR_CONFIG_FOLDER:
case ESongSorting.TR_CONFIG_ARTIST: case ESongSorting.TR_CONFIG_ARTIST:
case ESongSorting.TR_CONFIG_ARTIST_LETTER: case ESongSorting.TR_CONFIG_ARTIST_LETTER:
case ESongSorting.TR_CONFIG_TITLE_LETTER: case ESongSorting.TR_CONFIG_TITLE_LETTER:
+9 -2
View File
@@ -116,13 +116,20 @@ namespace Vocaluxe
public static bool CheckRequirements() public static bool CheckRequirements()
{ {
#if WIN #if WIN
if (!_IsVC2012Installed()) if (!_IsVC2010Installed())
{
CLog.LogError(
"VC++ 2010 Redistributables are missing. Please install them first. \r\nDownload(x86): https://www.microsoft.com/de-de/download/details.aspx?id=5555 \r\nDownload(x64): https://www.microsoft.com/de-de/download/details.aspx?id=14632",
true, true);
return false;
}
/*if (!_IsVC2012Installed())
{ {
CLog.LogError( CLog.LogError(
"VC++ 2012 Redistributables are missing. Please install them first.\r\nDownload: http://www.microsoft.com/de-de/download/details.aspx?id=30679", "VC++ 2012 Redistributables are missing. Please install them first.\r\nDownload: http://www.microsoft.com/de-de/download/details.aspx?id=30679",
true, true); true, true);
return false; return false;
} }*/
/* /*
bool vc2008Installed = _IsVC2008Installed(); bool vc2008Installed = _IsVC2008Installed();
if (!vc2008Installed) if (!vc2008Installed)
+10 -4
View File
@@ -88,18 +88,24 @@
- Spectrum Analyzer (Record Screen and Player Selection Screen) - Spectrum Analyzer (Record Screen and Player Selection Screen)
- WiiMote Support - WiiMote Support
+ v0.3.0 Shining Heaven (reached: ??.0?.2013): + v0.3.0 Shining Heaven (release skipped):
- Party Mode Support - Party Mode Support
- Party Mode: Challenge Mode (with more than 2 player at once) - Party Mode: Challenge Mode (with more than 2 player at once)
- Party Mode: Challenge Medley Mode - Party Mode: Challenge Medley Mode
- Party Mode: Tic, Tac, Toe - Party Mode: Tic, Tac, Toe
- GStreamer Audio Support - GStreamer Audio Support
- Smartphone control (webserver)
- Dynamic cover generation
- New Song View: List
+ v0.4.0 (reached: ??.??.201?): + v0.4.0 Blue Sunrise (reached: ??.??.201?):
- A lot of restructered and rewritten lines of code
- Some minor and bigger improvements and additions
- Updated audio and video libs
- New infrastructure: CI with nightly builds, new homepage, updated installer
----------------- -----------------
just some ideas: just some ideas:
- Installer
- More Song List Views - More Song List Views
- Tile Board: Show title and artist under each tile - Tile Board: Show title and artist under each tile
- OnScreen Keyboard? - OnScreen Keyboard?
@@ -121,4 +127,4 @@ some feature wishes:
- Party Modes: - Party Modes:
* add sing modes: hide notes, hide lyrics, ... * add sing modes: hide notes, hide lyrics, ...
* add a party mode where you can assign song categories and/or playlists to the profiles * add a party mode where you can assign song categories and/or playlists to the profiles
@@ -235,6 +235,11 @@ namespace Vocaluxe.Lib.Sound.Playback.GstreamerSharp
element = _Element; element = _Element;
_Element = null; //Now everything "seems" closed _Element = null; //Now everything "seems" closed
} }
// Should not be needed but we had an error report (#226) - so we double check here to prevent a crash
if (element == null)
return;
if (element.TargetState == State.Playing) if (element.TargetState == State.Playing)
element.SetState(State.Paused); //Stop output element.SetState(State.Paused); //Stop output
if (_CloseStreamListener != null) if (_CloseStreamListener != null)
+59 -59
View File
@@ -58,7 +58,22 @@ namespace Vocaluxe.Lib.Video.Acinerella
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct SACFileInfo public struct SACFileInfo
{ {
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public readonly string title;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public readonly string author;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public readonly string copyright;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public readonly string comment;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public readonly string album;
public readonly int year;
public readonly int track;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public readonly string genre;
public readonly Int64 Duration; public readonly Int64 Duration;
public readonly int Bitrate;
} }
// TAc_instance represents an Acinerella instance. Each instance can open and // TAc_instance represents an Acinerella instance. Each instance can open and
@@ -105,14 +120,17 @@ namespace Vocaluxe.Lib.Video.Acinerella
} }
// Contains information about an Acinerella stream. // Contains information about an Acinerella stream.
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Explicit)]
public struct SACStreamInfo public struct SACStreamInfo
{ {
//Contains the type of the stream. //Contains the type of the stream.
[FieldOffset(0)]
public readonly EACStreamType StreamType; public readonly EACStreamType StreamType;
//Additional info about the stream //Additional info about the stream
[FieldOffset(8)]
public SACAudioStreamInfo AudioInfo; public SACAudioStreamInfo AudioInfo;
[FieldOffset(8)]
public SACVideoStreamInfo VideoInfo; public SACVideoStreamInfo VideoInfo;
} }
@@ -128,7 +146,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
//The timecode of the currently decoded picture in seconds. //The timecode of the currently decoded picture in seconds.
public readonly double Timecode; public readonly double Timecode;
public readonly double VideoClock; //public readonly double VideoClock;
//Contains information about the stream the decoder is attached to. //Contains information about the stream the decoder is attached to.
public SACStreamInfo StreamInfo; public SACStreamInfo StreamInfo;
@@ -219,14 +237,14 @@ namespace Vocaluxe.Lib.Video.Acinerella
// Initializes an Acinerella instance. // Initializes an Acinerella instance.
//function ac_init(): PAc_instance; cdecl; external ac_dll; //function ac_init(): PAc_instance; cdecl; external ac_dll;
[DllImport(_AcDll, EntryPoint = "ac_init", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] [DllImport(_AcDll, EntryPoint = "ac_init_of", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
private static extern IntPtr _ac_init(); private static extern IntPtr _ac_init(EACOutputFormat outputFormat);
public static IntPtr AcInit() public static IntPtr AcInit()
{ {
lock (_Lock) lock (_Lock)
{ {
return _ac_init(); return _ac_init(EACOutputFormat.ACOutputRGBA32);
} }
} }
@@ -243,52 +261,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
} }
} }
// Opens a media file. [DllImport(_AcDll, EntryPoint = "ac_open_file", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
// @param(inst specifies the Acinerella Instance the stream should be opened for)
// @param(sender specifies a pointer that is sent to all callback functions to
// allow you to do object orientated programming. May be NULL.)
// @param(open_proc specifies the callback function that is called, when the
// media file is opened. May be NULL.)
// @param(close_proc specifies the callback function that is called when the media
// file is closed. May be NULL.)
/*function ac_open(
inst: PAc_instance;
sender: Pointer;
open_proc: TAc_openclose_callback;
read_proc: TAc_read_callback;
seek_proc: TAc_seek_callback;
close_proc: TAc_openclose_callback;
proberesult: PAc_proberesult): integer; cdecl; external ac_dll;
*/
/*
[DllImport(AcDll, EntryPoint = "ac_open", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
private static extern Int32 _ac_open(
IntPtr PAc_instance,
IntPtr sender,
TAc_openclose_callback open_proc,
TAc_read_callback read_proc,
TAc_seek_callback seek_proc,
TAc_openclose_callback close_proc,
IntPtr proberesult
);
public static Int32 ac_open(
IntPtr PAc_instance,
IntPtr sender,
TAc_openclose_callback open_proc,
TAc_read_callback read_proc,
TAc_seek_callback seek_proc,
TAc_openclose_callback close_proc,
IntPtr proberesult
)
{
lock (_GetLockToken(pAcDecoder))
{
return _ac_open(PAc_instance, sender, open_proc, read_proc, seek_proc, close_proc, proberesult);
}
}*/
[DllImport(_AcDll, EntryPoint = "ac_open", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern Int32 _ac_open2(IntPtr pAcInstance, string filename); private static extern Int32 _ac_open2(IntPtr pAcInstance, string filename);
// ReSharper disable UnusedMethodReturnValue.Global // ReSharper disable UnusedMethodReturnValue.Global
@@ -337,28 +310,55 @@ namespace Vocaluxe.Lib.Video.Acinerella
[DllImport(_AcDll, EntryPoint = "ac_free_package", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] [DllImport(_AcDll, EntryPoint = "ac_free_package", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
public static extern void ac_free_package(IntPtr pAcPackage); public static extern void ac_free_package(IntPtr pAcPackage);
[DllImport(_AcDll, EntryPoint = "ac_create_video_decoder", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] [DllImport(_AcDll, EntryPoint = "ac_create_decoder", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
private static extern IntPtr _ac_create_video_decoder(IntPtr pAcInstance); private static extern IntPtr _ac_create_decoder(IntPtr pAcInstance, int i);
public static IntPtr AcCreateVideoDecoder(IntPtr pAcInstance) public static IntPtr AcCreateVideoDecoder(IntPtr pAcInstance)
{ {
lock (_GetLockToken(pAcInstance)) lock (_GetLockToken(pAcInstance))
{ {
return _ac_create_video_decoder(pAcInstance); var firstVideoStreamId = _GetFirstStreamByType(pAcInstance, EACStreamType.ACStreamTypeVideo);
if (firstVideoStreamId < 0)
{
throw new ArgumentException("The instace does not contain a video stream.");
}
return _ac_create_decoder(pAcInstance, firstVideoStreamId);
} }
} }
[DllImport(_AcDll, EntryPoint = "ac_create_audio_decoder", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
private static extern IntPtr _ac_create_audio_decoder(IntPtr pAcInstance);
public static IntPtr AcCreateAudioDecoder(IntPtr pAcInstance) public static IntPtr AcCreateAudioDecoder(IntPtr pAcInstance)
{ {
lock (_GetLockToken(pAcInstance)) lock (_GetLockToken(pAcInstance))
{ {
return _ac_create_audio_decoder(pAcInstance); var firstAudioStreamId = _GetFirstStreamByType(pAcInstance, EACStreamType.ACStreamTypeAudio);
if (firstAudioStreamId < 0)
{
throw new ArgumentException("The instace does not contain a audio stream.");
}
return _ac_create_decoder(pAcInstance, firstAudioStreamId);
} }
} }
private static int _GetFirstStreamByType(IntPtr pAcInstance, EACStreamType type)
{
var instance = (SACInstance)Marshal.PtrToStructure(pAcInstance, typeof(SACInstance));
int currentStream = 0;
SACStreamInfo currentStreamInfo;
while (currentStream < instance.StreamCount)
{
AcGetStreamInfo(pAcInstance, currentStream, out currentStreamInfo);
if (currentStreamInfo.StreamType == type)
return currentStream;
currentStream++;
}
return -1;
}
// Frees an created decoder. // Frees an created decoder.
//procedure ac_free_decoder(pDecoder: PAc_decoder); cdecl; external ac_dll; //procedure ac_free_decoder(pDecoder: PAc_decoder); cdecl; external ac_dll;
[DllImport(_AcDll, EntryPoint = "ac_free_decoder", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] [DllImport(_AcDll, EntryPoint = "ac_free_decoder", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
@@ -447,6 +447,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
{ {
_Free(); _Free();
Stop(); Stop();
return;
} }
while (!_Terminated) while (!_Terminated)
File diff suppressed because it is too large. Load diff
+466 -158
View File
@@ -15,8 +15,8 @@
along with Acinerella. If not, see <http://www.gnu.org/licenses/>. along with Acinerella. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef VIDEOPLAY_H #ifndef _ACINERELLA_H_
#define VIDEOPLAY_H #define _ACINERELLA_H_
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
@@ -24,187 +24,495 @@
#ifdef _WIN32 #ifdef _WIN32
#define CALL_CONVT __cdecl #define CALL_CONVT __cdecl
#define EXTERN extern __declspec(dllexport)
#else #else
#define CALL_CONVT #define CALL_CONVT
#define EXTERN extern
#endif #endif
typedef long long int64; /**
* Defines the type of an Acinerella media stream. Currently only video and
* audio streams are supported, subtitle and data streams will be marked as
* "unknown".
*/
typedef enum _ac_stream_type {
/**
* The type of the media stream is not known. This kind of stream can not be
* decoded.
*/
AC_STREAM_TYPE_VIDEO = 0,
/*Defines the type of an Acinerella media stream. Currently only video and /**
audio streams are supported, subtitle and data streams will be marked as * This media stream is a video stream.
"unknown".*/ */
enum _ac_stream_type { AC_STREAM_TYPE_AUDIO = 1,
/*The type of the media stream is not known. This kind of stream can not be
decoded.*/
AC_STREAM_TYPE_VIDEO = 0,
/*This media stream is a video stream.*/
AC_STREAM_TYPE_AUDIO = 1,
/*This media stream is an audio stream.*/
AC_STREAM_TYPE_UNKNOWN = -1
};
typedef enum _ac_stream_type ac_stream_type; /**
* This media stream is an audio stream.
*/
AC_STREAM_TYPE_UNKNOWN = -1
} ac_stream_type;
/*Defines the type of an Acinerella media decoder.*/ /**
enum _ac_decoder_type { * Defines the type of an Acinerella media decoder.
/*This decoder is used to decode a video stream.*/ */
AC_DECODER_TYPE_VIDEO = 0, typedef enum _ac_decoder_type {
/* This decoder is used to decode an audio stram.*/ /**
AC_DECODER_TYPE_AUDIO = 1 * This decoder is used to decode a video stream.
}; */
AC_DECODER_TYPE_VIDEO = 0,
typedef enum _ac_decoder_type ac_decoder_type; /**
* This decoder is used to decode an audio stram.
*/
AC_DECODER_TYPE_AUDIO = 1
} ac_decoder_type;
/*Defines the format video/image data is outputted in*/ /**
enum _ac_output_format { * Defines the format video/image data is returned in.
AC_OUTPUT_RGB24 = 0, */
AC_OUTPUT_BGR24 = 1, typedef enum _ac_output_format {
AC_OUTPUT_RGBA32 = 2, AC_OUTPUT_RGB24 = 0,
AC_OUTPUT_BGRA32 = 3 AC_OUTPUT_BGR24 = 1,
}; AC_OUTPUT_RGBA32 = 2,
AC_OUTPUT_BGRA32 = 3,
AC_OUTPUT_YUV420P = 4,
AC_OUTPUT_UYVY422 = 5,
AC_OUTPUT_YUYV422 = 6
} ac_output_format;
typedef enum _ac_output_format ac_output_format; /*Contains information about the whole file/stream that has been opened. Default
values are ""
/*Contains information about the whole file/stream that has been opened. Default values are ""
for strings and -1 for integer values.*/ for strings and -1 for integer values.*/
struct _ac_file_info { typedef struct _ac_file_info {
/*Length of the file*/ /**
int64_t duration; * Title of the media file
}; */
char title[512];
typedef struct _ac_file_info ac_file_info; /**
typedef ac_file_info* lp_ac_file_info; * Author or artist of the media file.
*/
char author[512];
/*TAc_instance represents an Acinerella instance. Each instance can open and /**
decode one file at once. There can be only 26 Acinerella instances opened at * Copyright information.
once.*/ */
struct _ac_instance { char copyright[512];
/*If true, the instance currently opened a media file.*/
bool opened;
/*Contains the count of streams the media file has. This value is available
after calling the ac_open function.*/
int stream_count;
/*Set this value to change the image output format */
ac_output_format output_format;
/*Contains information about the opened stream/file*/
ac_file_info info;
};
typedef struct _ac_instance ac_instance; /**
/*Pointer on the Acinerella instance record.*/ * Comment stored in the file.
typedef ac_instance* lp_ac_instance; */
char comment[512];
/*Contains information about an Acinerella video stream.*/ /**
* Album the media file is from.
*/
char album[512];
/**
* Year in which the media file was created.
*/
int year;
/**
* Track number.
*/
int track;
/**
* Genre of the media file.
*/
char genre[32];
/**
* Length of the file in milliseconds.
*/
int64_t duration;
/**
* Bitrate of the file.
*/
int bitrate;
} ac_file_info;
typedef ac_file_info *lp_ac_file_info;
/**
* ac_instance represents an Acinerella instance. Each instance can open and
* decode one file at once.
*/
typedef struct _ac_instance {
/**
* If true, the instance currently opened a media file.
*/
bool opened;
/**
* Contains the count of streams the media file has. This value is available
* after calling the ac_open function.
*/
int stream_count;
/**
* Set this value to change the image output format
*/
ac_output_format output_format;
/**
* Contains information about the opened stream/file
*/
ac_file_info info;
} ac_instance;
/**
* Pointer on the Acinerella instance record.
*/
typedef ac_instance *lp_ac_instance;
/**
* Contains information about an Acinerella video stream.
*/
struct _ac_video_stream_info { struct _ac_video_stream_info {
/*The width of one frame.*/ /**
int frame_width; * The width of one frame.
/*The height of one frame.*/ */
int frame_height; int frame_width;
/*The width of one pixel. 1.07 for 4:3 format, 1,42 for the 16:9 format*/
float pixel_aspect;
/*Frames per second that should be played.*/
double frames_per_second;
};
typedef struct _ac_video_stream_info ac_video_stream_info;
/*Contains information about an Acinerella audio stream.*/
struct _ac_audio_stream_info {
/*Samples per second. Default values are 44100 or 48000.*/
int samples_per_second;
/*Bits per sample. Can be 8 or 16 Bit.*/
int bit_depth;
/*Count of channels in the audio stream.*/
int channel_count;
};
typedef struct _ac_audio_stream_info ac_audio_stream_info;
/**
* The height of one frame.
*/
int frame_height;
/**
* The width of one pixel. 1.07 for 4:3 format, 1,42 for the 16:9 format
*/
float pixel_aspect;
/**
* Frames per second that should be played.
*/
double frames_per_second;
};
/**
* Contains information about an Acinerella audio stream.
*/
struct _ac_audio_stream_info {
/**
* Samples per second. Default values are 44100 or 48000.
*/
int samples_per_second;
/**
* Bits per sample. Can be 8, 16 or 32 Bit. In the latter case the data is
* in floating point format.
*/
int bit_depth;
/**
* Count of channels in the audio stream.
*/
int channel_count;
};
/**
* Additional info about the stream - use "video_info" when the stream
* is an video stream, "audio_info" when the stream is an audio stream.
*/
union _ac_additional_stream_info {
struct _ac_audio_stream_info audio_info;
struct _ac_video_stream_info video_info;
};
/*Contains information about an Acinerella stream.*/ /*Contains information about an Acinerella stream.*/
struct _ac_stream_info { typedef struct _ac_stream_info {
/*Contains the type of the stream.*/ /**
ac_stream_type stream_type; * Contains the type of the stream.
ac_audio_stream_info audio_info; */
ac_video_stream_info video_info; ac_stream_type stream_type;
};
typedef struct _ac_stream_info ac_stream_info; /**
/*Pointer on TAc_stream_info*/ * Additional data depending on the stream type. Either access the
typedef ac_stream_info* lp_ac_stream_info; * "audio_info" or the "video_info" field, depending on the value stored in
* the "stream_type" member.
*/
union _ac_additional_stream_info additional_info;
} ac_stream_info;
/*Contains information about an Acinerella video/audio decoder.*/ /**
struct _ac_decoder { * Pointer on ac_stream_info
/*Pointer on the Acinerella instance*/ */
lp_ac_instance pacInstance; typedef ac_stream_info *lp_ac_stream_info;
/*Contains the type of the decoder.*/
ac_decoder_type type;
/*The timecode of the currently decoded picture in seconds */
double timecode;
double video_clock;
/*Contains information about the stream the decoder is attached to.*/
ac_stream_info stream_info;
/*The index of the stream the decoder is attached to.*/
int stream_index;
/*Pointer to the buffer which contains the data.*/
char *pBuffer;
/*Size of the data in the buffer.*/
int buffer_size;
};
typedef struct _ac_decoder ac_decoder; /**
/*Pointer on TAc_decoder.*/ * Contains information about an Acinerella video/audio decoder.
typedef ac_decoder* lp_ac_decoder; */
typedef struct _ac_decoder {
/**
* Pointer on the Acinerella instance.
*/
lp_ac_instance pacInstance;
/*Contains information about an Acinerella package.*/ /**
struct _ac_package { * Contains the type of the decoder.
/*The stream the package belongs to.*/ */
int stream_index; ac_decoder_type type;
};
typedef struct _ac_package ac_package; /**
/*Pointer on TAc_package*/ * The timecode of the currently decoded picture in seconds.
typedef ac_package* lp_ac_package; */
double timecode;
/*Initializes an Acinerella instance.*/ /**
extern lp_ac_instance CALL_CONVT ac_init(void); * Contains information about the stream the decoder is attached to.
extern void CALL_CONVT ac_free(lp_ac_instance pacInstance); */
ac_stream_info stream_info;
/*Opens a media file.*/ /**
* The index of the stream the decoder is attached to.
extern int CALL_CONVT ac_open2( */
lp_ac_instance pacInstance, int stream_index;
const char* filename
);
/*Closes an opened media file.*/
extern void CALL_CONVT ac_close(lp_ac_instance pacInstance);
/*Stores information in "pInfo" about stream number "nb".*/
extern void CALL_CONVT ac_get_stream_info(lp_ac_instance pacInstance, int nb, lp_ac_stream_info info);
/*Reads a package from an opened media file.*/ /**
extern lp_ac_package CALL_CONVT ac_read_package(lp_ac_instance pacInstance); * Pointer to the buffer which contains the data.
/*Frees a package that has been read.*/ */
extern void CALL_CONVT ac_free_package(lp_ac_package pPackage); uint8_t *pBuffer;
extern lp_ac_decoder CALL_CONVT ac_create_audio_decoder(lp_ac_instance pacInstance); /**
extern lp_ac_decoder CALL_CONVT ac_create_video_decoder(lp_ac_instance pacInstance); * Size of the data in the buffer.
/*Frees an created decoder.*/ */
extern void CALL_CONVT ac_free_decoder(lp_ac_decoder pDecoder); int buffer_size;
/*Decodes a package using the specified decoder. The decodec data is stored in the } ac_decoder;
"buffer" property of the decoder.*/
extern int CALL_CONVT ac_decode_package(lp_ac_package pPackage, lp_ac_decoder pDecoder); typedef ac_decoder *lp_ac_decoder;
extern int CALL_CONVT ac_drop_decode_package(lp_ac_package pPackage, lp_ac_decoder pDecoder);
/**
* Contains information about an Acinerella package.
*/
typedef struct _ac_package {
/*The stream the package belongs to.*/
int stream_index;
} ac_package;
typedef ac_package *lp_ac_package;
typedef void *lp_ac_proberesult;
/**
* Callback function used to ask the application to read data. Should return
* the number of bytes read or an value smaller than zero if an error occured.
*/
typedef int (CALL_CONVT *ac_read_callback)(void *sender, uint8_t *buf,
int size);
/**
* Callback function used to ask the application to seek.
*
* @param sender is the pointer specified in ac_open.
* @param pos is the position to which the stream should be seeked.
* @param whence specifies whether the seeking should be relative to the
* beginning of the file (0, SEEK_SET), relative to the current location (1,
* SEEK_CUR), or relative to the end of the file (2, SEEK_END)
* @return 0 if the function succeeds, -1 on failure.
*/
typedef int64_t (CALL_CONVT *ac_seek_callback)(void *sender, int64_t pos,
int whence);
/**
* Callback function that is used to notify the application when the data stream
* is opened or closed. For example the file pointer should be resetted to zero
* when the "open" function is called.
*/
typedef int (CALL_CONVT *ac_openclose_callback)(void *sender);
/**
* Initializes an Acinerella instance.
*
* @return a pointer at an acinerella instance. The instance must be freed using
* ac_free.
*/
EXTERN lp_ac_instance CALL_CONVT ac_init(void);
/**
* Initializes an Acinerella instance with a specific output format.
*
* @return a pointer at an acinerella instance. The instance must be freed using
* ac_free.
*/
EXTERN lp_ac_instance CALL_CONVT ac_init_of(ac_output_format outputFormat);
/**
* Frees a previously created Acinerella instance.
*
* @param pacInstance is the Acinerella instance that should be freed.
*/
EXTERN void CALL_CONVT ac_free(lp_ac_instance pacInstance);
/**
* Opens a media stream.
*
* @param inst specifies the Acinerella Instance the stream should be opened
* for.
* @param sender specifies a pointer that is sent to all callback functions to
* allow you to do object orientated programming. May be NULL.
* @param open_proc specifies the callback function that is called, when the
* media file is opened. May be NULL.
* @param seek_proc specifies the callback function that is called, when the
* ffmpeg decoder wants to seek in the file. May be NULL.
* @param close_proc specifies the callback function that is called when the
* media file is closed. May be NULL.
* @param proberesult is a pointer at a structure previously returned by
* ac_probe_input_buffer. May be NULL.
*/
EXTERN int CALL_CONVT
ac_open(lp_ac_instance pacInstance, void *sender,
ac_openclose_callback open_proc, ac_read_callback read_proc,
ac_seek_callback seek_proc, ac_openclose_callback close_proc,
lp_ac_proberesult proberesult);
/**
* Opens a media file.
*
* @param inst specifies the Acinerella Instance the stream should be opened
* for.
* @param file is the name of the file that should be opened.
*/
EXTERN int CALL_CONVT
ac_open_file(lp_ac_instance pacInstance, const char *filename);
/**
* Closes an opened media file.
*/
EXTERN void CALL_CONVT ac_close(lp_ac_instance pacInstance);
/**
* Stores information in "pInfo" about stream number "nb".
*/
EXTERN void CALL_CONVT ac_get_stream_info(lp_ac_instance pacInstance, int nb,
lp_ac_stream_info info);
/**
* Reads a package from an opened media file.
*
* @param pacInstance is the Acinerella instance from which the data should be
* read.
* @return a pointer at a ac_package structure or NULL on failure. The returned
* pointer must be freed with ac_free_package after use.
*/
EXTERN lp_ac_package CALL_CONVT ac_read_package(lp_ac_instance pacInstance);
/**
* Frees a package that has been read.
*
* @param pPackage is a pointer at the ac_package that should be freed. May be
* NULL in which case no operation is performed.
*/
EXTERN void CALL_CONVT ac_free_package(lp_ac_package pPackage);
/**
* Creates an decoder for the specified stream number. Returns NULL if no
* decoder could be found.
*/
EXTERN lp_ac_decoder CALL_CONVT
ac_create_decoder(lp_ac_instance pacInstance, int nb);
/**
* Frees an created decoder.
*/
EXTERN void CALL_CONVT ac_free_decoder(lp_ac_decoder pDecoder);
/**
* Decodes a package using the specified decoder. The decoded data is stored in
* the "buffer" property of the decoder.
*
* @param pPackage is the package that should be decoded, previously read by the
* ac_read_package method.
* @param pDecoder is the decoder instance that should be used to decode the
* package -- use the stream index stored in the package to determine the
* correct decoder.
*/
EXTERN int CALL_CONVT
ac_decode_package(lp_ac_package pPackage, lp_ac_decoder pDecoder);
/**
* Decodes a package using the specified decoder and skips it. Returns true if a frame was skiped.
*
* @param pPackage is the package that should be decoded, previously read by the
* ac_read_package method.
* @param pDecoder is the decoder instance that should be used to decode the
* package -- use the stream index stored in the package to determine the
* correct decoder.
*/
EXTERN int CALL_CONVT
ac_skip_package(lp_ac_package pPackage, lp_ac_decoder pDecoder);
/**
* Decodes a packages using the specified decoder and skips num frames. Returns true if num frames where skiped.
*
* @param pacInstance is the Acinerella instance from which the data should be
* read.
* @param pDecoder is the decoder instance that should be used to decode the
* package -- use the stream index stored in the package to determine the
* correct decoder.
* @num number of frames to skip.
*/
EXTERN int CALL_CONVT
ac_skip_frames(lp_ac_instance pacInstance, lp_ac_decoder pDecoder, int num);
/**
* Decodes a video frame using the specified decoder and strores the result in the decoder. Returns true if a frame cloud be decoded.
*
* @param pacInstance is the Acinerella instance from which the data should be
* read.
* @param pDecoder is the decoder instance that should be used to decode the
* package -- use the stream index stored in the package to determine the
* correct decoder.
*/
EXTERN int CALL_CONVT
ac_get_frame(lp_ac_instance pacInstance, lp_ac_decoder pDecoder);
/**
* Decodes a audio frame using the specified decoder and strores the result in the decoder. Returns true if a frame cloud be decoded.
*
* @param pacInstance is the Acinerella instance from which the data should be
* read.
* @param pDecoder is the decoder instance that should be used to decode the
* package -- use the stream index stored in the package to determine the
* correct decoder.
*/
EXTERN int CALL_CONVT
ac_get_audio_frame(lp_ac_instance pacInstance, lp_ac_decoder pDecoder);
/**
* Seeks to the given target position in the file. The seek funtion is not able
* to seek a single audio/video stream but seeks the whole file forward. The
* stream number paremter (nb) is only used for the timecode reference.
* The parameter "dir" specifies the seek direction: 0 for forward, -1 for
* backward. The target_pos paremeter is in milliseconds. Returns 1 if the
* functions succeded.
*/
EXTERN int CALL_CONVT
ac_seek(lp_ac_decoder pDecoder, int dir, int64_t target_pos);
/**
* Checks whether the given input buffer contains data that can potentially be
* decoded by Acinerella. If yes, returns a pointer that may be passed to
* ac_open in order to speed up the open process. Otherwise returns NULL.
*
* @param buf is a pointer to the buffer in which the data is stored.
* @param bufsize is the size of the buffer.
* @param filename is the name of the file the buffer originated from. May be
* empty or NULL.
* @param score_max is set to the maximum of the previous value of score_max
* and an internal score value.
* @return either a pointer at an internal "probe result" or NULL if the buffer
* contains no decodeable data.
*/
EXTERN lp_ac_proberesult CALL_CONVT
ac_probe_input_buffer(uint8_t *buf, int bufsize, char *filename,
int *score_max);
#endif /* _ACINERELLA_H_ */
extern int CALL_CONVT ac_get_audio_frame(lp_ac_instance pacInstance, lp_ac_decoder pDecoder);
extern int CALL_CONVT ac_get_frame(lp_ac_instance pacInstance, lp_ac_decoder pDecoder);
extern int CALL_CONVT ac_skip_frames(lp_ac_instance pacInstance, lp_ac_decoder pDecoder, int num);
/*Seeks to the given target position in the file. The seek funtion is not able to seek a single audio/video stream
but seeks the whole file forward. The stream number paremter (nb) is only used for the timecode reference.
The parameter "dir" specifies the seek direction: 0 for forward, -1 for backward.
The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.*/
extern int CALL_CONVT ac_seek(lp_ac_decoder pDecoder, int dir, int64_t target_pos);
#endif /*VIDEOPLAY_H*/
-6
View File
@@ -1,6 +0,0 @@
#!/bin/sh
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
+3
View File
@@ -92,6 +92,9 @@ namespace Vocaluxe
try try
{ {
// Create data folder
Directory.CreateDirectory(CSettings.DataFolder);
// Init Log // Init Log
CLog.Init(); CLog.Init();
+2 -2
View File
@@ -22,12 +22,12 @@ using System.Runtime.InteropServices;
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die mit einer Assembly verknüpft sind. // die mit einer Assembly verknüpft sind.
[assembly: AssemblyTitle("Vocaluxe")] [assembly: AssemblyTitle("FULLVERSION")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Vocaluxe")] [assembly: AssemblyProduct("Vocaluxe")]
[assembly: AssemblyCopyright("Copyright © 2016")] [assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
+1 -1
View File
@@ -285,7 +285,7 @@ namespace Vocaluxe.Screens
private void _ChangePos(int num) private void _ChangePos(int num)
{ {
if (_Scores[_Round].Count == 0) if (_Scores[_Round].Count == 0 || _Scores[_Round].Count <= _NumEntrys)
_Pos = 0; _Pos = 0;
else else
{ {
+5
View File
@@ -57,6 +57,7 @@ namespace Vocaluxe.Screens
_Texts[_TextRelease].Visible = true; _Texts[_TextRelease].Visible = true;
_Statics[_StaticWarningProfiles].Visible = false; _Statics[_StaticWarningProfiles].Visible = false;
_Texts[_TextWarningProfiles].Visible = false; _Texts[_TextWarningProfiles].Visible = false;
_SelectElement(_Buttons[_ButtonSing]);
} }
public override bool HandleInput(SKeyEvent keyEvent) public override bool HandleInput(SKeyEvent keyEvent)
@@ -105,6 +106,10 @@ namespace Vocaluxe.Screens
return false; return false;
break; break;
case Keys.Escape:
_SelectElement(_Buttons[_ButtonExit]);
break;
} }
} }
return true; return true;
+1
View File
@@ -80,6 +80,7 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
CParty.SetNormalGameMode(); CParty.SetNormalGameMode();
_SaveConfig();
CGraphics.FadeTo(EScreen.Song); CGraphics.FadeTo(EScreen.Song);
break; break;
+1
View File
@@ -67,6 +67,7 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
CParty.SetNormalGameMode(); CParty.SetNormalGameMode();
_SaveConfig();
CGraphics.FadeTo(EScreen.Song); CGraphics.FadeTo(EScreen.Song);
break; break;
+1
View File
@@ -112,6 +112,7 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
CParty.SetNormalGameMode(); CParty.SetNormalGameMode();
_SaveMicConfig();
CGraphics.FadeTo(EScreen.Song); CGraphics.FadeTo(EScreen.Song);
break; break;
+1
View File
@@ -89,6 +89,7 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
CParty.SetNormalGameMode(); CParty.SetNormalGameMode();
_SaveConfig();
CGraphics.FadeTo(EScreen.Song); CGraphics.FadeTo(EScreen.Song);
break; break;
+1
View File
@@ -92,6 +92,7 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
CParty.SetNormalGameMode(); CParty.SetNormalGameMode();
_SaveConfig();
CGraphics.FadeTo(EScreen.Song); CGraphics.FadeTo(EScreen.Song);
break; break;
+1
View File
@@ -95,6 +95,7 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
CParty.SetNormalGameMode(); CParty.SetNormalGameMode();
_SaveConfig();
CGraphics.FadeTo(EScreen.Song); CGraphics.FadeTo(EScreen.Song);
break; break;
@@ -56,6 +56,7 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
CParty.SetNormalGameMode(); CParty.SetNormalGameMode();
_SaveConfig();
CGraphics.FadeTo(EScreen.Song); CGraphics.FadeTo(EScreen.Song);
break; break;
+10
View File
@@ -319,6 +319,8 @@ namespace Vocaluxe.Screens
_Buttons[_ButtonDiscardSnapshot].Visible = false; _Buttons[_ButtonDiscardSnapshot].Visible = false;
_Buttons[_ButtonTakeSnapshot].Visible = false; _Buttons[_ButtonTakeSnapshot].Visible = false;
_Buttons[_ButtonWebcam].Visible = false; _Buttons[_ButtonWebcam].Visible = false;
_SelectElement(_Buttons[_ButtonSave]);
} }
else else
{ {
@@ -330,6 +332,8 @@ namespace Vocaluxe.Screens
_Buttons[_ButtonDiscardSnapshot].Visible = true; _Buttons[_ButtonDiscardSnapshot].Visible = true;
_Buttons[_ButtonTakeSnapshot].Visible = false; _Buttons[_ButtonTakeSnapshot].Visible = false;
_Buttons[_ButtonWebcam].Visible = false; _Buttons[_ButtonWebcam].Visible = false;
_SelectElement(_Buttons[_ButtonSaveSnapshot]);
} }
} }
@@ -341,6 +345,8 @@ namespace Vocaluxe.Screens
_Buttons[_ButtonDiscardSnapshot].Visible = false; _Buttons[_ButtonDiscardSnapshot].Visible = false;
_Buttons[_ButtonTakeSnapshot].Visible = false; _Buttons[_ButtonTakeSnapshot].Visible = false;
_Buttons[_ButtonWebcam].Visible = CWebcam.IsDeviceAvailable(); _Buttons[_ButtonWebcam].Visible = CWebcam.IsDeviceAvailable();
_SelectElement(_Buttons[_ButtonWebcam]);
} }
private void _OnSaveSnapshot() private void _OnSaveSnapshot()
@@ -359,6 +365,8 @@ namespace Vocaluxe.Screens
int id = CProfiles.NewAvatar(file); int id = CProfiles.NewAvatar(file);
CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].SelectedTag, id); CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].SelectedTag, id);
_LoadAvatars(false); _LoadAvatars(false);
_SelectElement(_Buttons[_ButtonSave]);
} }
private void _OnWebcam() private void _OnWebcam()
@@ -374,6 +382,8 @@ namespace Vocaluxe.Screens
_Buttons[_ButtonDiscardSnapshot].Visible = false; _Buttons[_ButtonDiscardSnapshot].Visible = false;
_Buttons[_ButtonTakeSnapshot].Visible = true; _Buttons[_ButtonTakeSnapshot].Visible = true;
_Buttons[_ButtonWebcam].Visible = false; _Buttons[_ButtonWebcam].Visible = false;
_SelectElement(_Buttons[_ButtonTakeSnapshot]);
} }
private void _NewProfile() private void _NewProfile()
+16 -1
View File
@@ -172,7 +172,12 @@ namespace Vocaluxe.Screens
{ {
keyEvent.Handled = _Playlist.HandleInput(keyEvent); keyEvent.Handled = _Playlist.HandleInput(keyEvent);
if (keyEvent.Handled) if (keyEvent.Handled)
{
//Check if playlist was closed and song menu needed to be resized
if (!_Playlist.Visible)
_SongMenu.SmallView = false;
return true; return true;
}
if (!keyEvent.KeyPressed && keyEvent.Key == Keys.Escape) if (!keyEvent.KeyPressed && keyEvent.Key == Keys.Escape)
{ {
_ClosePlaylist(); _ClosePlaylist();
@@ -362,7 +367,10 @@ namespace Vocaluxe.Screens
{ {
if (CSongs.IsInCategory) if (CSongs.IsInCategory)
_SongMenu.SetSelectedSong(CSongs.GetRandomSong()); _SongMenu.SetSelectedSong(CSongs.GetRandomSong());
else }
else if (_Buttons[_ButtonOptionsRandomCategory].Selected)
{
if (!CSongs.IsInCategory)
_SongMenu.SetSelectedCategory(CSongs.GetRandomCategory()); _SongMenu.SetSelectedCategory(CSongs.GetRandomCategory());
} }
else if (_Buttons[_ButtonOptionsSingAll].Selected) else if (_Buttons[_ButtonOptionsSingAll].Selected)
@@ -411,7 +419,12 @@ namespace Vocaluxe.Screens
_SongMenu.Selected = false; _SongMenu.Selected = false;
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
if (_Playlist.HandleMouse(mouseEvent)) if (_Playlist.HandleMouse(mouseEvent))
{
//Check if playlist was closed and song menu needed to be resized
if (!_Playlist.Visible)
_SongMenu.SmallView = false;
return true; return true;
}
} }
else if (CHelper.IsInBounds(_SongMenu.Rect, mouseEvent)) else if (CHelper.IsInBounds(_SongMenu.Rect, mouseEvent))
{ {
@@ -1261,6 +1274,8 @@ namespace Vocaluxe.Screens
{ {
_SongMenu.SmallView = true; _SongMenu.SmallView = true;
_Playlist.Visible = true; _Playlist.Visible = true;
_SelectElement(_Playlist);
_ToggleSongOptions(ESongOptionsView.None);
} }
} }
+11 -12
View File
@@ -477,15 +477,14 @@
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>
<PostBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">xcopy /E /D /Y "$(ProjectDir)\Website" "$(SolutionDir)\PhoneGap" <PostBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">xcopy /E /D /Y "$(ProjectDir)\Website" "$(SolutionDir)\PhoneGap"</PostBuildEvent>
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 '(?&lt;=var *matchingServerVersion * = *\")\w*(?=\" *;)', "$version"} | Set-Content -Encoding UTF8 '$(ProjectDir)..\Output\Website\js\main.js'" <PostBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">powershell -ExecutionPolicy Bypass -File $(SolutionDir)\.build\winPostBuild.ps1 $(ProjectDir)</PostBuildEvent>
powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs') | Foreach-Object {$_ -replace '(?&lt;=AssemblyInformationalVersion\(\").*(?=\")', 'GITVERSION'} | Foreach-Object {$_ -replace '(?&lt;=(AssemblyVersion|AssemblyFileVersion)\(\").*(?=\")', 'SHORTVERSION'} | Set-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs' "</PostBuildEvent>
<PostBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">cp -ruT "$(ProjectDir)Website" "$(SolutionDir)/PhoneGap"</PostBuildEvent> <PostBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">cp -ruT "$(ProjectDir)Website" "$(SolutionDir)/PhoneGap"</PostBuildEvent>
<PostBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">$(ProjectDir)Linux/Build/PostBuildEvent.sh $(ProjectDir)</PostBuildEvent> <PostBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">$(SolutionDir)/.build/linuxPostBuildEvent.sh $(ProjectDir)</PostBuildEvent>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">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 '(?&lt;=AssemblyInformationalVersion\(\").*(?=\")', $version} | Foreach-Object {$_ -replace '(?&lt;=(AssemblyVersion|AssemblyFileVersion)\(\").*(?=\")', $version.Split('-')[0].replace('alpha','0').replace('beta','1').replace('rc','2')} | Foreach-Object {$_ -replace '(?&lt;=AssemblyCopyright\(\".*)[0-9]+(?=\")', (Get-Date).Year} | Set-Content -Encoding UTF8 '$(ProjectDir)Properties\AssemblyInfo.cs' "</PreBuildEvent> <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">powershell -ExecutionPolicy Bypass -File $(SolutionDir)\.build\winPreBuild.ps1 $(ProjectDir) $(Platform)</PreBuildEvent>
<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">$(ProjectDir)Linux/Build/PreBuildEvent.sh $(ProjectDir)</PreBuildEvent> <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">$(SolutionDir)/.build/linuxPreBuildEvent.sh $(ProjectDir) $(Platform)</PreBuildEvent>
</PropertyGroup> </PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
@@ -536,10 +535,10 @@ powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\Assemb
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Rebuild for automatic package restore. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Rebuild for automatic package restore. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.acinerella.1.0.3\build\vocaluxe.dependencies.acinerella.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.acinerella.1.0.3\build\vocaluxe.dependencies.acinerella.targets'))" /> <Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.acinerella.1.0.5\build\vocaluxe.dependencies.acinerella.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.acinerella.1.0.5\build\vocaluxe.dependencies.acinerella.targets'))" />
<Error Condition="!Exists('..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets'))" /> <Error Condition="!Exists('..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets'))" />
<Error Condition="!Exists('..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets'))" /> <Error Condition="!Exists('..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets'))" />
<Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.ffmpeg.1.0.3\build\vocaluxe.dependencies.ffmpeg.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.ffmpeg.1.0.3\build\vocaluxe.dependencies.ffmpeg.targets'))" /> <Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.ffmpeg.1.0.4\build\vocaluxe.dependencies.ffmpeg.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.ffmpeg.1.0.4\build\vocaluxe.dependencies.ffmpeg.targets'))" />
<Error Condition="!Exists('..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets'))" /> <Error Condition="!Exists('..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets'))" />
<Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets'))" /> <Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets'))" />
<Error Condition="!Exists('..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets'))" /> <Error Condition="!Exists('..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets'))" />
@@ -548,12 +547,12 @@ powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\Assemb
<Error Condition="!Exists('..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets'))" /> <Error Condition="!Exists('..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets'))" />
<Error Condition="!Exists('..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets'))" /> <Error Condition="!Exists('..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets'))" />
<Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets'))" /> <Error Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND !Exists('..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets'))" />
<Error Condition="!Exists('..\packages\vocaluxe.dependencies.1.0.10\build\vocaluxe.dependencies.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.1.0.10\build\vocaluxe.dependencies.targets'))" /> <Error Condition="!Exists('..\packages\vocaluxe.dependencies.1.0.11\build\vocaluxe.dependencies.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vocaluxe.dependencies.1.0.11\build\vocaluxe.dependencies.targets'))" />
</Target> </Target>
<Import Project="..\packages\vocaluxe.dependencies.acinerella.1.0.3\build\vocaluxe.dependencies.acinerella.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.acinerella.1.0.3\build\vocaluxe.dependencies.acinerella.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.acinerella.1.0.5\build\vocaluxe.dependencies.acinerella.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.acinerella.1.0.5\build\vocaluxe.dependencies.acinerella.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets" Condition="Exists('..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets" Condition="Exists('..\packages\vocaluxe.dependencies.aforgevideo.1.0.1\build\vocaluxe.dependencies.aforgevideo.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets" Condition="Exists('..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets" Condition="Exists('..\packages\vocaluxe.dependencies.csharpsqlite.1.0.1\build\vocaluxe.dependencies.csharpsqlite.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.ffmpeg.1.0.3\build\vocaluxe.dependencies.ffmpeg.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.ffmpeg.1.0.3\build\vocaluxe.dependencies.ffmpeg.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.ffmpeg.1.0.4\build\vocaluxe.dependencies.ffmpeg.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.ffmpeg.1.0.4\build\vocaluxe.dependencies.ffmpeg.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets" Condition="Exists('..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets" Condition="Exists('..\packages\vocaluxe.dependencies.gstreamersharp.1.0.1\build\vocaluxe.dependencies.gstreamersharp.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.hidapi.1.0.4\build\vocaluxe.dependencies.hidapi.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets" Condition="Exists('..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets" Condition="Exists('..\packages\vocaluxe.dependencies.opentk.1.0.1\build\vocaluxe.dependencies.opentk.targets')" />
@@ -562,5 +561,5 @@ powershell -command "(Get-Content -Encoding UTF8 '$(ProjectDir)Properties\Assemb
<Import Project="..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets" Condition="Exists('..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets" Condition="Exists('..\packages\vocaluxe.dependencies.slimdx.1.0.1\build\vocaluxe.dependencies.slimdx.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets" Condition="Exists('..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets" Condition="Exists('..\packages\vocaluxe.dependencies.sqlite.1.0.1\build\vocaluxe.dependencies.sqlite.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets" Condition="'$(Configuration)' != 'ReleaseLinux' AND '$(Configuration)' != 'DebugLinux' AND Exists('..\packages\vocaluxe.dependencies.gstreamer.1.0.2\build\vocaluxe.dependencies.gstreamer.targets')" />
<Import Project="..\packages\vocaluxe.dependencies.1.0.10\build\vocaluxe.dependencies.targets" Condition="Exists('..\packages\vocaluxe.dependencies.1.0.10\build\vocaluxe.dependencies.targets')" /> <Import Project="..\packages\vocaluxe.dependencies.1.0.11\build\vocaluxe.dependencies.targets" Condition="Exists('..\packages\vocaluxe.dependencies.1.0.11\build\vocaluxe.dependencies.targets')" />
</Project> </Project>
+3 -3
View File
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="vocaluxe.dependencies" version="1.0.10" targetFramework="net40" /> <package id="vocaluxe.dependencies" version="1.0.11" targetFramework="net40" />
<package id="vocaluxe.dependencies.acinerella" version="1.0.3" targetFramework="net40" /> <package id="vocaluxe.dependencies.acinerella" version="1.0.5" targetFramework="net40" />
<package id="vocaluxe.dependencies.aforgevideo" version="1.0.1" targetFramework="net40" /> <package id="vocaluxe.dependencies.aforgevideo" version="1.0.1" targetFramework="net40" />
<package id="vocaluxe.dependencies.csharpsqlite" version="1.0.1" targetFramework="net40" /> <package id="vocaluxe.dependencies.csharpsqlite" version="1.0.1" targetFramework="net40" />
<package id="vocaluxe.dependencies.ffmpeg" version="1.0.3" targetFramework="net40" /> <package id="vocaluxe.dependencies.ffmpeg" version="1.0.4" targetFramework="net40" />
<package id="vocaluxe.dependencies.gstreamer" version="1.0.2" targetFramework="net40" /> <package id="vocaluxe.dependencies.gstreamer" version="1.0.2" targetFramework="net40" />
<package id="vocaluxe.dependencies.gstreamersharp" version="1.0.1" targetFramework="net40" /> <package id="vocaluxe.dependencies.gstreamersharp" version="1.0.1" targetFramework="net40" />
<package id="vocaluxe.dependencies.hidapi" version="1.0.4" targetFramework="net40" /> <package id="vocaluxe.dependencies.hidapi" version="1.0.4" targetFramework="net40" />
+1 -3
View File
@@ -37,7 +37,7 @@ namespace VocaluxeLib.Menu
} }
} }
private bool _Teams; protected bool _Teams = true;
protected int _NumTeams = -1; protected int _NumTeams = -1;
protected int _NumPlayer = -1; protected int _NumPlayer = -1;
protected int[] _NumPlayerTeams; protected int[] _NumPlayerTeams;
@@ -106,8 +106,6 @@ namespace VocaluxeLib.Menu
for (int i = 0; i < _TeamList.Length; i++) for (int i = 0; i < _TeamList.Length; i++)
_TeamList[i] = new List<int>(); _TeamList[i] = new List<int>();
_Teams = _NumTeams > 0;
_UpdateSlides(); _UpdateSlides();
_LoadProfiles(); _LoadProfiles();
_UpdateButtonVisibility(); _UpdateButtonVisibility();
+21 -6
View File
@@ -119,18 +119,24 @@ namespace VocaluxeLib.Menu
keyEvent.Handled = PrevValue(); keyEvent.Handled = PrevValue();
else else
keyEvent.Handled = _NextElement(keyEvent); keyEvent.Handled = _NextElement(keyEvent);
}
if (keyEvent.Key == Keys.Right) return true;
}
else if (keyEvent.Key == Keys.Right)
{ {
if (_IsSelectionValid() && _Elements[_Selection].Type == EType.SelectSlide && keyEvent.Mod != EModifier.Shift) if (_IsSelectionValid() && _Elements[_Selection].Type == EType.SelectSlide && keyEvent.Mod != EModifier.Shift)
keyEvent.Handled = NextValue(); keyEvent.Handled = NextValue();
else else
keyEvent.Handled = _NextElement(keyEvent); keyEvent.Handled = _NextElement(keyEvent);
}
if (keyEvent.Key == Keys.Up || keyEvent.Key == Keys.Down) return true;
}
else if (keyEvent.Key == Keys.Up || keyEvent.Key == Keys.Down)
{
keyEvent.Handled = _NextElement(keyEvent); keyEvent.Handled = _NextElement(keyEvent);
return true;
}
} }
else else
{ {
@@ -140,16 +146,25 @@ namespace VocaluxeLib.Menu
PrevElement(); PrevElement();
else else
NextElement(); NextElement();
return true;
} }
if (keyEvent.Key == Keys.Left) if (keyEvent.Key == Keys.Left)
{
PrevValue(); PrevValue();
if (keyEvent.Key == Keys.Right) return true;
}
else if (keyEvent.Key == Keys.Right)
{
NextValue(); NextValue();
return true;
}
} }
return true; return false;
} }
public virtual bool HandleMouse(SMouseEvent mouseEvent) public virtual bool HandleMouse(SMouseEvent mouseEvent)
+6 -3
View File
@@ -80,15 +80,17 @@ after_build:
test: off test: off
before_deploy: before_deploy:
- ps: ./.appveyor/prepareDeploy.ps1 - ps: ./.appveyor/prepareDeploy.ps1
after_deploy:
- ps: ./.appveyor/afterDeploy.ps1
deploy: deploy:
- provider: GitHub - provider: GitHub
tag: $(APPVEYOR_REPO_TAG_NAME) tag: $(APPVEYOR_REPO_TAG_NAME)
release: $(APPVEYOR_REPO_TAG_NAME) release: $(APPVEYOR_REPO_TAG_NAME)
description: description: $(APPVEYOR_REPO_COMMIT)
auth_token: auth_token:
secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW
artifact: ReleaseZip artifact: ReleaseZip
prerelease: true prerelease: $(IS_BETA_RELEASE)
on: on:
APPVEYOR_REPO_TAG: true APPVEYOR_REPO_TAG: true
NIGHTLY_BUILD: false NIGHTLY_BUILD: false
@@ -96,10 +98,11 @@ deploy:
- provider: GitHub - provider: GitHub
tag: $(APPVEYOR_REPO_TAG_NAME) tag: $(APPVEYOR_REPO_TAG_NAME)
release: Latest Nightly build release: Latest Nightly build
description: description: $(APPVEYOR_REPO_COMMIT)
auth_token: auth_token:
secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW
artifact: ReleaseZip artifact: ReleaseZip
prerelease: true
on: on:
APPVEYOR_REPO_TAG: true APPVEYOR_REPO_TAG: true
NIGHTLY_BUILD: true NIGHTLY_BUILD: true