Merge branch 'develop' of https://github.com/Apple-Music-Electron/Cider into develop

This commit is contained in:
cryptofyre 2022-02-19 00:15:21 -06:00
commit 538bcffe7e
23 changed files with 723 additions and 170 deletions

Binary file not shown.

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 183 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path d="M0,6C0,2.686 2.686,0 6,0L177,0C180.314,0 183,2.686 183,6L183,34C183,37.314 180.314,40 177,40L6,40C2.686,40 0,37.314 0,34L0,6Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/>
<g transform="matrix(1.42013,0,0,1.42013,-13.8213,-1.00475)">
<g transform="matrix(12,0,0,12,41.6776,19.3396)">
<rect x="0.063" y="-0.727" width="0.154" height="0.727" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,45.0441,19.3396)">
<path d="M0.212,-0.315C0.212,-0.386 0.254,-0.427 0.315,-0.427C0.376,-0.427 0.412,-0.387 0.412,-0.32L0.412,-0L0.563,-0L0.563,-0.347C0.563,-0.474 0.489,-0.553 0.375,-0.553C0.294,-0.553 0.235,-0.513 0.211,-0.449L0.205,-0.449L0.205,-0.545L0.06,-0.545L0.06,-0L0.212,-0L0.212,-0.315Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,52.5058,19.3396)">
<path d="M0.514,-0.39C0.501,-0.49 0.42,-0.553 0.282,-0.553C0.142,-0.553 0.05,-0.488 0.051,-0.383C0.05,-0.301 0.102,-0.248 0.208,-0.227L0.303,-0.208C0.35,-0.199 0.372,-0.181 0.373,-0.154C0.372,-0.121 0.337,-0.098 0.284,-0.098C0.23,-0.098 0.194,-0.121 0.185,-0.166L0.036,-0.158C0.05,-0.054 0.139,0.011 0.284,0.011C0.425,0.011 0.526,-0.061 0.527,-0.169C0.526,-0.248 0.475,-0.295 0.369,-0.317L0.27,-0.337C0.219,-0.348 0.201,-0.365 0.201,-0.391C0.201,-0.424 0.238,-0.445 0.284,-0.445C0.337,-0.445 0.368,-0.417 0.376,-0.381L0.514,-0.39Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,59.2472,19.3396)">
<path d="M0.35,-0.545L0.248,-0.545L0.248,-0.676L0.097,-0.676L0.097,-0.545L0.022,-0.545L0.022,-0.432L0.097,-0.432L0.097,-0.148C0.096,-0.041 0.169,0.012 0.278,0.007C0.317,0.006 0.345,-0.002 0.36,-0.007L0.337,-0.119C0.329,-0.118 0.313,-0.114 0.299,-0.114C0.269,-0.114 0.248,-0.126 0.248,-0.168L0.248,-0.432L0.35,-0.432L0.35,-0.545Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,63.9092,19.3396)">
<path d="M0.216,0.01C0.297,0.01 0.349,-0.025 0.375,-0.076L0.38,-0.076L0.38,-0L0.523,-0L0.523,-0.368C0.523,-0.498 0.413,-0.553 0.292,-0.553C0.161,-0.553 0.075,-0.49 0.054,-0.391L0.194,-0.379C0.204,-0.415 0.237,-0.442 0.291,-0.442C0.342,-0.442 0.372,-0.416 0.372,-0.371L0.372,-0.369C0.372,-0.334 0.335,-0.33 0.24,-0.32C0.132,-0.31 0.035,-0.274 0.035,-0.152C0.035,-0.044 0.112,0.01 0.216,0.01ZM0.259,-0.094C0.213,-0.094 0.179,-0.116 0.179,-0.157C0.179,-0.2 0.214,-0.221 0.268,-0.228C0.301,-0.233 0.355,-0.241 0.373,-0.253L0.373,-0.195C0.373,-0.138 0.326,-0.094 0.259,-0.094Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,70.8722,19.3396)">
<rect x="0.06" y="-0.727" width="0.151" height="0.727" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,74.1364,19.3396)">
<rect x="0.06" y="-0.727" width="0.151" height="0.727" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,80.1833,19.3396)">
<path d="M0.307,0.011C0.472,0.011 0.575,-0.103 0.575,-0.271C0.575,-0.44 0.472,-0.553 0.307,-0.553C0.141,-0.553 0.038,-0.44 0.038,-0.271C0.038,-0.103 0.141,0.011 0.307,0.011ZM0.308,-0.107C0.231,-0.107 0.192,-0.176 0.192,-0.272C0.192,-0.367 0.231,-0.437 0.308,-0.437C0.382,-0.437 0.422,-0.367 0.422,-0.272C0.422,-0.176 0.382,-0.107 0.308,-0.107Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,87.5469,19.3396)">
<path d="M0.212,-0.315C0.212,-0.386 0.254,-0.427 0.315,-0.427C0.376,-0.427 0.412,-0.387 0.412,-0.32L0.412,-0L0.563,-0L0.563,-0.347C0.563,-0.474 0.489,-0.553 0.375,-0.553C0.294,-0.553 0.235,-0.513 0.211,-0.449L0.205,-0.449L0.205,-0.545L0.06,-0.545L0.06,-0L0.212,-0L0.212,-0.315Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,97.7913,19.3396)">
<path d="M0.705,-0.473C0.685,-0.641 0.558,-0.737 0.389,-0.737C0.197,-0.737 0.05,-0.602 0.05,-0.364C0.05,-0.126 0.195,0.01 0.389,0.01C0.576,0.01 0.688,-0.114 0.705,-0.248L0.549,-0.249C0.535,-0.171 0.474,-0.126 0.392,-0.126C0.281,-0.126 0.206,-0.208 0.206,-0.364C0.206,-0.515 0.28,-0.601 0.393,-0.601C0.477,-0.601 0.538,-0.553 0.549,-0.473L0.705,-0.473Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,106.817,19.3396)">
<path d="M0.06,-0L0.212,-0L0.212,-0.545L0.06,-0.545L0.06,-0ZM0.136,-0.616C0.181,-0.616 0.218,-0.65 0.218,-0.692C0.218,-0.734 0.181,-0.769 0.136,-0.769C0.092,-0.769 0.055,-0.734 0.055,-0.692C0.055,-0.65 0.092,-0.616 0.136,-0.616Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,110.081,19.3396)">
<path d="M0.261,0.009C0.349,0.009 0.395,-0.042 0.416,-0.087L0.423,-0.087L0.423,-0L0.572,-0L0.572,-0.727L0.421,-0.727L0.421,-0.454L0.416,-0.454C0.396,-0.498 0.352,-0.553 0.261,-0.553C0.141,-0.553 0.04,-0.46 0.04,-0.272C0.04,-0.089 0.137,0.009 0.261,0.009ZM0.309,-0.112C0.235,-0.112 0.195,-0.178 0.195,-0.273C0.195,-0.367 0.234,-0.432 0.309,-0.432C0.383,-0.432 0.424,-0.37 0.424,-0.273C0.424,-0.175 0.382,-0.112 0.309,-0.112Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,117.705,19.3396)">
<path d="M0.309,0.011C0.444,0.011 0.535,-0.055 0.556,-0.156L0.416,-0.165C0.401,-0.124 0.362,-0.102 0.311,-0.102C0.236,-0.102 0.188,-0.152 0.188,-0.234L0.188,-0.234L0.559,-0.234L0.559,-0.276C0.559,-0.461 0.447,-0.553 0.303,-0.553C0.142,-0.553 0.038,-0.439 0.038,-0.27C0.038,-0.097 0.141,0.011 0.309,0.011ZM0.188,-0.328C0.191,-0.39 0.238,-0.44 0.305,-0.44C0.371,-0.44 0.417,-0.393 0.417,-0.328L0.188,-0.328Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(12,0,0,12,124.876,19.3396)">
<path d="M0.06,-0L0.212,-0L0.212,-0.309C0.212,-0.376 0.261,-0.422 0.327,-0.422C0.348,-0.422 0.377,-0.418 0.391,-0.414L0.391,-0.548C0.378,-0.551 0.359,-0.553 0.344,-0.553C0.283,-0.553 0.233,-0.518 0.213,-0.45L0.207,-0.45L0.207,-0.545L0.06,-0.545L0.06,-0Z" style="fill:white;fill-rule:nonzero;"/>
</g>
</g>
<g transform="matrix(1,0,0,1,-10,-9.91057)">
<circle cx="34" cy="30" r="10" style="fill:rgb(15,15,15);"/>
</g>
<g id="Release.svg" transform="matrix(0.0257787,0,0,0.0257787,24.0003,20)">
<g transform="matrix(1,0,0,1,-501,-500)">
<path d="M501,21C765.367,21 980,235.633 980,500C980,764.367 765.367,979 501,979C236.633,979 22,764.367 22,500C22,235.633 236.633,21 501,21ZM501,169C683.684,169 832,317.316 832,500C832,682.684 683.684,831 501,831C318.316,831 170,682.684 170,500C170,317.316 318.316,169 501,169Z" style="fill:rgb(255,38,84);"/>
<path d="M501,224C653.053,224 776.5,347.447 776.5,499.5C776.5,651.553 653.053,775 501,775C348.947,775 225.5,651.553 225.5,499.5C225.5,347.447 348.947,224 501,224ZM589.165,492.207C595.163,495.672 595.163,504.328 589.165,507.793L439.502,594.256C433.502,597.722 426,593.392 426,586.463L426,413.537C426,406.608 433.502,402.278 439.502,405.744L589.165,492.207Z" style="fill:rgb(255,38,84);"/>
</g>
</g>
<defs>
<linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-155,37.5,-37.5,-155,181,-9.33524e-07)"><stop offset="0" style="stop-color:rgb(255,38,84);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(64,38,84);stop-opacity:1"/></linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

@ -44,8 +44,8 @@
"term.albums": "Albuns",
"term.artists": "Artistas",
"term.podcasts": "Podcasts",
"term.playlists": "Listas de Reprodução",
"term.playlist": "Lista de Reprodução",
"term.playlists": "Playlists",
"term.playlist": "Playlist",
"term.play": "Tocar",
"term.pause": "Pausar",
"term.previous": "Anterior",
@ -55,7 +55,7 @@
"term.volume": "Volume",
"term.mute": "Mudo",
"term.unmute": "Tirar o Mudo",
"term.share": "Partilhar",
"term.share": "Compartilhar",
"term.settings": "Definições",
"term.seeAll": "Ver Tudo",
"term.sortBy": "Organizar Por",
@ -97,6 +97,50 @@
"term.clearAll": "Limpar Tudo",
"term.language": "Idioma",
"term.recentStations": "Estações Recentes",
"term.language": "Idioma",
"term.funLanguages": "Fun",
"term.noLyrics": "Carregando... / Letras não achadas./ Instrumental.",
"term.copyright": "Copyright",
"term.rightsReserved": "Todos direitos reservados.",
"term.sponsor": "Patrocine esse projeto",
"term.ciderTeam": "Time Cider",
"term.developer": "Desenvolvedor",
"term.socialTeam": "Time social",
"term.socials": "Redes Sociais",
"term.contributors": "Contribuidores",
"term.equalizer": "Equalizador",
"term.reset": "Resetar",
// Example for multiple plural forms : look up the key for your language in https://github.com/prantlf/fast-plural-rules/blob/master/docs/languages.md#supported-languages
// "term.track": {
// "one" : "track",
// "other" : "tracks"
// },
"term.tracks": "músicas", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Vídeos",
"term.menu": "Menu",
"term.check": "Checark",
"term.aboutArtist": "Sobre {{artistName}}", // e.g. 'About Doja Cat'
"term.topResult": "Melhor resultado", // Search Results
"term.sharedPlaylists": "Playlists compartilhadas", // Search Results
"term.people": "Pessoas", // Search Results
"term.newpreset.name": "Nova predefinição para o equalizador", // Equalizer Preset
"term.addedpreset": "Predefinição adicionada",
"term.deletepreset.warn": "Certeza que quer apagar essa predefinição?",
"term.deletedpreset": "Predefinição removida",
"term.defaultPresets": "predefinições padrão",
"term.userPresets": "Predefinições do usuário",
"term.requestError": "There was a problem with the request.",
"term.song.link.generate": "Gerando URL do song.link...",
"term.musicVideos": "Vídeos", // Search page friendlyTypes
"term.stations": "Estações",
"term.curators": "Curadores",
"term.appleCurators": "Curadores da Apple",
"term.radioShows": "Shows de Radio",
"term.recordLabels": "Gravadoras",
"term.videoExtras": "Extras",
"term.top": "Top",
"term.version": "Versão",
"term.noVideos": "Vídeos não encontrados.",
// Home
"home.title": "Inicio",
@ -106,9 +150,23 @@
"home.madeForYou": "Feito para Você",
"home.friendsListeningTo": "Amigos Ouvindo",
"home.followedArtists": "Artistas Seguidos",
"home.artistsFeed.noArtist": "Siga uns artistas e o seus ultimos lançamentos aparecerão aqui",
// Errors
"error.appleMusicSubRequired": "Necessário uma assinatura Apple Music.",
"error.connectionError": "Aconteceu um problema ao conectar ao Apple Music.",
"error.noResults": "Sem resultados.",
"error.noResults.description": "Tente uma nova busca.",
// Podcasts
"podcast.followOnCider": "Seguir no Cider",
"podcast.followedOnCider": "Seguindo no Cider",
"podcast.subscribeOnItunes": "Inscrever-se no iTunes",
"podcast.subscribedOnItunes": "Inscrito no iTunes",
"podcast.itunesStore": "iTunes Store",
"podcast.episodes": "Episodios",
"podcast.playEpisode": "Reproduzir episódio",
"podcast.website": "Website do Podcast",
// Actions
"action.addToLibrary": "Adicionar à Biblioteca",
@ -131,64 +189,111 @@
"action.unfollow": "Deixar de Seguir",
"action.unfollow.success": "Deixou de Seguir",
"action.unfollow.error": "Erro ao Deixar de Seguir",
"action.playNext": "Tocar Proximo",
"action.playLater": "Tocar por Ultimo",
"action.playNext": "Reproduzir a Seguir",
"action.playLater": "Reproduzir por Ultimo",
"action.startRadio": "Começar Radio",
"action.goToArtist": "Ir para o Artista",
"action.goToAlbum": "Ir para o Album",
"action.moveToTop": "Mover para cima",
"action.share": "Partilhar",
"action.rename": "Mudar o Nome",
"action.share": "Compartilhar",
"action.rename": "Renomear",
"action.love": "Gostar",
"action.unlove": "Deixar de Gostar",
"action.dislike": "Não Gostar",
"action.undoDislike": "Deixar de Não Gostar",
"action.showWebRemoteQR": "Mostrar o QR para Página Remota",
"action.playTracksNext": "Reproduzir ${app.selectedMediaItems.length} músicas a seguir",
"action.playTracksLater": "Reproduzir ${app.selectedMediaItems.length} músicas depois",
"action.removeTracks": "Remover ${self.selectedItems.length} músicas da fila",
"action.import": "Importar",
"action.export": "Exportar",
"action.showAlbum": "Mostrar album completo",
"action.tray.minimize": "Minimize to Tray",
"action.tray.quit": "Sair",
"action.tray.show": "Mostrar",
"action.update": "Atualizar",
"action.copy": "Copiar",
"action.newpreset": "Nova predefinição...", // Equalizer Preset
"action.deletepreset": "Apagar predefinição",
"action.open": "Abrir",
// Settings - General
"settings.header.general": "Principal",
"settings.header.general.description": "Ajustar as definiçoes principais no Cider.",
"settings.option.general.language": "Idioma",
// Language optgroups
"settings.option.general.language.main": "Idiomas",
"settings.option.general.language.fun": "Idiomas divertidos",
"settings.option.general.language.unsorted": "Sem categoria",
// Update Cider
"settings.option.general.updateCider": "Atualizar o Cider", // Button. Refer to term.check for the check button
"settings.option.general.updateCider.branch": "Cider Update Branch", // Dropdown
"settings.option.general.updateCider.branch.description": "Escolha a versão do Cider para atualizar",
"settings.option.general.updateCider.branch.main": "Estável",
"settings.option.general.updateCider.branch.develop": "Em desenvolvimeno",
// Settings - Audio
"settings.header.audio": "Audio",
"settings.header.audio.description": "Ajustar as definições de audio no Cider.",
"settings.option.audio.quality": "Qualidade do Audio", // Dropdown
"settings.header.audio": "Áudio",
"settings.header.audio.description": "Ajustar as configurações de áudio no Cider.",
"settings.option.audio.volumeStep": "Incrementos",
"settings.option.audio.maxVolume": "Volume máximo",
"settings.option.audio.quality": "Qualidade de Áudio", // Dropdown
"settings.header.audio.quality.hireslossless": "Hi-Res Lossless",
"settings.header.audio.quality.hireslossless.description": "até 24-bit/192 kHz",
"settings.header.audio.quality.lossless": "Lossless",
"settings.header.audio.quality.lossless.description": "até 24-bit/48 kHz",
"settings.header.audio.quality.high": "Alta",
"settings.header.audio.quality.low": "Baixa",
"settings.header.audio.quality.auto": "Automatico",
"settings.option.audio.seamlessTransition": "Transição de Áudio Perfeita", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Ativar Funcionabilidades Avançadas", // Toggle
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Padrão",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.option.audio.seamlessTransition": "Transição de audio ...", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Ativar configurações avancadas", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Habilitar a funcionalidade AudioContext permitirá recursos de áudio estendidos, como Normalização de Áudio , Equalizadores e Visualizadores. No entanto, em alguns sistemas, isso pode causar travamentos nas faixas de áudio.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalização de Audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Melhoras psicoacusticas que fazem com que tudo soe mais vivo | feito por Maikiwi.",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP não é compativel com Áudio Espacial. Por favor, desative-o para continuar.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Potência do CAP", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Muda a potência do processamento feito no áudio. (a função Agressiva pode levar a resultados não desejados.)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Padrão",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agressiva",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalização de Áudio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliza o volume alto para faixas individuais para criar uma experiência de audição mais uniforme.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Espacial", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Áudio Espacial", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Espacialize o áudio e torne o áudio mais tridimensional (nota: isto não é Dolby Atmos)",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Áudio Espacial não é compativel com o CAP. Por favor desative-o.",
// Settings - Visual
"settings.header.visual": "Visual",
"settings.header.visual.description": "Ajustar as Definições de Visual do Cider.",
"settings.option.visual.windowBackgroundStyle": "Estilo do Fundo da Janela", // Toggle
"settings.header.visual.description": "Ajustar as configurações visuais do Cider.",
"settings.option.visual.windowBackgroundStyle": "Estilo do fundo da janela", // Toggle
"settings.header.visual.windowBackgroundStyle.none": "Nenhum",
"settings.header.visual.windowBackgroundStyle.artwork": "Capa",
"settings.option.visual.animatedArtwork": "Capa Animada", // Dropdown
"settings.header.visual.windowBackgroundStyle.image": "Imagem",
"settings.option.visual.animatedArtwork": "Capa animada", // Dropdown
"settings.header.visual.animatedArtwork.always": "Sempre",
"settings.header.visual.animatedArtwork.limited": "Limitado a páginas e entradas especiais",
"settings.header.visual.animatedArtwork.disable": "Desativar em Tudo",
"settings.option.visual.animatedArtworkQuality": "Qualidade da Capa Animada", // Dropdown
"settings.header.visual.animatedArtwork.disable": "Desativar",
"settings.option.visual.animatedArtworkQuality": "Qualidade da capa animada", // Dropdown
"settings.header.visual.animatedArtworkQuality.low": "Baixa",
"settings.header.visual.animatedArtworkQuality.medium": "Media",
"settings.header.visual.animatedArtworkQuality.high": "Alta",
"settings.header.visual.animatedArtworkQuality.veryHigh": "Muito Alta",
"settings.header.visual.animatedArtworkQuality.extreme": "Extrema",
"settings.option.visual.animatedWindowBackground": "Fundo de Janela Animado", // Toggle
"settings.option.visual.hardwareAcceleration": "Acelaração no Hardware", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "Necessário reiniciar a aplicação",
"settings.header.visual.hardwareAcceleration.default": "Normal",
"settings.header.visual.animatedArtworkQuality.extreme": "Altissima",
"settings.option.visual.animatedWindowBackground": "Fundo animado", // Toggle
"settings.option.visual.hardwareAcceleration": "Aceleração de Hardware", // Dropdown
"settings.option.visual.hardwareAcceleration.description": "Necessário reabrir o Cider",
"settings.header.visual.hardwareAcceleration.default": "Padrão",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Tema",
"settings.option.visual.theme.github.download": "Instalar pelo URL do GitHub",
"settings.option.visual.theme.github.explore": "Explorar temas no GitHub",
"settings.option.visual.theme.github.install.confirm": "Tem certeza que quer instalar {{ repo }}?",
"settings.prompt.visual.theme.github.URL": "Insira o URL do tema que deseja instalar",
"settings.notyf.visual.theme.install.success": "Tema instalado com sucesso",
"settings.notyf.visual.theme.install.error": "A instalação do tema falhou",
// Settings - Visual - Theme name
@ -215,12 +320,19 @@
"settings.option.connectivity.lastfmScrobble.delay": "Atraso dos Scrobbles do LastFM (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Ativar LastFM Now Playing",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remover artistas de colaboração do nome da música (LastFM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrar músicas repitidas (Last.fm)",
// Refer to term.connect for the connect button
// Settings - Debug
"settings.header.debug": "Debug",
"settings.option.debug.copy_log": "Copiar logs",
"settings.option.debug.openAppData": "Abrir a pasta do Cider",
// Settings - Experimental
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Ajustar as definições experimental no Cider.",
"settings.option.experimental.compactUI": "UI Compacto", // Toggle
"settings.option.experimental.close_button_hide": "Fechar apenas esconde o Cider",
// Refer to term.disabled & term.enabled
// Spatialization Menu

View file

@ -105,27 +105,25 @@
"few": "часа",
"other": "часов"
},
// "term.time.hour": "час",
"term.time.minute": {
"one": "минута",
"few": "минуты",
"other": "минут"
},
// "term.time.minute": "минута",
"term.time.second": {
"one": "секунд",
"few": "секунды",
"other": "секунд"
},
// "term.time.second": "секунда",
"term.fullscreenView": "Полноэкранное отображение",
"term.defaultView": "Стандартное отображение",
"term.audioSettings": "Настройки звука",
"term.audioControls": "Настройка громкости",
"term.clearAll": "Очистить",
"term.recentStations": "Вы недавно слушали", // FROM ITUNES
"term.language": "Язык",
"term.funLanguages": "Забавные",
"term.noLyrics": "Загрузка... / Текст песни не найден./ Инструментал.",
"term.noLyrics": "Текст песни не найден.",
"term.copyright": "Авторское право",
"term.rightsReserved": "Все права защищены.",
"term.sponsor": "Поддержать проект",
@ -165,6 +163,7 @@
"term.videoExtras": "Ещё", // FROM ITUNES
"term.top": "Top", // NOT SURE WHAT IT IS, NOT TRANSLATED
"term.version": "Версия",
"term.noVideos": "Видео не найдено.",
// Home
"home.title": "Главная",
"home.recentlyPlayed": "Недавно прослушанные",
@ -239,7 +238,7 @@
"action.copy": "Скопировать",
"action.newpreset": "Новый пресет...", // Equalizer Preset
"action.deletepreset": "Удалить пресет",
"action.open": "Открыть",
// Settings - General
"settings.header.general": "Общие",
"settings.header.general.description": "Настройка общих параметров Cider.",
@ -260,6 +259,8 @@
// Settings - Audio
"settings.header.audio": "Звук",
"settings.header.audio.description": "Настройка звука Cider.",
"settings.option.audio.volumeStep": "Шаг громкости",
"settings.option.audio.maxVolume": "Максимальная громкость",
"settings.option.audio.quality": "Качество звука", // Dropdown FROM IOS
"settings.header.audio.quality.hireslossless": "Высокое разрешение, без потерь", // FROM IOS
"settings.header.audio.quality.hireslossless.description": "ALAC до 24 бит/192 кГц", // FROM IOS
@ -309,6 +310,8 @@
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Тема",
"settings.option.visual.theme.github.download": "Установить с GitHub",
"settings.option.visual.theme.github.explore": "Исследовать темы с GitHub",
"settings.option.visual.theme.github.install.confirm": "Вы уверены, что хотите установить {{ repo }}?",
"settings.prompt.visual.theme.github.URL": "Введите URL темы, которую хотите установить",
"settings.notyf.visual.theme.install.success": "Тема успешно установлена",
"settings.notyf.visual.theme.install.error": "Не удалось установить тему",
@ -344,12 +347,17 @@
"settings.option.connectivity.lastfmScrobble.filterLoop": "Фильтровать зацикленный трек (Last.fm)",
// Refer to term.connect for the connect button
// Settings - Debug
"settings.header.debug": "Debug",
"settings.option.debug.copy_log": "Копировать логи в буфер обмена",
"settings.option.debug.openAppData": "Открыть папку Cider",
// Settings - Experimental
"settings.header.experimental": "Экспериментальные",
"settings.header.experimental.description": "Настройка экспериментальных функций Cider.",
"settings.option.experimental.compactUI": "Компактный интерфейс", // Toggle
"settings.option.experimental.close_button_hide": "Кнопка «Закрыть» скрывает приложение",
"settings.option.experimental.copy_log": "Скопировать логи в буфер обмена",
"settings.option.experimental.inline_playlists": "Встроенные плейлисты и альбомы", // NOT SURE
// Refer to term.disabled & term.enabled

View file

@ -48,6 +48,7 @@ export class BrowserWindow {
"pages/remote-pair",
"pages/themes-github",
"pages/replay",
"pages/audiolabs",
"components/mediaitem-artwork",
"components/artwork-material",
"components/menu-panel",
@ -261,9 +262,10 @@ export class BrowserWindow {
}
});
app.get("/themes/:theme/:file", (req, res) => {
app.get("/themes/:theme/*", (req, res) => {
const theme = req.params.theme.toLowerCase();
const file = req.params.file;
// @ts-ignore
const file = req.params[0];
const themePath = join(utils.getPath('srcPath'), "./renderer/themes/", theme);
const userThemePath = join(utils.getPath('themes'), theme);
if (existsSync(userThemePath)) {
@ -275,6 +277,18 @@ export class BrowserWindow {
}
});
app.get("/plugins/:plugin/*", (req, res) => {
const plugin = req.params.plugin;
// @ts-ignore
const file = req.params[0];
const pluginPath = join(utils.getPath('plugins'), plugin);
if (existsSync(pluginPath)) {
res.sendFile(join(pluginPath, file));
} else {
res.send(`// Plugin not found - ${pluginPath}`);
}
});
app.get("/audio.webm", (req, res) => {
try {
req.socket.setTimeout(Number.MAX_SAFE_INTEGER);
@ -664,7 +678,7 @@ export class BrowserWindow {
console.log(err)
});
});
/*
ipcMain.on('check-for-update', async (_event) => {
const branch = utils.getStoreValue('general.update_branch')
let latestbranch = await fetch(`https://circleci.com/api/v1.1/project/gh/ciderapp/Cider/latest/artifacts?branch=${branch}&filter=successful`)
@ -680,10 +694,10 @@ export class BrowserWindow {
const options: any = {
provider: 'generic',
url: `${base_url}`
}
}*/
/*
* Have to handle the auto updaters seperatly until we can support macOS. electron-builder limitation -q
*/
*/ /*
const win_autoUpdater = new NsisUpdater(options) //Windows
const linux_autoUpdater = new AppImageUpdater(options) //Linux
await win_autoUpdater.checkForUpdatesAndNotify()
@ -697,7 +711,7 @@ export class BrowserWindow {
event.returnValue = true
}
})
*/
ipcMain.on('share-menu', async (_event, url) => {
if (process.platform != 'darwin') return;

View file

@ -64,6 +64,7 @@ export class Plugins {
app: electron.app,
store: utils.getStore(),
utils: utils,
win: utils.getWindow(),
dir: pluginPath
}
plugins[plugin.name] = new plugin(pluginEnv);

View file

@ -12,7 +12,7 @@ export class Store {
"discord_rpc_clear_on_pause": true,
"language": "en_US", // electron.app.getLocale().replace('-', '_') this can be used in future
"playbackNotifications": true,
"update_branch": "main"
"update_branch": "innolab"
},
"home": {
"followedArtists": [],
@ -27,15 +27,26 @@ export class Store {
},
"audio": {
"volume": 1,
"volumeStep": 0.02,
"volumeStep": 0.1,
"maxVolume": 1,
"lastVolume": 1,
"muted": false,
"quality": "HIGH",
"seamless_audio": true,
"normalization": false,
"maikiwiAudio": {
"ciderPPE": false,
"ciderPPE_value": 0.5,
"analogWarmth": false,
"analogWarmth_value": 1.25,
"spatial": false,
"vibrantBass": { // Hard coded into the app. Don't include any of this config into exporting presets in store.ts
'multiplier': 0,
'frequencies': [17.182, 42.169, 53.763, 112.69, 119.65, 264.59, 336.57, 400.65, 505.48, 612.7, 838.7, 1155.3, 1175.6, 3406.8, 5158.6, 5968.1, 6999.9, 7468.6, 8862.9, 9666, 10109],
'Q': [2.5, 0.388, 5, 5, 2.5, 7.071, 14.14, 10, 7.071, 14.14, 8.409, 0.372, 7.071, 10, 16.82, 7.071, 28.28, 20, 8.409, 40, 40],
'gain': [-0.34, 2.49, 0.23, -0.49, 0.23, -0.12, 0.32, -0.29, 0.33, 0.19, -0.18, -1.27, -0.11, 0.25, -0.18, -0.53, 0.34, 1.32, 1.78, 0.41, -0.28]
}
},
"spatial": false,
"spatial_properties": {
"presets": [],
@ -66,12 +77,6 @@ export class Store {
'presets': [],
'userGenerated': false
},
"vibrantBass": { // Hard coded into the app. Don't include any of this config into exporting presets in store.ts
'multiplier': 0,
'frequencies': [17.182, 42.169, 53.763, 112.69, 119.65, 264.59, 336.57, 400.65, 505.48, 612.7, 838.7, 1155.3, 1175.6, 3406.8, 5158.6, 5968.1, 6999.9, 7468.6, 8862.9, 9666, 10109],
'Q': [2.5, 0.388, 5, 5, 2.5, 7.071, 14.14, 10, 7.071, 14.14, 8.409, 0.372, 7.071, 10, 16.82, 7.071, 28.28, 20, 8.409, 40, 40],
'gain': [-0.34, 2.49, 0.23, -0.49, 0.23, -0.12, 0.32, -0.29, 0.33, 0.19, -0.18, -1.27, -0.11, 0.25, -0.18, -0.53, 0.34, 1.32, 1.78, 0.41, -0.28]
}
},
"visual": {
"theme": "",

View file

@ -83,6 +83,10 @@ export class utils {
return bw.win
}
static loadJSFrontend(path: string): void {
bw.win.webContents.executeJavaScript(fs.readFileSync(path, "utf8"));
}
/**
* Playback Functions
*/

View file

@ -183,6 +183,9 @@ export class wsapi {
break;
case "next":
this._win.webContents.executeJavaScript(`if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null) {
try {
app.prevButtonBackIndicator = false;
} catch (e) { }
MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);}`);
response.message = "Next";
break;

View file

@ -61,6 +61,10 @@ app.on('ready', () => {
* Renderer Event Handlers
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
ipcMain.handle("renderer-ready", (event) => {
CiderPlug.callPlugins("onRendererReady", event);
})
ipcMain.on('playbackStateDidChange', (_event, attributes) => {
CiderPlug.callPlugins('onPlaybackStateDidChange', attributes);
});

View file

@ -136,6 +136,9 @@ const MusicKitInterop = {
},
next: () => {
try {
app.prevButtonBackIndicator = false;
} catch (e) { }
if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null)
MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);
// MusicKit.getInstance().skipToNextItem().then(r => console.log(`[MusicKitInterop.next] Skipping to Next ${r}`));

Binary file not shown.

Binary file not shown.

View file

@ -8,7 +8,8 @@ var CiderAudio = {
audioBands : null,
vibrantbassNode: null,
llpw: null,
llpwEnabled: null
llpwEnabled: null,
analogWarmth: null
},
init: function (cb = function () { }) {
//AudioOutputs.fInit = true;
@ -29,6 +30,9 @@ var CiderAudio = {
CiderAudio.audioNodes.gainNode.disconnect(); } catch(e){}
try{ CiderAudio.audioNodes.spatialNode.disconnect();} catch(e){}
try{
for (var i of CiderAudio.audioNodes.analogWarmth){
i.disconnect();
}
for (var i of CiderAudio.audioNodes.llpw){
i.disconnect();
}
@ -47,7 +51,8 @@ var CiderAudio = {
audioBands : null,
vibrantbassNode: null,
llpw: null,
llpwEnabled: null
llpwEnabled: null,
analogWarmth: null
}
} catch (e) {}
CiderAudio.source.connect(CiderAudio.context.destination);} catch(e){}
@ -74,9 +79,24 @@ var CiderAudio = {
normalizerOff: function (){
CiderAudio.audioNodes.gainNode.gain.setTargetAtTime(1, CiderAudio.context.currentTime+ 1, 0.5);
},
spatialOn: function (){
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.spatialNode = CiderAudio.context.createConvolver();
fetch('./audio/CiderSpatial_Conv_v2.wav').then(async (impulseData) => {
let bufferedImpulse = await impulseData.arrayBuffer();
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
});
CiderAudio.audioNodes.spatialNode.normalize = true;
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.context.destination);
}
else {
try{
CiderAudio.audioNodes.gainNode.disconnect(CiderAudio.context.destination);} catch(e){}
CiderAudio.audioNodes.spatialNode = new ResonanceAudio(CiderAudio.context);
//CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.context.destination);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.context.destination);
let roomDimensions = {
width: 32,
height: 12,
@ -93,7 +113,7 @@ var CiderAudio = {
};
CiderAudio.audioNodes.spatialNode.setRoomProperties(roomDimensions, roomMaterials);
CiderAudio.audioNodes.spatialInput = CiderAudio.audioNodes.spatialNode.createSource();
CiderAudio.hierarchical_loading();
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);}
},
spatialOff: function (){
CiderAudio.hierarchical_loading();
@ -113,6 +133,44 @@ var CiderAudio = {
);
}
},
analogWarmth_h2_3: function (status, hierarchy){
if (status === true) { // 23 Band Adjustment
let WARMTH_FREQUENCIES = [10.513, 15.756, 224.01, 677.77, 1245.4, 2326.8, 2847.3, 4215.3, 11057, 12793, 16235, 16235, 17838, 18112, 18112, 19326, 19372, 19372, 20061, 20280, 20280, 20853, 22276];
let WARMTH_GAIN = [-4.81, 0.74, 0.55, -0.84, -1.52, 0.84, 0.66, -0.29, 0.29, 0.94, 1.67, 1.62, -0.53, -0.81, -4.98, 1.43, 0.86, 1.13, -1.06, -0.95, -1.13, 1.78, -3.86];
let WARMTH_Q = [0.442, 3.536, 2.102, 8.409, 0.625, 16.82, 5, 2.973, 3.536, 2.5, 2.5, 11.89, 0.625, 1.487, 1.153, 5, 5.453, 5, 2.973, 3.386, 3.386, 14.14, 8.409];
CiderAudio.audioNodes.analogWarmth = []
for (i = 0; i < WARMTH_FREQUENCIES.length; i++) {
CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter();
CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking';
CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i];
CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i];
CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * app.cfg.audio.maikiwiAudio.analogWarmth_value;
}
for (i = 1; i < WARMTH_FREQUENCIES.length; i ++) {
CiderAudio.audioNodes.analogWarmth[i-1].connect(CiderAudio.audioNodes.analogWarmth[i]);
}
switch (hierarchy) {
case 3:
try{
CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.llpw[0]);} catch(e){}
break;
case 2:
try{
CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){}
break;
case 1:
try{
CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){}
break;
}
}
},
llpw_h2_2: function (status, hierarchy){
if (status === true) {
let LLPW_Q = [5, 1, 3.536, 1.25, 8.409, 1.25, 14.14, 7.071, 5, 0.625, 16.82, 20, 20, 20, 28.28, 28.28, 28.28, 20, 33.64, 33.64, 10, 28.28, 7.071, 3.856];
@ -125,27 +183,31 @@ var CiderAudio = {
CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking';
CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i];
CiderAudio.audioNodes.llpw[i].Q.value = LLPW_Q[i];
CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i] * app.cfg.audio.ciderPPE_value;
CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i] * app.cfg.audio.maikiwiAudio.ciderPPE_value;
}
for (i = 1; i < LLPW_FREQUENCIES.length; i ++) {
CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]);
}
if (hierarchy === 2) {
try{
CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){}}
else if (hierarchy === 1) {
switch (hierarchy) {
case 2:
try{
CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){}}
CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){}
break;
case 1:
try{CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){}
break;
}
}
},
vibrantbass_h2_1: function (status){
if (status === true) {
let VIBRANTBASSBANDS = app.cfg.audio.vibrantBass.frequencies;
let VIBRANTBASSGAIN = app.cfg.audio.vibrantBass.gain;
let VIBRANTBASSQ = app.cfg.audio.vibrantBass.Q;
let VIBRANTBASSBANDS = app.cfg.audio.maikiwiAudio.vibrantBass.frequencies;
let VIBRANTBASSGAIN = app.cfg.audio.maikiwiAudio.vibrantBass.gain;
let VIBRANTBASSQ = app.cfg.audio.maikiwiAudio.vibrantBass.Q;
CiderAudio.audioNodes.vibrantbassNode = []
for (i = 0; i < VIBRANTBASSBANDS.length; i++) {
@ -153,7 +215,7 @@ var CiderAudio = {
CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking';
CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i];
CiderAudio.audioNodes.vibrantbassNode[i].Q.value = VIBRANTBASSQ[i];
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.vibrantBass.multiplier;
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.maikiwiAudio.vibrantBass.multiplier;
}
for (i = 1; i < VIBRANTBASSBANDS.length; i ++) {
@ -166,7 +228,9 @@ var CiderAudio = {
},
hierarchical_unloading: function (){
try {CiderAudio.audioNodes.spatialNode.output.disconnect();} catch(e){}
try {CiderAudio.audioNodes.spatialNode.disconnect();} catch(e){}
try {CiderAudio.audioNodes.gainNode.disconnect();} catch(e){}
try {for (var i of CiderAudio.audioNodes.analogWarmth){i.disconnect();} CiderAudio.audioNodes.analogWarmth = []} catch(e){}
try {for (var i of CiderAudio.audioNodes.llpw){i.disconnect();} CiderAudio.audioNodes.llpw = []} catch(e){}
try {for (var i of CiderAudio.audioNodes.vibrantbassNode){i.disconnect();} CiderAudio.audioNodes.vibrantbassNode = []} catch(e){}
@ -175,45 +239,217 @@ var CiderAudio = {
},
hierarchical_loading: function (){
CiderAudio.hierarchical_unloading();
if (app.cfg.audio.vibrantBass.multiplier !== 0) { // If vibrant bass is enabled
if (app.cfg.advanced.ciderPPE) { // If CAP & vibrant bass is enabled
// Vibrant Bass, CAP, Analog Warmth, Spatial
if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.vibrantbass_h2_1(true)
if (app.cfg.audio.spatial) {
app.cfg.advanced.ciderPPE = false;
notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility'));
CiderAudio.llpw_h2_2(true, 2);
CiderAudio.analogWarmth_h2_3(true, 3);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Spatial')
}
}
// CAP, Analog Warmth, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.llpw_h2_2(true, 1);
CiderAudio.analogWarmth_h2_3(true, 3);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] CAP, Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] CAP, Analog Warmth, Spatial')
}
}
// Vibrant Bass, CAP, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.llpw_h2_2(true, 2);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]);
console.log('[Cider][Audio] Vibrant Bass, CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.log('[Cider][Audio] Vibrant Bass, CAP, Spatial')
}
}
// Vibrant Bass, CAP, Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.llpw_h2_2(true, 2);
CiderAudio.analogWarmth_h2_3(true, 3);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth')
}
// CAP, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.llpw_h2_2(true, 1);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]);
console.log('[Cider][Audio] CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.log('[Cider][Audio] CAP, Spatial')
}
}
// Analog Warmth, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 1);
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] Analog Warmth, Spatial')
}
}
// CAP, Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.llpw_h2_2(true, 1);
CiderAudio.analogWarmth_h2_3(true, 3);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] CAP and Analog Warmth')
}
// Vibrant Bass, Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.analogWarmth_h2_3(true, 2);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] Vibrant Bass, Analog Warmth')
}
// Vibrant Bass, CAP
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
CiderAudio.llpw_h2_2(true, 2);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.log('[Cider][Audio] Vibrant Bass, CAP')
}
// Vibrant Bass, Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.log('[Cider][Audio] Vibrant Bass, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.log('[Cider][Audio] Vibrant Bass, Spatial')
}
else {CiderAudio.llpw_h2_2(true, 2); CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);}
}
else { // If only vibrant bass is enabled
// Vibrant Bass
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.vibrantbass_h2_1(true)
//CiderAudio.llpw_h2_2(false, 0)
if (app.cfg.audio.spatial) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]);}
else {CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);}
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.log('[Cider][Audio] Vibrant Bass')
}
// CAP
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === true &&
app.cfg.audio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === false) {
CiderAudio.llpw_h2_2(true, 1);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.log('[Cider][Audio] CAP')
}
else { // If vibrant bass is disabled
if (app.cfg.advanced.ciderPPE) { // If CAP is enabled & vibrant bass is disabled
//CiderAudio.vibrantbass_h2_1(false)
if (app.cfg.audio.spatial) {
app.cfg.advanced.ciderPPE = false;
notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility'));
// Analog Warmth
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.maikiwiAudio.spatial === false &&
app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 1);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.log('[Cider][Audio] Analog Warmth')
}
// Spatial
else if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier === 0 &&
app.cfg.audio.maikiwiAudio.ciderPPE === false &&
app.cfg.audio.spatial === true &&
app.cfg.audio.maikiwiAudio.analogWarmth === false){
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.log('[Cider][Audio] Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]);
console.log('[Cider][Audio] Spatial')
}
else {CiderAudio.llpw_h2_2(true, 1); CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);}
}
else { // If CAP & vibrant bass is disabled
//CiderAudio.vibrantbass_h2_1(false)
//CiderAudio.llpw_h2_2(false, 0)
if (app.cfg.audio.spatial) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]);}
else {CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);}
}
// Nothing
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.log('[Cider][Audio] Nothing') // If CAP & vibrant bass is disabled
}
console.log("[Cider][Audio] Finished hierarchical loading");

View file

@ -250,7 +250,8 @@ const app = new Vue({
items: {},
headerItems: {}
}
}
},
pauseButtonTimer : null
},
watch: {
cfg: {
@ -813,12 +814,14 @@ const app = new Vue({
this.page = "home"
}
this.mediaKeyFixes()
setTimeout(() => {
this.getSocialBadges()
this.getBrowsePage();
this.$forceUpdate()
}, 500)
ipcRenderer.invoke("renderer-ready", true)
},
setTheme(theme = "") {
console.log(theme)
@ -1319,6 +1322,14 @@ const app = new Vue({
extend: "offers,editorialVideo",
"views": "appears-on,more-by-artist,related-videos,other-versions,you-might-also-like,video-extras,audio-extras",
}
if (kind.includes("playlist")){
params["include"] = "tracks";
}
if (kind.includes("album")){
params["include[albums]"] = "artists"
params["fields[artists]"] = "name,url"
params["fields[albums]"] = "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url"
}
if (this.cfg.advanced.experiments.includes('inline-playlists')) {
let showModal = kind.toString().includes("album") || kind.toString().includes("playlist")
@ -1347,8 +1358,11 @@ const app = new Vue({
prevButton() {
if (!app.prevButtonBackIndicator && app.mk.nowPlayingItem && app.mk.currentPlaybackTime > 2) {
app.prevButtonBackIndicator = true;
try{clearTimeout(app.pauseButtonTimer)} catch (e){ }
app.mk.seekToTime(0);
app.pauseButtonTimer = setTimeout(() => {app.prevButtonBackIndicator = false},3000);
} else {
try{clearTimeout(app.pauseButtonTimer)} catch (e){ }
app.prevButtonBackIndicator = false;
app.skipToPreviousItem()
}
@ -3245,8 +3259,8 @@ const app = new Vue({
},
async getRating(item) {
let type = item.type.slice(-1) === "s" ? item.type : item.type + "s"
let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id
if (item.id.startsWith("i.")) {
let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id)
if (item.id != null && (item.id.toString()).startsWith("i.")) {
if (!type.startsWith("library-")) {
type = "library-" + type
}
@ -3262,8 +3276,8 @@ const app = new Vue({
},
love(item) {
let type = item.type.slice(-1) === "s" ? item.type : item.type + "s"
let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id
if (item.id.startsWith("i.")) {
let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id)
if (item.id != null && (item.id.toString()).startsWith("i.")) {
if (!type.startsWith("library-")) {
type = "library-" + type
}
@ -3283,8 +3297,8 @@ const app = new Vue({
},
dislike(item) {
let type = item.type.slice(-1) === "s" ? item.type : item.type + "s"
let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id
if (item.id.startsWith("i.")) {
let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id)
if (item.id != null && (item.id.toString()).startsWith("i.")) {
if (!type.startsWith("library-")) {
type = "library-" + type
}
@ -3675,9 +3689,6 @@ const app = new Vue({
closeWindow() {
ipcRenderer.send('close');
},
checkForUpdate() {
ipcRenderer.send('check-for-update')
},
darwinShare(url) {
ipcRenderer.send('share-menu', url)
},
@ -3735,6 +3746,7 @@ const app = new Vue({
}
},
skipToNextItem(){
app.prevButtonBackIndicator = false;
// app.mk.skipToNextItem() is buggy somehow so use this
if (this.mk.queue.nextPlayableItemIndex != -1 && this.mk.queue.nextPlayableItemIndex != null)
this.mk.changeToMediaAtIndex(this.mk.queue.nextPlayableItemIndex);
@ -3743,6 +3755,10 @@ const app = new Vue({
// app.mk.skipToPreviousItem() is buggy somehow so use this
if (this.mk.queue.previousPlayableItemIndex != -1 && this.mk.queue.previousPlayableItemIndex != null)
this.mk.changeToMediaAtIndex(this.mk.queue.previousPlayableItemIndex);
},
mediaKeyFixes(){
navigator.mediaSession.setActionHandler('previoustrack', function() { app.prevButton() });
navigator.mediaSession.setActionHandler('nexttrack', function() { app.skipToNextItem() });
}
}
})
@ -3852,7 +3868,7 @@ function fallbackinitMusicKit() {
},
sourceType: 24,
suppressErrorDialog: true
});
})
setTimeout(() => {
app.init()
}, 1000)

View file

@ -37,7 +37,7 @@
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
white-space: break-spaces;
}
.repo-url {
@ -948,7 +948,6 @@
object-fit: cover;
}
}
.top-genres-container {
.genre-name {

View file

@ -171,7 +171,12 @@
<remote-pair></remote-pair>
</template>
</transition>
<!-- Audio Labs -->
<transition name="wpfade">
<template v-if="page == 'audiolabs'">
<audiolabs-page></audiolabs-page>
</template>
</transition>
<!-- Replay -->
<transition name="wpfade">
<template v-if="page == 'replay'">

View file

@ -57,7 +57,7 @@
v-if="mk.nowPlayingItem['attributes']['contentRating'] == 'explicit'"
style="display: inline-block"></div>
</div>
<div class="audio-type ppe-icon" v-if="cfg.advanced.ciderPPE === true"></div>
<div class="audio-type ppe-icon" v-if="cfg.audio.maikiwiAudio.ciderPPE === true"></div>
<div class="song-artist-album">
<div class="song-artist-album-content"
:class="[isElementOverflowing('#app-main > .app-chrome .app-chrome-item > .app-playback-controls > div >.song-artist-album > .song-artist-album-content') ? 'marquee' : '']"

View file

@ -22,6 +22,11 @@
<div class="icon"><%- include("../svg/speaker.svg") %></div>
<div class="name">{{app.getLz('term.audioControls')}}</div>
</button>
<button class="playlist-item"
@click="$root.appRoute('audiolabs')" style="width:100%;">
<div class="icon"><%- include("../svg/speaker.svg") %></div>
<div class="name">Audio Labs</div>
</button>
</div>
</div>
</div>
@ -44,7 +49,7 @@
app.modals.audioSettings = false
},
openSpatialAudio() {
if(app.cfg.audio.spatial) {
if(app.cfg.audio.spatial === true && app.cfg.audio.maikiwiAudio.spatial === false) {
app.modals.spatialProperties = true
app.modals.audioSettings = false
} else {

View file

@ -147,11 +147,11 @@
'vibrantBass': 0,
'userGenerated': false
}, {
'preset': 'boostBrightness',
'name': 'Boost Brightness',
'frequencies': [32, 63, 125, 250, 466, 1000, 2000, 4000, 8000, 20000],
'gain': [0, 0, 0, 0, -2, 0, 0, 0, 0, 10],
'Q': [1, 1, 1, 1, 0.6, 1, 1, 1, 1, 0.1],
'preset': 'boostAiriness',
'name': 'Boost Airiness',
'frequencies': [1169, 1733, 5962, 8688, 14125, 18628, 18628, 19000, 19500, 20000],
'gain': [-1.41, 0.25, 3.33, 0.22, -0.53, 0.2, 3.64, 0, 0, 0],
'Q': [0.405, 2.102, 0.025, 2.5, 7.071, 1.768, 1.146, 1, 1, 1],
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
@ -201,16 +201,6 @@
'vibrantBass': 0,
'userGenerated': false
},
{
'preset': 'bassBoostGentle',
'name': 'Gentle Bass Boost',
'frequencies': [45.53,88.06,116.18,161.3,247.05,295.6,365.79,495.13,716.85,960.76],
'gain': [-0.36,4.07,-1.3,1.92,0.77,-0.53,-1.33,0.44,0.46,-0.5],
'Q': [1.768,0.625,5,8.409,10,16.82,5.946,7.071,20,10],
'mix': 1,
'vibrantBass': 0,
'userGenerated': false
},
{
'preset': 'bassBoostSurgical',
'name': 'Surgical Bass Boost',
@ -313,11 +303,11 @@
app.resetState()
},
changeVibrantBass() {
app.cfg.audio.vibrantBass.multiplier = app.cfg.audio.equalizer.vibrantBass / 10
app.cfg.audio.maikiwiAudio.vibrantBass.multiplier = app.cfg.audio.equalizer.vibrantBass / 10
CiderAudio.hierarchical_loading();
if (app.cfg.audio.equalizer.vibrantBass != 0) {
for (var i = 0; i < 21; i++) {
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = app.cfg.audio.vibrantBass.gain[i] * (app.cfg.audio.equalizer.vibrantBass / 10);
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = app.cfg.audio.maikiwiAudio.vibrantBass.gain[i] * (app.cfg.audio.equalizer.vibrantBass / 10);
}}
},
changeMix() {

View file

@ -474,7 +474,7 @@
menus.normal.headerItems.find(x => x.id == 'dislike').hidden = true
}
} catch (err) {
console.log(err)
}
},
visibilityChanged: function (isVisible, entry) {

View file

@ -0,0 +1,36 @@
<script type="text/x-template" id="audiolabs-page">
<div class="content-inner settings-page">
<div class="md-option-container">
<div class="md-option-header">
<span>Audio Labs</span>
</div>
<div class="settings-option-body">
<div class="md-option-line">
<div class="md-option-segment">
Option
</div>
<div class="md-option-segment md-option-segment_auto">
<input type="checkbox" switch/>
</div>
</div>
</div>
</div>
</div>
</script>
<script>
Vue.component('audiolabs-page', {
template: "#audiolabs-page",
props: [],
data: function () {
return {
}
},
mounted: function () {
},
methods: {
}})
</script>

View file

@ -78,24 +78,49 @@
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPE.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.advanced.ciderPPE" :disabled="app.cfg.audio.spatial === true" v-on:change="CiderAudio.hierarchical_loading();" switch/>
<input type="checkbox" v-model="app.cfg.audio.maikiwiAudio.ciderPPE" v-on:change="CiderAudio.hierarchical_loading();" switch/>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext && app.cfg.advanced.ciderPPE === true">
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext && app.cfg.audio.maikiwiAudio.ciderPPE === true">
<div class="md-option-segment">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength')}}
<br>
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<button class="md-btn" :disabled="app.cfg.audio.ciderPPE_value === 0.5" v-model="app.cfg.audio.ciderPPE_value" onclick="app.cfg.audio.ciderPPE_value = 0.5; CiderAudio.hierarchical_loading();">
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.5" v-model="app.cfg.audio.maikiwiAudio.ciderPPE_value" onclick="app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.5; CiderAudio.hierarchical_loading();">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard')}}
</button>
<button class="md-btn" style="margin-top: 5px;" :disabled="app.cfg.audio.ciderPPE_value === 0.55" v-model="app.cfg.audio.ciderPPE_value" onclick="app.cfg.audio.ciderPPE_value = 0.55; CiderAudio.hierarchical_loading();">
<button class="md-btn" style="margin-top: 5px;" :disabled="app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.55" v-model="app.cfg.audio.maikiwiAudio.ciderPPE_value" onclick="app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.55; CiderAudio.hierarchical_loading();">
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive')}}
</button>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext">
<div class="md-option-segment">
Analog Warmth
<br>
<small>Simulates the analog warmth modelled after the Korg Nutube 6P1</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.audio.maikiwiAudio.analogWarmth" v-on:change="CiderAudio.hierarchical_loading();" switch/>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext && app.cfg.audio.maikiwiAudio.analogWarmth === true">
<div class="md-option-segment">
Analog Warmth Intensity
<br>
<small>Changes the intensity of the Analog Warmth Module processing.</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.analogWarmth_value === 1.25" v-model="app.cfg.audio.maikiwiAudio.analogWarmth_value" onclick="app.cfg.maikiwiAudio.audio.analogWarmth_value = 1.25; CiderAudio.hierarchical_loading();">
Smooth
</button>
<button class="md-btn" :disabled="app.cfg.audio.maikiwiAudio.analogWarmth_value === 1.75" v-model="app.cfg.audio.maikiwiAudio.analogWarmth_value" onclick="app.cfg.maikiwiAudio.audio.analogWarmth_value = 1.75; CiderAudio.hierarchical_loading();">
Warm
</button>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext">
<div class="md-option-segment">
{{$root.getLz('term.equalizer')}}
@ -124,7 +149,17 @@
<small>{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description')}}</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.audio.spatial" :disabled="app.cfg.advanced.ciderPPE === true" v-on:change="toggleSpatial" switch/>
<input type="checkbox" v-model="app.cfg.audio.spatial" v-on:change="toggleSpatial" switch/>
</div>
</div>
<div class="md-option-line" v-show="app.cfg.advanced.AudioContext">
<div class="md-option-segment">
Maikiwi Spatialization
<br>
<small>Pre-tuned Spatializing Effect by Maikiwi, disables the customizable settings of Audio Spatialization. Spatialization must be enabled as a prerequisite.</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.audio.maikiwiAudio.spatial" :disabled="app.cfg.audio.spatial === false" v-on:change="toggleSpatial" switch/>
</div>
</div>
</div>
@ -655,6 +690,18 @@
</div>
<div class="settings-option-body">
<div class="md-option-line">
<div class="md-option-segment">
Unknown Sources
<br>
<small>Allow installation of plugins from repos other than the Cider Plugin Repository</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.advanced.experiments.includes('unknown-sources')" @click="app.cfg.advanced.experiments.includes('unknown-sources') ? removeExperiment('unknown-sources') : addExperiment('unknown-sources')" switch/>
</div>
</div>
<div class="md-option-line">
<div class="md-option-segment">
{{$root.getLz('settings.option.experimental.compactUI')}}
@ -846,9 +893,10 @@
}
if (app.cfg.audio.spatial) {
CiderAudio.spatialOn()
CiderAudio.hierarchical_loading();
}
} else {
app.cfg.advanced.ciderPPE = false;
app.cfg.audio.maikiwiAudio.ciderPPE = false;
CiderAudio.off();
}
},
@ -861,13 +909,16 @@
},
toggleSpatial: function () {
if (app.cfg.audio.spatial) {
if (!app.cfg.advanced.ciderPPE) {
CiderAudio.spatialOn()
}
else {
if (app.cfg.audio.maikiwiAudio.ciderPPE === true && app.cfg.audio.maikiwiAudio.spatial === false) {
CiderAudio.spatialOff()
app.cfg.audio.spatial = false;
notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility'))
try {
CiderAudio.hierarchical_loading();} catch(e) {}
}
else {
CiderAudio.spatialOn()
CiderAudio.hierarchical_loading();
}
} else {
CiderAudio.spatialOff()