├── .github
├── FUNDING.yml
└── workflows
│ └── build.yaml
├── .gitignore
├── App.xaml
├── Common
├── Constants
│ ├── App.cs
│ ├── Directory.cs
│ ├── Resource.cs
│ └── SoundFile.cs
├── EnumConverter.cs
├── Extensions
│ └── List.cs
└── StringUtilities.cs
├── Contributors.md
├── Downloaders
├── DownloadManager.cs
├── IDownloadManager.cs
├── IDownloader.cs
├── KHDownloader.cs
└── YtDownloader.cs
├── LICENSE
├── Localization.cs
├── Localization
├── LocSource.xaml
├── af_ZA.xaml
├── ar_SA.xaml
├── ca_ES.xaml
├── cs_CZ.xaml
├── da_DK.xaml
├── de_DE.xaml
├── el_GR.xaml
├── en_US.xaml
├── eo_UY.xaml
├── es_ES.xaml
├── et_EE.xaml
├── fa_IR.xaml
├── fi_FI.xaml
├── fr_FR.xaml
├── he_IL.xaml
├── hr_HR.xaml
├── hu_HU.xaml
├── id_ID.xaml
├── it_IT.xaml
├── ja_JP.xaml
├── ko_KR.xaml
├── lt_LT.xaml
├── nl_NL.xaml
├── no_NO.xaml
├── pl_PL.xaml
├── pt_BR.xaml
├── pt_PT.xaml
├── ro_RO.xaml
├── ru_RU.xaml
├── sk_SK.xaml
├── sr_SP.xaml
├── sv_SE.xaml
├── tr_TR.xaml
├── uk_UA.xaml
├── vi_VN.xaml
├── zh_CN.xaml
└── zh_TW.xaml
├── Models
├── Album.cs
├── AudioState.cs
├── DownloadItem.cs
├── GenericObjectOption.cs
├── MusicType.cs
├── PlayniteSoundSettings.cs
├── Song.cs
└── Source.cs
├── PlayerEntry.cs
├── PlayniteSounds.cs
├── PlayniteSounds.csproj
├── PlayniteSounds.sln
├── PlayniteSounds.yaml
├── PlayniteSoundsSettingsView.xaml
├── PlayniteSoundsSettingsView.xaml.cs
├── PlayniteSoundsSettingsViewModel.cs
├── Properties
└── AssemblyInfo.cs
├── README.md
├── Scripts
├── UpdatePlaynite.ps1
└── XamlUpdater.ps1
├── Sound Files
├── D_ApplicationStarted.wav
├── D_ApplicationStopped.wav
├── D_GameInstalled.wav
├── D_GameSelected.wav
├── D_GameStarting.wav
├── D_GameUninstalled.wav
├── D_LibraryUpdated.wav
├── F_ApplicationStarted.wav
├── F_ApplicationStopped.wav
├── F_GameInstalled.wav
├── F_GameSelected.wav
├── F_GameStarting.wav
├── F_GameUninstalled.wav
├── F_LibraryUpdated.wav
├── SoundCredits.txt
└── _music_.mp3
├── _config.yml
├── app.config
├── extension.yaml
├── icon.png
└── packages.config
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | ko_fi: joyrider3774
2 |
--------------------------------------------------------------------------------
/.github/workflows/build.yaml:
--------------------------------------------------------------------------------
1 | on:
2 | release:
3 | types: [published]
4 |
5 | name: Build and Upload Release Asset
6 |
7 | jobs:
8 | build:
9 | name: Build and Upload Release Asset
10 | runs-on: windows-latest
11 | steps:
12 | - name: Checkout code
13 | uses: actions/checkout@v2
14 |
15 | - name: Add msbuild to PATH
16 | uses: microsoft/setup-msbuild@v1.0.3
17 |
18 | - name: Setup NuGet.exe
19 | uses: nuget/setup-nuget@v1
20 |
21 | - name: Restore NuGet Packages
22 | run: nuget restore PlayniteSounds.sln
23 |
24 | - name: Build and Publish
25 | run: |
26 | msbuild PlayniteSounds.sln /p:Configuration=Release
27 | $version = ($env:GITHUB_REF -Split "/")[-1]
28 | echo "VERSION=$version" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
29 |
30 | - name: Setup Playnite
31 | run: |
32 | mkdir playnite
33 | Invoke-WebRequest -Uri "https://github.com/JosefNemec/Playnite/releases/download/9.16/Playnite916.zip" -OutFile "playnite\Playnite916.zip"
34 | Expand-Archive "playnite\playnite916.zip" -DestinationPath "playnite"
35 |
36 | - name: Package release
37 | run: |
38 | mkdir release
39 | playnite\toolbox.exe pack "bin\release" "release"
40 | $contents = Get-ChildItem -Path "release" -Force -Recurse -File | Select-Object -First 1
41 | echo "PEXTFILE=$contents" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
42 |
43 | - name: Upload Release Asset
44 | id: upload-release-asset
45 | uses: actions/upload-release-asset@v1
46 | env:
47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
48 | with:
49 | upload_url: ${{ github.event.release.upload_url }}
50 | asset_path: ${{ env.PEXTFILE }}
51 | asset_name: PlayniteSounds-${{ env.VERSION }}.pext
52 | asset_content_type: application/zip
53 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Ll]og/
33 | [Ll]ogs/
34 |
35 | # Visual Studio 2015/2017 cache/options directory
36 | .vs/
37 | # Uncomment if you have tasks that create the project's static files in wwwroot
38 | #wwwroot/
39 |
40 | # Visual Studio 2017 auto generated files
41 | Generated\ Files/
42 |
43 | # MSTest test Results
44 | [Tt]est[Rr]esult*/
45 | [Bb]uild[Ll]og.*
46 |
47 | # NUnit
48 | *.VisualState.xml
49 | TestResult.xml
50 | nunit-*.xml
51 |
52 | # Build Results of an ATL Project
53 | [Dd]ebugPS/
54 | [Rr]eleasePS/
55 | dlldata.c
56 |
57 | # Benchmark Results
58 | BenchmarkDotNet.Artifacts/
59 |
60 | # .NET Core
61 | project.lock.json
62 | project.fragment.lock.json
63 | artifacts/
64 |
65 | # ASP.NET Scaffolding
66 | ScaffoldingReadMe.txt
67 |
68 | # StyleCop
69 | StyleCopReport.xml
70 |
71 | # Files built by Visual Studio
72 | *_i.c
73 | *_p.c
74 | *_h.h
75 | *.ilk
76 | *.meta
77 | *.obj
78 | *.iobj
79 | *.pch
80 | *.pdb
81 | *.ipdb
82 | *.pgc
83 | *.pgd
84 | *.rsp
85 | *.sbr
86 | *.tlb
87 | *.tli
88 | *.tlh
89 | *.tmp
90 | *.tmp_proj
91 | *_wpftmp.csproj
92 | *.log
93 | *.vspscc
94 | *.vssscc
95 | .builds
96 | *.pidb
97 | *.svclog
98 | *.scc
99 |
100 | # Chutzpah Test files
101 | _Chutzpah*
102 |
103 | # Visual C++ cache files
104 | ipch/
105 | *.aps
106 | *.ncb
107 | *.opendb
108 | *.opensdf
109 | *.sdf
110 | *.cachefile
111 | *.VC.db
112 | *.VC.VC.opendb
113 |
114 | # Visual Studio profiler
115 | *.psess
116 | *.vsp
117 | *.vspx
118 | *.sap
119 |
120 | # Visual Studio Trace Files
121 | *.e2e
122 |
123 | # TFS 2012 Local Workspace
124 | $tf/
125 |
126 | # Guidance Automation Toolkit
127 | *.gpState
128 |
129 | # ReSharper is a .NET coding add-in
130 | _ReSharper*/
131 | *.[Rr]e[Ss]harper
132 | *.DotSettings.user
133 |
134 | # TeamCity is a build add-in
135 | _TeamCity*
136 |
137 | # DotCover is a Code Coverage Tool
138 | *.dotCover
139 |
140 | # AxoCover is a Code Coverage Tool
141 | .axoCover/*
142 | !.axoCover/settings.json
143 |
144 | # Coverlet is a free, cross platform Code Coverage Tool
145 | coverage*.json
146 | coverage*.xml
147 | coverage*.info
148 |
149 | # Visual Studio code coverage results
150 | *.coverage
151 | *.coveragexml
152 |
153 | # NCrunch
154 | _NCrunch_*
155 | .*crunch*.local.xml
156 | nCrunchTemp_*
157 |
158 | # MightyMoose
159 | *.mm.*
160 | AutoTest.Net/
161 |
162 | # Web workbench (sass)
163 | .sass-cache/
164 |
165 | # Installshield output folder
166 | [Ee]xpress/
167 |
168 | # DocProject is a documentation generator add-in
169 | DocProject/buildhelp/
170 | DocProject/Help/*.HxT
171 | DocProject/Help/*.HxC
172 | DocProject/Help/*.hhc
173 | DocProject/Help/*.hhk
174 | DocProject/Help/*.hhp
175 | DocProject/Help/Html2
176 | DocProject/Help/html
177 |
178 | # Click-Once directory
179 | publish/
180 |
181 | # Publish Web Output
182 | *.[Pp]ublish.xml
183 | *.azurePubxml
184 | # Note: Comment the next line if you want to checkin your web deploy settings,
185 | # but database connection strings (with potential passwords) will be unencrypted
186 | *.pubxml
187 | *.publishproj
188 |
189 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
190 | # checkin your Azure Web App publish settings, but sensitive information contained
191 | # in these scripts will be unencrypted
192 | PublishScripts/
193 |
194 | # NuGet Packages
195 | *.nupkg
196 | # NuGet Symbol Packages
197 | *.snupkg
198 | # The packages folder can be ignored because of Package Restore
199 | **/[Pp]ackages/*
200 | # except build/, which is used as an MSBuild target.
201 | !**/[Pp]ackages/build/
202 | # Uncomment if necessary however generally it will be regenerated when needed
203 | #!**/[Pp]ackages/repositories.config
204 | # NuGet v3's project.json files produces more ignorable files
205 | *.nuget.props
206 | *.nuget.targets
207 |
208 | # Microsoft Azure Build Output
209 | csx/
210 | *.build.csdef
211 |
212 | # Microsoft Azure Emulator
213 | ecf/
214 | rcf/
215 |
216 | # Windows Store app package directories and files
217 | AppPackages/
218 | BundleArtifacts/
219 | Package.StoreAssociation.xml
220 | _pkginfo.txt
221 | *.appx
222 | *.appxbundle
223 | *.appxupload
224 |
225 | # Visual Studio cache files
226 | # files ending in .cache can be ignored
227 | *.[Cc]ache
228 | # but keep track of directories ending in .cache
229 | !?*.[Cc]ache/
230 |
231 | # Others
232 | ClientBin/
233 | ~$*
234 | *~
235 | *.dbmdl
236 | *.dbproj.schemaview
237 | *.jfm
238 | *.pfx
239 | *.publishsettings
240 | orleans.codegen.cs
241 |
242 | # Including strong name files can present a security risk
243 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
244 | #*.snk
245 |
246 | # Since there are multiple workflows, uncomment next line to ignore bower_components
247 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
248 | #bower_components/
249 |
250 | # RIA/Silverlight projects
251 | Generated_Code/
252 |
253 | # Backup & report files from converting an old project file
254 | # to a newer Visual Studio version. Backup files are not needed,
255 | # because we have git ;-)
256 | _UpgradeReport_Files/
257 | Backup*/
258 | UpgradeLog*.XML
259 | UpgradeLog*.htm
260 | ServiceFabricBackup/
261 | *.rptproj.bak
262 |
263 | # SQL Server files
264 | *.mdf
265 | *.ldf
266 | *.ndf
267 |
268 | # Business Intelligence projects
269 | *.rdl.data
270 | *.bim.layout
271 | *.bim_*.settings
272 | *.rptproj.rsuser
273 | *- [Bb]ackup.rdl
274 | *- [Bb]ackup ([0-9]).rdl
275 | *- [Bb]ackup ([0-9][0-9]).rdl
276 |
277 | # Microsoft Fakes
278 | FakesAssemblies/
279 |
280 | # GhostDoc plugin setting file
281 | *.GhostDoc.xml
282 |
283 | # Node.js Tools for Visual Studio
284 | .ntvs_analysis.dat
285 | node_modules/
286 |
287 | # Visual Studio 6 build log
288 | *.plg
289 |
290 | # Visual Studio 6 workspace options file
291 | *.opt
292 |
293 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
294 | *.vbw
295 |
296 | # Visual Studio LightSwitch build output
297 | **/*.HTMLClient/GeneratedArtifacts
298 | **/*.DesktopClient/GeneratedArtifacts
299 | **/*.DesktopClient/ModelManifest.xml
300 | **/*.Server/GeneratedArtifacts
301 | **/*.Server/ModelManifest.xml
302 | _Pvt_Extensions
303 |
304 | # Paket dependency manager
305 | .paket/paket.exe
306 | paket-files/
307 |
308 | # FAKE - F# Make
309 | .fake/
310 |
311 | # CodeRush personal settings
312 | .cr/personal
313 |
314 | # Python Tools for Visual Studio (PTVS)
315 | __pycache__/
316 | *.pyc
317 |
318 | # Cake - Uncomment if you are using it
319 | # tools/**
320 | # !tools/packages.config
321 |
322 | # Tabs Studio
323 | *.tss
324 |
325 | # Telerik's JustMock configuration file
326 | *.jmconfig
327 |
328 | # BizTalk build output
329 | *.btp.cs
330 | *.btm.cs
331 | *.odx.cs
332 | *.xsd.cs
333 |
334 | # OpenCover UI analysis results
335 | OpenCover/
336 |
337 | # Azure Stream Analytics local run output
338 | ASALocalRun/
339 |
340 | # MSBuild Binary and Structured Log
341 | *.binlog
342 |
343 | # NVidia Nsight GPU debugger configuration file
344 | *.nvuser
345 |
346 | # MFractors (Xamarin productivity tool) working folder
347 | .mfractor/
348 |
349 | # Local History for Visual Studio
350 | .localhistory/
351 |
352 | # BeatPulse healthcheck temp database
353 | healthchecksdb
354 |
355 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
356 | MigrationBackup/
357 |
358 | # Ionide (cross platform F# VS Code tools) working folder
359 | .ionide/
360 |
361 | # Fody - auto-generated XML schema
362 | FodyWeavers.xsd
363 | /playnite
364 |
--------------------------------------------------------------------------------
/App.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Common/Constants/App.cs:
--------------------------------------------------------------------------------
1 | namespace PlayniteSounds.Common.Constants
2 | {
3 | public static class App
4 | {
5 | public const string AppName = "Playnite Sounds";
6 | public const string MainMenuName = "@" + AppName;
7 | public const string ExtraMetaGuid = "705fdbca-e1fc-4004-b839-1d040b8b4429";
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Common/Constants/Directory.cs:
--------------------------------------------------------------------------------
1 | namespace PlayniteSounds.Common.Constants
2 | {
3 | public static class SoundDirectory
4 | {
5 | public const string NoPlatform = "No Platform";
6 | public const string Music = "Music Files";
7 | public const string Game = "Game";
8 | public const string Platform = "Platform";
9 | public const string Filter = "Filter";
10 | public const string Default = "Default";
11 | public const string Sound = "Sound Files";
12 | public const string SoundManager = "Sound Manager";
13 | public const string Localization = "Localization";
14 | public const string Orphans = "Orphans";
15 | public const string ExtraMetaData = "ExtraMetadata";
16 | public const string GamesFolder = "Games";
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Common/Constants/SoundFile.cs:
--------------------------------------------------------------------------------
1 | using Playnite.SDK;
2 |
3 | namespace PlayniteSounds.Common.Constants
4 | {
5 | public class SoundFile
6 | {
7 | public static IPlayniteInfoAPI ApplicationInfo { get; set; }
8 |
9 |
10 | public const string DefaultMusicName = "_music_.mp3";
11 | public const string LocalizationSource = "LocSource";
12 | public const string DefaultNormArgs = "-lrt 20 -c:a libmp3lame";
13 |
14 | public static string ApplicationStartedSound => CurrentPrefix + BaseApplicationStartedSound;
15 | public static string ApplicationStoppedSound => CurrentPrefix + BaseApplicationStoppedSound;
16 | public static string GameInstalledSound => CurrentPrefix + BaseGameInstalledSound;
17 | public static string GameSelectedSound => CurrentPrefix + BaseGameSelectedSound;
18 | public static string GameStartedSound => CurrentPrefix + BaseGameStartedSound;
19 | public static string GameStartingSound => CurrentPrefix + BaseGameStartingSound;
20 | public static string GameStoppedSound => CurrentPrefix + BaseGameStoppedSound;
21 | public static string GameUninstalledSound => CurrentPrefix + BaseGameUninstalledSound;
22 | public static string LibraryUpdatedSound => CurrentPrefix + BaseLibraryUpdatedSound;
23 |
24 | //TODO: Move bool logic to some common location
25 | public static string CurrentPrefix => ApplicationInfo.Mode == ApplicationMode.Desktop ? DesktopPrefix : FullScreenPrefix;
26 | public const string DesktopPrefix = "D_";
27 | public const string FullScreenPrefix = "F_";
28 |
29 | public const string BaseApplicationStartedSound = "ApplicationStarted.wav";
30 | public const string BaseApplicationStoppedSound = "ApplicationStopped.wav";
31 | public const string BaseGameInstalledSound = "GameInstalled.wav";
32 | public const string BaseGameSelectedSound = "GameSelected.wav";
33 | public const string BaseGameStartedSound = "GameStarted.wav";
34 | public const string BaseGameStartingSound = "GameStarting.wav";
35 | public const string BaseGameStoppedSound = "GameStopped.wav";
36 | public const string BaseGameUninstalledSound = "GameUninstalled.wav";
37 | public const string BaseLibraryUpdatedSound = "LibraryUpdated.wav";
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Common/EnumConverter.cs:
--------------------------------------------------------------------------------
1 | using PlayniteSounds.Models;
2 | using System;
3 | using System.Globalization;
4 | using System.Windows.Data;
5 | using System.Windows.Markup;
6 |
7 | //TODO: Properly investigate way to make generic EnumConverter work with wpf/xaml
8 | // Possible solution may involve factory: https://stackoverflow.com/questions/8235421/how-do-i-set-wpf-xaml-forms-design-datacontext-to-class-that-uses-generic-type/8235459#8235459
9 | namespace PlayniteSounds.Common
10 | {
11 | public class MusicTypeConverter : BaseValueConverter
12 | {
13 | public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) => (int)value;
14 |
15 | public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => (MusicType)value;
16 | }
17 |
18 | public class AudioStateConverter : BaseValueConverter
19 | {
20 | public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) => (int)value;
21 |
22 | public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => (AudioState)value;
23 | }
24 |
25 | public abstract class BaseValueConverter : MarkupExtension, IValueConverter where T : class, new()
26 | {
27 | private static T _converter;
28 |
29 | public override object ProvideValue(IServiceProvider serviceProvider) => _converter ?? (_converter = new T());
30 |
31 | public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
32 |
33 | public abstract object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);
34 | }
35 | }
--------------------------------------------------------------------------------
/Common/Extensions/List.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Linq;
3 |
4 | namespace PlayniteSounds.Common.Extensions
5 | {
6 | public static class List
7 | {
8 | public static TItem Pop(this IList list)
9 | {
10 | var item = list.LastOrDefault();
11 |
12 | if (list.Count > 0)
13 | {
14 | list.RemoveAt(list.Count - 1);
15 | }
16 |
17 | return item;
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Common/StringUtilities.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Text.RegularExpressions;
6 | using PlayniteSounds.Common.Extensions;
7 |
8 | namespace PlayniteSounds.Common
9 | {
10 | internal class StringUtilities
11 | {
12 | private static readonly string[] StringsToRemove = { "-", ":"};
13 | private static readonly IDictionary StringsToReplace = new Dictionary { { " & ", @" (&|and) " } };
14 | private static readonly IDictionary ReplaceExtraWhitespace = new Dictionary { { " ", " " } };
15 | private static readonly string InvalidCharacters = new string(Path.GetInvalidFileNameChars());
16 | private static readonly Regex InvalidCharsRegex = new Regex($"[{Regex.Escape(InvalidCharacters)}]");
17 |
18 | public static string StripStrings(string stringToStrip, string[] stringsToRemove = null)
19 | {
20 | stringsToRemove = stringsToRemove ?? StringsToRemove;
21 | stringToStrip = stringsToRemove.Aggregate(stringToStrip, (current, str) => current.Replace(str, ""));
22 | return ReplaceStrings(stringToStrip, ReplaceExtraWhitespace);
23 | }
24 |
25 | public static string ReplaceStrings(string stringToSub, IDictionary stringsToReplace = null)
26 | {
27 | stringsToReplace = stringsToReplace ?? StringsToReplace;
28 | return stringsToReplace.Aggregate(stringToSub, (current, stringToReplace)
29 | => current.Replace(stringToReplace.Key, stringToReplace.Value));
30 | }
31 |
32 | public static string SanitizeGameName(string gameName) => InvalidCharsRegex.Replace(gameName, string.Empty);
33 |
34 | public static TimeSpan? GetTimeSpan(string time)
35 | {
36 | if (string.IsNullOrEmpty(time)) return null;
37 |
38 | var times = time.Split(':').ToList();
39 |
40 | var seconds = PopToInt(times);
41 | var minutes = PopToInt(times);
42 | var hours = PopToInt(times);
43 |
44 | return new TimeSpan(hours, minutes, seconds);
45 | }
46 |
47 | private static int PopToInt(IList strings)
48 | {
49 | var str = strings.Pop();
50 | return string.IsNullOrWhiteSpace(str) ? 0 : int.Parse(str);
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Contributors.md:
--------------------------------------------------------------------------------
1 | | **NAME** | **USERNAME** | **STATUS** |
2 | | --- | --- | --- |
3 | | Willems Davy | @joyrider3774 | Active |
4 | | Cameron Napolitano | @cnapolit | Active |
5 | | Daniel Firsht | @dfirsht | - |
6 | | - | Lacro59 | - |
7 |
--------------------------------------------------------------------------------
/Downloaders/DownloadManager.cs:
--------------------------------------------------------------------------------
1 | using HtmlAgilityPack;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Net.Http;
5 | using System.Text.RegularExpressions;
6 | using System;
7 | using PlayniteSounds.Models;
8 |
9 | namespace PlayniteSounds.Downloaders
10 | {
11 | internal class DownloadManager : IDownloadManager
12 | {
13 | private static readonly TimeSpan MaxTime = new TimeSpan(0, 8, 0);
14 | private static readonly HtmlWeb Web = new HtmlWeb();
15 | private static readonly HttpClient HttpClient = new HttpClient();
16 |
17 | private static readonly List SongTitleEnds = new List { "Theme", "Title", "Menu" };
18 |
19 | private readonly PlayniteSoundsSettings _settings;
20 |
21 | private readonly IDownloader _khDownloader;
22 | private readonly IDownloader _ytDownloader;
23 |
24 | public DownloadManager(PlayniteSoundsSettings settings)
25 | {
26 | _settings = settings;
27 | _khDownloader = new KhDownloader(HttpClient, Web);
28 | _ytDownloader = new YtDownloader(HttpClient, _settings);
29 | }
30 |
31 | public IEnumerable GetAlbumsForGame(string gameName, Source source, bool auto = false)
32 | {
33 | if ((source is Source.All || source is Source.Youtube) && string.IsNullOrWhiteSpace(_settings.FFmpegPath))
34 | {
35 | throw new Exception("Cannot download from Youtube without the FFmpeg Path specified in settings.");
36 | }
37 |
38 | if (source is Source.All)
39 | return (_settings.AutoParallelDownload && auto) || (_settings.ManualParallelDownload && !auto)
40 | ? _settings.Downloaders.SelectMany(d => GetAlbumFromSource(gameName, d, auto))
41 | : _settings.Downloaders.Select(d => GetAlbumFromSource(gameName, d, auto)).FirstOrDefault(dl => dl.Any());
42 |
43 | return SourceToDownloader(source).GetAlbumsForGame(gameName, auto);
44 | }
45 |
46 | public IEnumerable GetSongsFromAlbum(Album album)
47 | => SourceToDownloader(album.Source).GetSongsFromAlbum(album);
48 |
49 | public bool DownloadSong(Song song, string path)
50 | => SourceToDownloader(song.Source).DownloadSong(song, path);
51 |
52 | public Album BestAlbumPick(IEnumerable albums, string gameName, string regexGameName)
53 | {
54 | var albumsList = albums.ToList();
55 |
56 | if (albumsList.Count is 1)
57 | {
58 | return albumsList.First();
59 | }
60 |
61 | var ostRegex = new Regex($@"{regexGameName}.*(Soundtrack|OST|Score)", RegexOptions.IgnoreCase);
62 | var ostMatch = albumsList.FirstOrDefault(a => ostRegex.IsMatch(a.Name));
63 | if (ostMatch != null)
64 | {
65 | return ostMatch;
66 | }
67 |
68 | var exactMatch = albumsList.FirstOrDefault(a => string.Equals(a.Name, gameName, StringComparison.OrdinalIgnoreCase));
69 | if (exactMatch != null)
70 | {
71 | return exactMatch;
72 | }
73 |
74 | var closeMatch = albumsList.FirstOrDefault(a => a.Name.StartsWith(gameName, StringComparison.OrdinalIgnoreCase));
75 | return closeMatch ?? albumsList.FirstOrDefault();
76 | }
77 |
78 | public Song BestSongPick(IEnumerable songs, string regexGameName)
79 | {
80 | var songsList = songs.Where(s => !s.Length.HasValue || s.Length.Value < MaxTime).ToList();
81 |
82 | if (songsList.Count is 1)
83 | {
84 | return songsList.First();
85 | }
86 |
87 | var titleMatch = songsList.FirstOrDefault(s => SongTitleEnds.Any(e => s.Name.EndsWith(e)));
88 | if (titleMatch != null)
89 | {
90 | return titleMatch;
91 | }
92 |
93 | var nameRegex = new Regex(regexGameName, RegexOptions.IgnoreCase);
94 | var gameNameMatch = songsList.FirstOrDefault(s => nameRegex.IsMatch(s.Name));
95 | return gameNameMatch ?? songsList.FirstOrDefault();
96 | }
97 |
98 | private IDownloader SourceToDownloader(Source source)
99 | {
100 | switch (source)
101 | {
102 | case Source.KHInsider: return _khDownloader;
103 | case Source.Youtube: return _ytDownloader;
104 | default: throw new ArgumentException($"Unrecognized download source: {source}");
105 | }
106 | }
107 |
108 | private IEnumerable GetAlbumFromSource(string gameName, Source source, bool auto)
109 | => SourceToDownloader(source).GetAlbumsForGame(gameName, auto);
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/Downloaders/IDownloadManager.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using PlayniteSounds.Models;
3 |
4 | namespace PlayniteSounds.Downloaders
5 | {
6 | internal interface IDownloadManager
7 | {
8 | Album BestAlbumPick(IEnumerable albums, string gameName, string regexGameName);
9 | Song BestSongPick(IEnumerable songs, string regexGameName);
10 | IEnumerable GetAlbumsForGame(string gameName, Source source, bool auto = false);
11 | IEnumerable GetSongsFromAlbum(Album album);
12 | bool DownloadSong(Song song, string path);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Downloaders/IDownloader.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using PlayniteSounds.Models;
3 |
4 | namespace PlayniteSounds.Downloaders
5 | {
6 | internal interface IDownloader
7 | {
8 | string BaseUrl();
9 | Source DownloadSource();
10 | IEnumerable GetAlbumsForGame(string gameName, bool auto = false);
11 | IEnumerable GetSongsFromAlbum(Album album);
12 | bool DownloadSong(Song song, string path);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Downloaders/KHDownloader.cs:
--------------------------------------------------------------------------------
1 | using Playnite.SDK;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Net.Http;
6 | using HtmlAgilityPack;
7 | using PlayniteSounds.Common;
8 | using PlayniteSounds.Models;
9 |
10 | namespace PlayniteSounds.Downloaders
11 | {
12 | internal class KhDownloader : IDownloader
13 | {
14 | private static readonly ILogger Logger = LogManager.GetLogger();
15 |
16 | private readonly HttpClient _httpClient;
17 | private readonly HtmlWeb _web;
18 |
19 | private const string KhInsiderBaseUrl = @"https://downloads.khinsider.com/";
20 | public string BaseUrl() => KhInsiderBaseUrl;
21 |
22 | private const Source Source = Models.Source.KHInsider;
23 | public Source DownloadSource() => Source;
24 |
25 | public KhDownloader(HttpClient httpClient, HtmlWeb web)
26 | {
27 | _httpClient = httpClient;
28 | _web = web;
29 | }
30 |
31 | public IEnumerable GetAlbumsForGame(string gameName, bool auto = false)
32 | {
33 |
34 | var albumsToPartialUrls = new List();
35 |
36 | var htmlDoc = _web.Load($"{KhInsiderBaseUrl}search?search={gameName}");
37 |
38 | var tableRows = htmlDoc.DocumentNode.Descendants("tr").Skip(1);
39 | foreach (var row in tableRows)
40 | {
41 | var columnEntries = row.Descendants("td").ToList();
42 |
43 | var iconUrl = string.Empty;
44 | var iconField = columnEntries.FirstOrDefault();
45 | if (iconField != null)
46 | {
47 | var img = iconField.Descendants("img").FirstOrDefault();
48 | if (img != null)
49 | {
50 | iconUrl = img.GetAttributeValue("src", string.Empty);
51 | }
52 | }
53 |
54 | var titleField = columnEntries.ElementAtOrDefault(1);
55 | if (titleField == null)
56 | {
57 | Logger.Info($"Found album entry of game '{gameName}' without title field");
58 | continue;
59 | }
60 |
61 | var htmlLink = titleField.Descendants("a").FirstOrDefault();
62 | if (htmlLink == null)
63 | {
64 | Logger.Info($"Found entry for album entry of game '{gameName}' without title");
65 | continue;
66 | }
67 |
68 | var albumName = htmlLink.InnerHtml;
69 | var albumPartialLink = htmlLink.GetAttributeValue("href", null);
70 | if (albumPartialLink == null)
71 | {
72 | Logger.Info($"Found entry for album '{albumName}' of game '{gameName}' without link in title");
73 | continue;
74 | }
75 |
76 | var album = new Album
77 | {
78 | Name = StringUtilities.StripStrings(albumName),
79 | Id = albumPartialLink,
80 | Source = Source.KHInsider,
81 | IconUrl = iconUrl
82 | };
83 |
84 | var platformEntry = columnEntries.ElementAtOrDefault(1);
85 | if (platformEntry != null)
86 | {
87 | var platforms = platformEntry.Descendants("a")
88 | .Select(d => d.InnerHtml)
89 | .Where(platform => !string.IsNullOrWhiteSpace(platform)).ToList();
90 |
91 | if (platforms.Any())
92 | {
93 | album.Platforms = platforms;
94 | }
95 | }
96 |
97 | albumsToPartialUrls.Add(album);
98 | }
99 |
100 | return albumsToPartialUrls;
101 | }
102 |
103 | public IEnumerable GetSongsFromAlbum(Album album)
104 | {
105 | var songs = new List();
106 |
107 | var htmlDoc = _web.Load($"{KhInsiderBaseUrl}{album.Id}");
108 |
109 | // Validate Html
110 | var headerRow = htmlDoc.GetElementbyId("songlist_header");
111 | var headers = headerRow.Descendants("th").Select(n => n.InnerHtml);
112 | if (headers.All(h => !h.Contains("MP3")))
113 | {
114 | Logger.Info($"No mp3 in album '{album.Name}'");
115 | return songs;
116 | }
117 |
118 | var table = htmlDoc.GetElementbyId("songlist");
119 |
120 | // Get table and skip header
121 | var tableRows = table.Descendants("tr").Skip(1).ToList();
122 | if (tableRows.Count < 2)
123 | {
124 | Logger.Info($"No songs in album '{album.Name}'");
125 | return songs;
126 | }
127 |
128 | // Remove footer
129 | tableRows.RemoveAt(tableRows.Count - 1);
130 |
131 | foreach (var row in tableRows)
132 | {
133 | var rowEntries = row.Descendants("a").ToList();
134 |
135 | var songNameEntry = rowEntries.FirstOrDefault();
136 | if (songNameEntry == null)
137 | {
138 | continue;
139 | }
140 |
141 | var partialUrl = songNameEntry.GetAttributeValue("href", null);
142 | if (string.IsNullOrWhiteSpace(partialUrl))
143 | {
144 | continue;
145 | }
146 |
147 | var song = new Song
148 | {
149 | Name = StringUtilities.StripStrings(songNameEntry.InnerHtml),
150 | Id = partialUrl,
151 | Source = Source.KHInsider
152 | };
153 |
154 | var lengthEntry = rowEntries.ElementAtOrDefault(1);
155 | if (lengthEntry != null && !string.IsNullOrWhiteSpace(lengthEntry.InnerHtml))
156 | {
157 | song.Length = StringUtilities.GetTimeSpan(lengthEntry.InnerHtml);
158 | }
159 |
160 | var sizeEntry = rowEntries.ElementAtOrDefault(2);
161 | if (sizeEntry != null && !string.IsNullOrWhiteSpace(sizeEntry.InnerHtml))
162 | {
163 | song.SizeInMb = sizeEntry.InnerHtml;
164 | }
165 |
166 | songs.Add(song);
167 | }
168 |
169 | return songs;
170 | }
171 |
172 | public bool DownloadSong(Song song, string path)
173 | {
174 | // Get Url to file from Song html page
175 | var htmlDoc = _web.Load($"{KhInsiderBaseUrl}{song.Id}");
176 |
177 | var fileUrl = htmlDoc.GetElementbyId("audio").GetAttributeValue("src", null);
178 | if (fileUrl == null)
179 | {
180 | Logger.Info($"Did not find file url for song '{song.Name}'");
181 | return false;
182 | }
183 |
184 | var httpMessage = _httpClient.GetAsync(fileUrl).Result;
185 | using (var fs = File.Create(path))
186 | {
187 | httpMessage.Content.CopyToAsync(fs).Wait();
188 | }
189 |
190 | return true;
191 | }
192 | }
193 | }
194 |
--------------------------------------------------------------------------------
/Downloaders/YtDownloader.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Net.Http;
5 | using System.Threading.Tasks;
6 | using Playnite.SDK;
7 | using PlayniteSounds.Models;
8 | using YoutubeExplode;
9 | using YoutubeExplode.Common;
10 | using YoutubeExplode.Converter;
11 | using YoutubeExplode.Search;
12 |
13 | namespace PlayniteSounds.Downloaders
14 | {
15 | internal class YtDownloader : IDownloader
16 | {
17 | private static readonly ILogger Logger = LogManager.GetLogger();
18 |
19 | private readonly YoutubeClient _youtubeClient;
20 | private readonly PlayniteSoundsSettings _settings;
21 |
22 | public YtDownloader(HttpClient httpClient, PlayniteSoundsSettings settings)
23 | {
24 | _youtubeClient = new YoutubeClient(httpClient);
25 | _settings = settings;
26 | }
27 |
28 | private const string BaseYtUrl = "https://www.youtube.com";
29 | public string BaseUrl() => BaseYtUrl;
30 |
31 | private const Source DlSource = Source.Youtube;
32 | public Source DownloadSource() => DlSource;
33 |
34 | public IEnumerable GetAlbumsForGame(string gameName, bool auto = false)
35 | => GetAlbumsFromExplodeApiAsync(gameName, auto).Result;
36 |
37 | public IEnumerable GetSongsFromAlbum(Album album)
38 | => album.Songs ?? GetSongsFromExplodeApiAsync(album).ToEnumerable();
39 |
40 | public bool DownloadSong(Song song, string path) => DownloadSongExplodeAsync(song, path).Result;
41 |
42 | private async Task> GetAlbumsFromExplodeApiAsync(string gameName, bool auto)
43 | {
44 | if (auto)
45 | {
46 | gameName += " Soundtrack";
47 | }
48 |
49 | var albums = new List();
50 | var videos = new List();
51 |
52 | var videoResults = _youtubeClient.Search.GetResultBatchesAsync(gameName, SearchFilter.Video);
53 | var videoEnumerator = videoResults.GetAsyncEnumerator();
54 |
55 | for (var i = 0; i < 1 && await videoEnumerator.MoveNextAsync(); i++)
56 | {
57 | var batchOfVideos =
58 | from VideoSearchResult videoSearchResult in videoEnumerator.Current.Items
59 | select new Song
60 | {
61 | Name = videoSearchResult.Title,
62 | Id = videoSearchResult.Id,
63 | Length = videoSearchResult.Duration,
64 | Source = DlSource,
65 | IconUrl = videoSearchResult.Thumbnails.FirstOrDefault()?.Url
66 | };
67 |
68 | videos.AddRange(batchOfVideos);
69 |
70 | await videoEnumerator.MoveNextAsync();
71 | }
72 |
73 | if (videos.Any()) albums.Add(new Album
74 | {
75 | Name = Common.Constants.Resource.YoutubeSearch,
76 | Songs = videos,
77 | Source = DlSource
78 | });
79 |
80 | if (_settings.YtPlaylists)
81 | {
82 | var playlistResults = _youtubeClient.Search.GetResultBatchesAsync(gameName, SearchFilter.Playlist);
83 |
84 | var playlistEnumerator = playlistResults.GetAsyncEnumerator();
85 | for (var i = 0; i < 1 && await playlistEnumerator.MoveNextAsync(); i++)
86 | {
87 | var batchOfPlaylists =
88 | from PlaylistSearchResult playlistSearchResult in playlistEnumerator.Current.Items
89 | select new Album
90 | {
91 | Name = playlistSearchResult.Title,
92 | Id = playlistSearchResult.Id,
93 | Source = DlSource,
94 | IconUrl = playlistSearchResult.Thumbnails.FirstOrDefault()?.Url
95 | };
96 |
97 | albums.AddRange(batchOfPlaylists);
98 | }
99 | }
100 |
101 | return albums;
102 | }
103 |
104 | private IAsyncEnumerable GetSongsFromExplodeApiAsync(Album album)
105 | => _youtubeClient.Playlists.GetVideosAsync(album.Id).Select(video => new Song
106 | {
107 | Name = video.Title,
108 | Id = video.Id,
109 | Length = video.Duration,
110 | Source = DlSource,
111 | IconUrl= video.Thumbnails.FirstOrDefault()?.Url
112 | });
113 |
114 | private async Task DownloadSongExplodeAsync(Song song, string path)
115 | {
116 | try
117 | {
118 | await _youtubeClient.Videos.DownloadAsync(song.Id, path, o => o.SetFFmpegPath(_settings.FFmpegPath));
119 | return true;
120 | }
121 | catch (Exception e)
122 | {
123 | Logger.Error(e, $"Something went wrong when attempting to download from Youtube with Id '{song.Id}' and Path '{path}'");
124 | return false;
125 | }
126 | }
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Joyrider3774
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Localization.cs:
--------------------------------------------------------------------------------
1 | using Playnite.SDK;
2 | using System;
3 | using System.IO;
4 | using System.Windows;
5 | using System.Windows.Markup;
6 | using PlayniteSounds.Common.Constants;
7 |
8 | namespace PlayniteSounds
9 |
10 | {
11 |
12 | //based on code from lacro59 from
13 | //https://github.com/Lacro59/playnite-plugincommon/blob/master/Localization.cs
14 | //
15 | public class Localization
16 | {
17 | private static readonly ILogger Logger = LogManager.GetLogger();
18 |
19 | public static void SetPluginLanguage(string pluginFolder, string language = SoundFile.LocalizationSource)
20 | {
21 | var dictionaries = Application.Current.Resources.MergedDictionaries;
22 | var langFile = Path.Combine(pluginFolder, SoundDirectory.Localization, language + ".xaml");
23 |
24 | // Load localization
25 | if (File.Exists(langFile))
26 | {
27 | ResourceDictionary res;
28 | try
29 | {
30 | using (var stream = new StreamReader(langFile))
31 | {
32 | res = (ResourceDictionary)XamlReader.Load(stream.BaseStream);
33 | res.Source = new Uri(langFile, UriKind.Absolute);
34 | }
35 |
36 | foreach (var key in res.Keys)
37 | {
38 | if (res[key] is string locString && string.IsNullOrEmpty(locString))
39 | {
40 | res.Remove(key);
41 | }
42 | }
43 | }
44 | catch (Exception ex)
45 | {
46 | Logger.Error(ex, $"Failed to parse localization file {langFile}.");
47 | return;
48 | }
49 |
50 | dictionaries.Add(res);
51 | }
52 | else
53 | {
54 | Logger.Warn($"File {langFile} not found.");
55 | }
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Localization/af_ZA.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/ar_SA.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | تشغيل الصوت حيث:
8 | تشغيل الصوت حيث:
9 | نوع الموسيقى:
10 |
11 | موسيقى واحدة لجميع الألعاب والمنصات
12 | موسيقى واحدة لكل منصة
13 | موسيقى واحدة لكل منصة ولعبة
14 | تخطي أول 'اختيار صوت' بعد بدء تشغيل Playnite
15 | إيقاف الموسيقى مؤقتاً عند تعطيل أو تصغير نافذة Playnite
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | ابدأ
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | إعدادات
46 | اجراءات
47 | إعادة تحميل ملفات الصوت
48 | فتح مجلد الأصوات
49 | فتح مجلد الموسيقى
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | مساعدة
53 | إظهار اسم ملف الموسيقى
54 | تحديد ملف الموسيقى
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | تم إعادة تحميل الملفات الصوتية!
66 | الرجاء تحديد لعبة واحدة!
67 | Paths to files:
68 |
69 | أصوات Playnite هي إضافة لتشغيل الملفات الصوتية أثناء أحداث Playnite.
70 | يمكنها فقط تشغيل ملفات صوت WAV وملفات mp3 للموسيقى.
71 | هناك مجموعتان منفصلتان من ملفات الصوت. ملفات الصوت التي تبدأ بـ "D_" وملفات تبدأ بـ "F_".
72 | ملفات 'D_' هي ملفات صوتية لوضع Desktop، ملفات 'F_' لوضع Fullscreen.
73 | إذا كنت لا ترغب في سماع ملف معين يمكنك فقط حذف ملف الموجة للحدث الذي لا تريد سماعه. يمكنك تغيير الملفات مع الملفات الخاصة بك. تأكد من استخدام قائمة "فتح مجلد الملفات الصوتية" للقيام بذلك. سوف يجعل الملفات الصوتية المحملة مغلقة حتى تتمكن من الكتابة فوقها. تأكد من أن المشغل لا يقوم بتشغيل أي صوت بعد فتح المجلد أو أنه من الممكن أن لا يمكنك الكتابة فوق ذلك الملف المحدد. مع الاختبارات التي أجريها، يبدو أنك لا تزال تستطيع مسح الملفات أولاً. بعد تغيير الملفات الصوتية استخدم قائمة "إعادة تحميل ملفات الصوت" لمسح أي ملفات تم تحميلها واستخدام ملفاتك الجديدة، أو فقط إعادة تشغيل Playnite. لا تستخدم ملف صوتي طويل للتطبيق توقفت لأن Playnite لن يترك العمل حتى ينتهي تشغيل الملف الصوتي. وينطبق نفس الشيء على التبديل بين سطح المكتب ووضع ملء الشاشة.
74 | هذه هي الملفات الصوتية التي يمكن استخدامها
75 | ملفات الموسيقى يجب أن تكون ملفات mp3، اعتماداً على الإعدادات يجب أن تسمى "music_.mp3_" أو لديك اسم اللعبة مع حذف أحرف غير صالحة ووضعها في مجلد لكل منصة. إذا كنت غير متأكد تماما من اسم الملف والموقع يمكنك النقر بزر الماوس الأيمن على اللعبة واختيار خيار "إظهار اسم ملف الموسيقى". كن على علم ، يتم تغيير أسماء الملفات ومواقع ملفات الموسيقى اعتماداً على الإعدادات المختارة!
76 |
77 | مستوى الصوت:
78 |
79 | إدارة الصوت
80 | تحميل
81 | حفظ
82 | تم حفظ حزمة الصوت بنجاح:
83 | تم تحميل حزمة الصوت بنجاح:
84 | تم حذف حزمة الصوت بنجاح:
85 | إزالة
86 | استيراد
87 | فتح مجلد إدارة الصوت
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/ca_ES.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/da_DK.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/el_GR.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/eo_UY.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/et_EE.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/fa_IR.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/fi_FI.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/he_IL.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/hr_HR.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/id_ID.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/ja_JP.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/ko_KR.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | 음악 유형:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | 안 함
24 | 데스크톱
25 | 전체 화면
26 | 데스크톱 + 전체 화면
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | 설정
46 | 작업
47 | 음성 파일 새로고침
48 | 사운드 폴더 열기
49 | 음악 폴더 열기
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | 도움말
53 | 음악 파일 이름 보기
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | 음악 볼륨:
78 |
79 | 사운드 관리자
80 | 불러오기
81 | 저장
82 | 성공적으로 사운드 팩을 저장:
83 | 성공적으로 사운드 팩을 로드:
84 | 성공적으로 사운드 팩을 제거:
85 | 제거
86 | 가져오기
87 | 사운드 관리자 폴더 열기
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/lt_LT.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Play Sound where:
8 | Play Music where:
9 | Music Type:
10 |
11 | One music for all games and platforms
12 | One music per platform
13 | One music per platform and game
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | Never
24 | Desktop
25 | Fullscreen
26 | Desktop + Fullscreen
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | Settings
46 | Actions
47 | Reload Audio Files
48 | Open Sounds Folder
49 | Open Music Folder
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | Help
53 | Show Music Filename
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | Audio files reloaded!
66 | Please select a single game!
67 | Paths to files:
68 |
69 | Playnite Sounds is an extension to play audio files during Playnite events.
70 | It can only play WAV audio files, mp3 files for music and nothing else.
71 | There are 2 seperate set of sound files. Audio Files starting with 'D_' and files starting with 'F_'.
72 | The 'D_' files are the audio files for desktop mode, the 'F_' files for fullscreen mode.
73 | If you don't want to hear a certain file you can just delete the wav file of the event you don't want to hear. You can change the files with your own files. Be sure to use the 'Open Audio Files Folder' menu for doing so. It will make sure loaded audio files get closed so you can overwrite them. Make sure playnite does not play any audio anymore after opening the folder or it's possible you can't overwrite that specific file. With my testings it did seem you could still first erase the files. After changing the audio files use the 'Reload Audio Files' menu to clear any loaded files and use your new files, or just restart Playnite. Do NOT use a long audio file for ApplicationStopped as Playnite will not quit until that audio file has finished playing. The same applies for switching between desktop and fullscreen mode.
74 | These are the audio files that can be used
75 | Music files need to be mp3 files, depending on the settings be named "_music_.mp3" or have the name of the game with invalid characters removed and be placed in a folder per platform. If you are not exactly sure of the filename and location you can right click on a game and choose the "Show music filename" option. Be Aware, filenames and locations of music files change depending on the settings chosen!
76 |
77 | Music Volume:
78 |
79 | Sound Manager
80 | Load
81 | Save
82 | Successfully Saved Sound Pack:
83 | Successfully Loaded Sound Pack:
84 | Successfully Deleted Sound Pack:
85 | Remove
86 | Import
87 | Open Sound Manager Folder
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Localization/zh_CN.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 何处播放声音:
8 | 何处播放音乐:
9 | 音乐类型:
10 |
11 | 所有游戏和平台一个音乐
12 | 一个平台一个音乐
13 | 一个平台和游戏一种音乐
14 | Skip first 'select sound' after playnite startup
15 | Pause music when Playnite deactivates or minimizes
16 | Tag titles that fail to download
17 | Automatically download music for newly added games on library update
18 | Randomize music file on music end
19 | Randomize music file on every 'musictype' selection
20 | Play background music when no games are selected
21 | Stop music when
22 |
23 | 永不
24 | 桌面
25 | 全屏
26 | 桌面 + 全屏
27 |
28 | Game is starting
29 | Game has started
30 |
31 |
32 |
33 | [PS] Missing Background Music
34 | Download files
35 | Downloading files...
36 | Do you want to manually select albums?
37 | Do you want to manually select songs?
38 | Please select an album for game {0}
39 | Please select a song for album {0}
40 | Do you want to overwrite any existing files?
41 | Select option
42 | Done
43 | Automatically Downloading files...
44 |
45 | 设置
46 | 指令
47 | 重载音频文件
48 | 打开声音文件夹
49 | 打开音乐文件夹
50 | Open Selected Music Directories
51 | Delete Selected Music Directories
52 | 帮助
53 | 显示音乐文件名
54 | Select Music File
55 | Delete Music File
56 | Play Music File
57 | Songs
58 | Update Legacy Directory
59 | Platforms
60 | Default
61 | Are you sure you want to delete these directories? This action cannot be undone.
62 | Are you sure you want to delete {0}? This action cannot be undone
63 | While converting a legacy music directory, orphaned files were found. These files have been moved to: {0}. Would you like to view them?
64 |
65 | 已重载音频文件!
66 | 请选择一个游戏!
67 | Paths to files:
68 |
69 | Playnite Sounds 是一个在 Playnite 事件中播放音频文件的扩展。
70 | 它只能播放 WAV 音频文件、mp3 文件的音乐。
71 | 有两套独立的声音文件,分别以“D_”和“F_”开头。
72 | “D_”开头的文件适用于桌面模式,“F_”开头的文件适用于全屏模式。
73 | 若您不想听见某事件下某个特定的文件,将该文件删除即可。您可以用自己的文件替换这些文件。确保使用“打开音频文件目录”菜单来做这件事。它将确保已加载的音频文件关闭,使得您可以覆盖它们。在打开文件夹时,确保 Playnite 已经不在播放任何音频文件,否则您可能无法覆盖特定文件。我的测试显示,您似乎依然可以先清除这些文件。在更改音频文件后,使用“重载音频文件”菜单,以清理任何已加载文件并使用您的新文件,或者也可重开 Playnite。不要为 ApplicationStopped 使用长的音频文件,因为 Playnite 直到该文件停止播放时才会关闭。这同样适用于在桌面和全屏模式间切换。
74 | 这些是可以使用的音频文件
75 | 音乐文件须为 mp3 文件,且根据设置命名为“_music_.mp3”或删除了游戏名中无效字符的游戏名称,并放入对应平台的文件夹。如果您不确定文件名和位置,可以右键点击游戏并选择“显示音乐文件名”选项。注意,文件名和音乐文件的位置会根据所选择的设置而改变!
76 |
77 | 音乐音量:
78 |
79 | 声音管理器
80 | 载入
81 | 保存
82 | 已成功保存声音包:
83 | 已成功加载声音包:
84 | 已成功删除声音包:
85 | 移除
86 | 导入
87 | 打开声音管理器文件夹
88 |
89 |
90 |
--------------------------------------------------------------------------------
/Models/Album.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Linq;
3 | using System.Reflection;
4 |
5 | namespace PlayniteSounds.Models
6 | {
7 | internal class Album : DownloadItem
8 | {
9 | public string Type { get; set; }
10 | public string Url { get; set; }
11 | public string Artist { get; set; }
12 | public uint? Count { get; set; }
13 | public uint? Year { get; set; }
14 | public IEnumerable Platforms { get; set; }
15 | public IEnumerable Songs { get; set; }
16 | protected override IEnumerable Properties => typeof(Album).GetProperties();
17 |
18 | public override string ToString()
19 | {
20 | var baseString = base.ToString();
21 |
22 | if (Platforms != null)
23 | {
24 | var platformsValue = string.Join(",",
25 | Platforms.Where(platform => !string.IsNullOrWhiteSpace(platform)));
26 |
27 | if (!string.IsNullOrWhiteSpace(platformsValue))
28 | {
29 | baseString += $", {nameof(Platforms)}: {platformsValue}";
30 | }
31 | }
32 |
33 | return baseString;
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Models/AudioState.cs:
--------------------------------------------------------------------------------
1 | namespace PlayniteSounds.Models
2 | {
3 | public enum AudioState
4 | {
5 | Never,
6 | Desktop,
7 | Fullscreen,
8 | Always
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Models/DownloadItem.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Linq;
3 | using System.Reflection;
4 |
5 | namespace PlayniteSounds.Models
6 | {
7 | public abstract class DownloadItem
8 | {
9 | public string Name { get; set; }
10 | public string Id { get; set; }
11 | public string IconUrl { get; set; }
12 | public Source Source { get; set; }
13 |
14 |
15 | protected abstract IEnumerable Properties { get; }
16 |
17 | protected static readonly IEnumerable IgnoredFields = new[]
18 | {
19 | // Ignored Types
20 | "Name",
21 | "Url",
22 | "Songs",
23 | "IconUrl",
24 | // Needs Custom Handling
25 | "Id",
26 | "Platforms"
27 | };
28 |
29 | public override string ToString()
30 | {
31 | var strings =
32 | from property in Properties
33 | let propertyValue = property.GetValue(this)
34 | where IsValidField(property, propertyValue)
35 | select $"{property.Name}: {propertyValue}";
36 |
37 | return string.Join(", ", strings);
38 | }
39 |
40 | private static bool IsValidField(PropertyInfo property, object propertyValue)
41 | => propertyValue != null
42 | && !IgnoredFields.ContainsString(property.Name)
43 | && !(propertyValue is string propertyString && string.IsNullOrWhiteSpace(propertyString));
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Models/GenericObjectOption.cs:
--------------------------------------------------------------------------------
1 | using Playnite.SDK;
2 |
3 | namespace PlayniteSounds.Models
4 | {
5 | internal class GenericObjectOption : GenericItemOption
6 | {
7 | public Source Source { get; set; }
8 | public object Object { get; set; }
9 |
10 | public GenericObjectOption(string name, string description, object obj) : base(name, description) => Object = obj;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Models/MusicType.cs:
--------------------------------------------------------------------------------
1 | namespace PlayniteSounds.Models
2 | {
3 | public enum MusicType
4 | {
5 | Default,
6 | Platform,
7 | Game,
8 | Filter
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Models/PlayniteSoundSettings.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace PlayniteSounds.Models
5 | {
6 | public class PlayniteSoundsSettings
7 | {
8 | public AudioState MusicState { get; set; } = AudioState.Always;
9 | public AudioState SoundState { get; set; } = AudioState.Always;
10 | public MusicType MusicType { get; set; } = MusicType.Game;
11 | public int MusicVolume { get; set; } = 25;
12 | public bool StopMusic { get; set; } = true;
13 | public bool SkipFirstSelectSound { get; set; }
14 | public bool PlayBackupMusic { get; set; }
15 | public bool PauseOnDeactivate { get; set; } = true;
16 | public bool RandomizeOnEverySelect { get; set; }
17 | public bool RandomizeOnMusicEnd { get; set; } = true;
18 | public bool TagMissingEntries { get; set; }
19 | public bool AutoDownload { get; set; }
20 | public bool AutoParallelDownload { get; set; }
21 | public bool ManualParallelDownload { get; set; } = true;
22 | public bool YtPlaylists { get; set; } = true;
23 | public bool NormalizeMusic { get; set; } = true;
24 | public bool TagNormalizedGames { get; set; }
25 | public string FFmpegPath { get; set; }
26 | public string FFmpegNormalizePath { get; set; }
27 | public string FFmpegNormalizeArgs { get; set; }
28 | public IList Downloaders { get; set; } = new List { Source.Youtube };
29 | public DateTime LastAutoLibUpdateAssetsDownload { get; set; } = DateTime.Now;
30 | public bool PromptedForMigration { get; set; }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Models/Song.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Reflection;
5 |
6 | namespace PlayniteSounds.Models
7 | {
8 | internal class Song : DownloadItem
9 | {
10 | public string Description { get; set; }
11 | public string SizeInMb { get; set; }
12 | public TimeSpan? Length { get; set; }
13 | protected override IEnumerable Properties => typeof(Song).GetProperties();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Models/Source.cs:
--------------------------------------------------------------------------------
1 | namespace PlayniteSounds.Models
2 | {
3 | public enum Source
4 | {
5 | All,
6 | KHInsider,
7 | Youtube
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/PlayerEntry.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Media;
2 | using System.Media;
3 |
4 | namespace PlayniteSounds
5 | {
6 | class PlayerEntry
7 | {
8 | public MediaPlayer MediaPlayer { get; set; }
9 | public SoundPlayer SoundPlayer { get; set; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/PlayniteSounds.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.2.32616.157
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlayniteSounds", "PlayniteSounds.csproj", "{4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {4FDF1E89-5BC3-4C72-8FDA-0D580E7A5D5F}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {64D64144-3041-47BD-9FA4-4551ABAC9CCD}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/PlayniteSounds.yaml:
--------------------------------------------------------------------------------
1 | AddonId: 'Playnite.Sounds.WD'
2 | Packages:
3 | - Version: 5.6
4 | RequiredApiVersion: 6.4.0
5 | ReleaseDate: 2022-10-31
6 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v5.6/PlayniteSounds-v5.6.pext
7 | Changelog:
8 | - Error message no longer displays sometimes when plugin attempted to play backup music from a filter
9 | - GameStarted sound has been restored
10 | - Version: 5.4
11 | RequiredApiVersion: 6.4.0
12 | ReleaseDate: 2022-10-31
13 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v5.4/PlayniteSounds-v5.4.pext
14 | Changelog:
15 | - Migration process now only prompts exactly once (can be re-enabled via editing the config file)
16 | - The Sounds directory in ExtraMetaData folder is now deleted if one is found during migration process
17 | - Version: 5.2
18 | RequiredApiVersion: 6.4.0
19 | ReleaseDate: 2022-10-31
20 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v5.2/PlayniteSounds-v5.2.pext
21 | Changelog:
22 | - Fixed issues with migration process
23 | - Fixed filter music not playing as backup music
24 | - Version: 5.0
25 | RequiredApiVersion: 6.4.0
26 | ReleaseDate: 2022-10-29
27 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v5.0/PlayniteSounds-v5.0.pext
28 | Changelog:
29 | - The below two changes require a migration process upon next app start, if given user approval
30 | - Re-organized game music file layout to use unique IDs instead of game names
31 | - Moved all audio files into the ExtraMetaData folder
32 | - Added ability to download game music from YouTube
33 | - Added support for filter support
34 | - Can now specify multiple music files per source (Filter, Platform, Game, Default)
35 | - Replaced default sound files
36 | - Backup music can now be played (Game -> Filter -> Default)
37 | - Re-organized all UI options
38 | - Added Play/Pause Uri support
39 | - Version: 4.6
40 | RequiredApiVersion: 6.1.0
41 | ReleaseDate: 2022-04-03
42 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v4.6/PlayniteSounds-v4.6.pext
43 | Changelog:
44 | - Fix Music not always stopping anymore when a game is launched
45 | - Version: 4.4
46 | RequiredApiVersion: 6.1.0
47 | ReleaseDate: 2022-04-03
48 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v4.4/PlayniteSounds-v4.4.pext
49 | Changelog:
50 | - Add option to choose when music stops (game is starting / game has started)
51 | - Version: 4.3
52 | RequiredApiVersion: 6.1.0
53 | ReleaseDate: 2022-04-02
54 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v4.3/PlayniteSounds-v4.3.pext
55 | Changelog:
56 | - Add option to "select / Copy" currently active music file(name)
57 | - Add option to pause music when Playnite deactivates or minimizes
58 | - Version: 4.2
59 | RequiredApiVersion: 6.1.0
60 | ReleaseDate: 2022-04-02
61 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/v4.2/PlayniteSounds-v4.2.pext
62 | Changelog:
63 | - Fix Potential Null Source Value Error after waking up from sleep / hibernate
64 | - Added Option to Skip first select sound at playnite startup
65 | - Fix music resuming after sleep (while game is running)
66 | - Korean translation by Min-Ki Jeong
67 | - Chinese Simplified translation by ATNewHope
68 | - Arabic translation by X4Lo
69 | - Version: 4.0
70 | RequiredApiVersion: 6.1.0
71 | ReleaseDate: 2021-11-05
72 | PackageUrl: https://github.com/joyrider3774/PlayniteSound/releases/download/V4.0/Playnite.Sounds.WD_4_0.pext
73 | Changelog:
74 | - Playnite 9 Support
75 | - First Platform will be used for games having multiple platforms set !!!
76 | - Be aware platform "PC" changed to "PC (Windows)" in playnite 9 so change your music folder for that platform accordingly in extension data folder.
77 | - Updated Localizations
78 |
--------------------------------------------------------------------------------
/PlayniteSoundsSettingsView.xaml.cs:
--------------------------------------------------------------------------------
1 | using System.Windows;
2 |
3 | namespace PlayniteSounds
4 | {
5 | public partial class PlayniteSoundsSettingsView
6 | {
7 | private readonly PlayniteSounds _plugin;
8 |
9 | public PlayniteSoundsSettingsView(PlayniteSounds plugin)
10 | {
11 | _plugin = plugin;
12 | InitializeComponent();
13 | }
14 |
15 | private void ButReloadAudio_Click(object sender, RoutedEventArgs e)
16 | {
17 | _plugin.ReloadAudioFiles();
18 | }
19 |
20 | private void ButOpenSoundsFolder_Click(object sender, RoutedEventArgs e)
21 | {
22 | _plugin.OpenSoundsFolder();
23 | }
24 |
25 | private void ButOpenMusicFolder_Click(object sender, RoutedEventArgs e)
26 | {
27 | _plugin.OpenMusicFolder();
28 | }
29 |
30 | private void ButOpenInfo_Click(object sender, RoutedEventArgs e)
31 | {
32 | _plugin.HelpMenu();
33 | }
34 |
35 | private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)
36 | {
37 | _plugin.ResetMusicVolume();
38 | }
39 |
40 | private void ButSaveSounds_Click(object sender, RoutedEventArgs e)
41 | {
42 | _plugin.SaveSounds();
43 | }
44 |
45 | private void ButLoadSounds_Click(object sender, RoutedEventArgs e)
46 | {
47 | _plugin.LoadSounds();
48 | }
49 |
50 | private void ButImportSounds_Click(object sender, RoutedEventArgs e)
51 | {
52 | _plugin.ImportSounds();
53 | }
54 |
55 | private void ButRemoveSounds_Click(object sender, RoutedEventArgs e)
56 | {
57 | _plugin.RemoveSounds();
58 | }
59 |
60 | private void ButOpenSoundManagerFolder_Click(object sender, RoutedEventArgs e)
61 | {
62 | _plugin.OpenSoundManagerFolder();
63 | }
64 | }
65 | }
--------------------------------------------------------------------------------
/PlayniteSoundsSettingsViewModel.cs:
--------------------------------------------------------------------------------
1 | using Playnite.SDK;
2 | using Playnite.SDK.Data;
3 | using PlayniteSounds.Models;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Diagnostics;
7 | using System.IO;
8 |
9 | namespace PlayniteSounds
10 | {
11 | public class PlayniteSoundsSettingsViewModel : ObservableObject, ISettings
12 | {
13 | private PlayniteSoundsSettings _settings;
14 | public PlayniteSoundsSettings Settings
15 | {
16 | get => _settings;
17 | set
18 | {
19 | _settings = value;
20 | OnPropertyChanged();
21 | }
22 | }
23 |
24 | public RelayCommand