This commit is contained in:
yazninja 2022-08-21 21:41:00 +08:00
commit c9268105f0
17 changed files with 257 additions and 327 deletions

View file

@ -48,6 +48,9 @@ jobs:
- name: Setup Environment - name: Setup Environment
run: brew install automake #libtool autoconf run: brew install automake #libtool autoconf
- name: Clear node_airtunes2 cache
run: sudo rm -rf /Users/runner/Library/Caches/Yarn/v6/.tmp/cf5bc2de2629636ca224995234b8eaa1 || true
- name: Install and Configure Node Modules - name: Install and Configure Node Modules
run: | run: |
yarn install yarn install

View file

@ -30,7 +30,10 @@
[![Get it from the Microsoft Store](https://img.shields.io/badge/Get_It_From_The_Microsoft_Store-100000?style=for-the-badge&logo=microsoft)](https://www.microsoft.com/store/apps/9P21XJ9D9G66) [![Get it from the Microsoft Store](https://img.shields.io/badge/Get_It_From_The_Microsoft_Store-100000?style=for-the-badge&logo=microsoft)](https://www.microsoft.com/store/apps/9P21XJ9D9G66)
[![Get it from Windows Package Manager](https://custom-icon-badges.herokuapp.com/badge/Get_It_via_Winget_(Nightly)_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider) [![Get it from Windows Package Manager](https://custom-icon-badges.herokuapp.com/badge/Get_It_via_Winget_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider)
[![Get it from Windows Package Manager](https://custom-icon-badges.herokuapp.com/badge/Get_It_via_Winget_(Nightly)_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider.Nightly)
[![Get it from Chocolatey Package Manager](https://custom-icon-badges.herokuapp.com/badge/Get_It_via_Chocolatey_-100000?style=for-the-badge&logo=chocolatey)](https://community.chocolatey.org/packages/cider)
<!-- <!--
[![Get it from Windows Package Manager](https://custom-icon-badges.herokuapp.com/badge/Get_It_via_Winget_(Nightly)_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider.Nightly) [![Get it from Windows Package Manager](https://custom-icon-badges.herokuapp.com/badge/Get_It_via_Winget_(Nightly)_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider.Nightly)

View file

@ -73,7 +73,7 @@
"request": "^2.88.2", "request": "^2.88.2",
"run-script-os": "^1.1.6", "run-script-os": "^1.1.6",
"source-map-support": "^0.5.21", "source-map-support": "^0.5.21",
"ts-md5": "^1.2.11", "ts-md5": "1.2.11",
"v8-compile-cache": "^2.3.0", "v8-compile-cache": "^2.3.0",
"wallpaper": "5.0.1", "wallpaper": "5.0.1",
"ws": "^8.8.1", "ws": "^8.8.1",

View file

@ -2,7 +2,7 @@
"i18n.languageName": "Engwish (OwO)", "i18n.languageName": "Engwish (OwO)",
"i18n.languageNameEnglish": "Engwish (OwO)", "i18n.languageNameEnglish": "Engwish (OwO)",
"i18n.category": "fun", "i18n.category": "fun",
"i18n.authors": "@deerwithacurl @gamingliamstudios", "i18n.authors": "@deerwithacurl @gamingliamstudios @ctaetcsh",
"app.name": "Cidew", "app.name": "Cidew",
"date.format": "${m} ${d}, ${y}", "date.format": "${m} ${d}, ${y}",
"dialog.cancel": "Cancew", "dialog.cancel": "Cancew",
@ -62,6 +62,7 @@
"term.stop": "Stop", "term.stop": "Stop",
"term.previous": "Pwevious", "term.previous": "Pwevious",
"term.next": "Nyext", "term.next": "Nyext",
"term.skip": "Skip",
"term.shuffle": "Shuffwe", "term.shuffle": "Shuffwe",
"term.enableShuffle": "Enyabwe shuffwe", "term.enableShuffle": "Enyabwe shuffwe",
"term.disableShuffle": "Disabwe shuffwe", "term.disableShuffle": "Disabwe shuffwe",
@ -142,7 +143,7 @@
"term.amLive": "Appwe Music Wive", "term.amLive": "Appwe Music Wive",
"term.language": "Wanguage", "term.language": "Wanguage",
"term.funLanguages": "Fun", "term.funLanguages": "Fun",
"term.noLyrics": "Instwumentaw Twack / Nyo Wywics.", "term.noLyrics": ">w< Sowwy Wowwy.. N-Nyo Wywics Avaiwabwe",
"term.copyright": "Copywight", "term.copyright": "Copywight",
"term.rightsReserved": "Aww Wights Wesewved.", "term.rightsReserved": "Aww Wights Wesewved.",
"term.sponsor": "Sponsow this pwoject", "term.sponsor": "Sponsow this pwoject",

View file

@ -317,7 +317,7 @@
"menubar.options.toggledevtools": "Toggle Developer Tools", "menubar.options.toggledevtools": "Toggle Developer Tools",
"menubar.options.window": "Window", "menubar.options.window": "Window",
"menubar.options.minimize": "Minimize", "menubar.options.minimize": "Minimize",
"menubar.options.plugins": "Plu-gins Menu", "menubar.options.plugins": "Plugins Menu",
"menubar.options.controls": "Controls", "menubar.options.controls": "Controls",
"menubar.options.volumeup": "Volume Up", "menubar.options.volumeup": "Volume Up",
"menubar.options.volumedown": "Volume Down", "menubar.options.volumedown": "Volume Down",

View file

@ -2,7 +2,7 @@
"i18n.languageName": "Português (Portugal)", "i18n.languageName": "Português (Portugal)",
"i18n.languageNameEnglish": "Portuguese (Portugal)", "i18n.languageNameEnglish": "Portuguese (Portugal)",
"i18n.category": "main", "i18n.category": "main",
"i18n.authors": "@pgalhardo", "i18n.authors": "@pgalhardo @hugok79",
"app.name": "Cider", "app.name": "Cider",
"date.format": "${m} ${d}, ${y}", "date.format": "${m} ${d}, ${y}",
"dialog.cancel": "Cancelar", "dialog.cancel": "Cancelar",
@ -31,8 +31,12 @@
"term.miniplayer": "Mini-leitor", "term.miniplayer": "Mini-leitor",
"term.history": "Histórico", "term.history": "Histórico",
"term.search": "Pesquisa", "term.search": "Pesquisa",
"term.scroll": "Modo de deslocamento",
"term.scroll.infinite": "Infinito",
"term.scroll.paged": "${songsPerPage} por página",
"term.live": "AO VIVO",
"term.showSearch": "Mostrar a barra de pesquisa", "term.showSearch": "Mostrar a barra de pesquisa",
"term.hideSearch": "Esconder a barar de pesquisa", "term.hideSearch": "Ocultar a barra de pesquisa",
"term.library": "Biblioteca", "term.library": "Biblioteca",
"term.listenNow": "Ouvir agora", "term.listenNow": "Ouvir agora",
"term.browse": "Explorar", "term.browse": "Explorar",
@ -58,6 +62,7 @@
"term.stop": "Parar", "term.stop": "Parar",
"term.previous": "Anterior", "term.previous": "Anterior",
"term.next": "Seguinte", "term.next": "Seguinte",
"term.skip": "Ignorar",
"term.shuffle": "Modo aleatório", "term.shuffle": "Modo aleatório",
"term.enableShuffle": "Ativar modo aleatório", "term.enableShuffle": "Ativar modo aleatório",
"term.disableShuffle": "Desativar modo aleatório", "term.disableShuffle": "Desativar modo aleatório",
@ -136,14 +141,13 @@
"term.recentStations": "Estações recentes", "term.recentStations": "Estações recentes",
"term.personalStations": "Estações pessoais", "term.personalStations": "Estações pessoais",
"term.amLive": "Apple Music Live", "term.amLive": "Apple Music Live",
"term.live": "AO VIVO",
"term.language": "Idioma", "term.language": "Idioma",
"term.funLanguages": "Divertido", "term.funLanguages": "Divertido",
"term.noLyrics": "A carregar... / Letra não encontrada. / Instrumental.", "term.noLyrics": "Música instrumental / Sem letra.",
"term.copyright": "Copyright", "term.copyright": "Direitos de autor",
"term.rightsReserved": "Todos os direitos reservados.", "term.rightsReserved": "Todos os direitos reservados.",
"term.sponsor": "Patrocine este projecto", "term.sponsor": "Patrocine este projecto",
"term.ciderTeam": "Equipa do Cider", "term.ciderTeam": "Equipa da Cider",
"term.developer": "Programador", "term.developer": "Programador",
"term.socialTeam": "Equipa social", "term.socialTeam": "Equipa social",
"term.socials": "Redes sociais", "term.socials": "Redes sociais",
@ -181,6 +185,7 @@
"term.top": "Top", "term.top": "Top",
"term.version": "Versão", "term.version": "Versão",
"term.noVideos": "Não foram encontrados vídeos.", "term.noVideos": "Não foram encontrados vídeos.",
"term.plugins": "Plug-ins",
"term.plugin": "Plug-in", "term.plugin": "Plug-in",
"term.pluginMenu": "Menu de plug-ins", "term.pluginMenu": "Menu de plug-ins",
"term.pluginMenu.none": "Sem plug-ins interactivos", "term.pluginMenu.none": "Sem plug-ins interactivos",
@ -207,8 +212,12 @@
"term.zoomout": "Diminuir o zoom", "term.zoomout": "Diminuir o zoom",
"term.zoomreset": "Repor zoom", "term.zoomreset": "Repor zoom",
"term.fullscreen": "Ecrã inteiro", "term.fullscreen": "Ecrã inteiro",
"term.nowPlaying": "Em reprodução",
"home.syncFavorites": "Sincronizar favoritos", "home.syncFavorites": "Sincronizar favoritos",
"home.syncFavorites.gettingArtists": "A obter os artistas favoritos...", "home.syncFavorites.gettingArtists": "A obter os artistas favoritos...",
"action.favorite": "Adicionar favorito",
"action.removeFavorite": "Remover favorito",
"action.refresh": "Atualizar",
"home.title": "Início", "home.title": "Início",
"home.recentlyPlayed": "Reproduzido recentemente", "home.recentlyPlayed": "Reproduzido recentemente",
"home.recentlyAdded": "Adicionado recentemente", "home.recentlyAdded": "Adicionado recentemente",
@ -229,8 +238,6 @@
"podcast.episodes": "Episódios", "podcast.episodes": "Episódios",
"podcast.playEpisode": "Reproduzir episódio", "podcast.playEpisode": "Reproduzir episódio",
"podcast.website": "Website do Podcast", "podcast.website": "Website do Podcast",
"action.favorite": "Adicionar favorito",
"action.removeFavorite": "Remover favorito",
"action.hideLibrary": "Ocultar biblioteca", "action.hideLibrary": "Ocultar biblioteca",
"action.showLibrary": "Mostrar biblioteca", "action.showLibrary": "Mostrar biblioteca",
"action.cut": "Cortar", "action.cut": "Cortar",
@ -239,6 +246,7 @@
"action.delete": "Apagar", "action.delete": "Apagar",
"action.edit": "Editar", "action.edit": "Editar",
"action.done": "Concluído", "action.done": "Concluído",
"action.submit": "Submeter",
"action.editTracklist": "Editar lista de reprodução", "action.editTracklist": "Editar lista de reprodução",
"action.addToLibrary": "Adicionar à biblioteca", "action.addToLibrary": "Adicionar à biblioteca",
"action.addToLibrary.success": "Adicionado à biblioteca", "action.addToLibrary.success": "Adicionado à biblioteca",
@ -412,10 +420,10 @@
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonwight Softcake", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonlight Softcake",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Brown Sugar Creme Brûlée Milk",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "Clafoutis aux Cerises", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "Clafoutis aux Cerises",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "Uji Matcha Mochi", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "Uji Matcha Mochi",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Brown Sugar Creme Brûlée Milk",
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddle Warmth", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddle Warmth",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Melhora a qualidade de áudio percecionada do áudio codificado em AAC, utilizando um algoritmo de tempo real que tira partido tanto dos modelos psicoacústicos da audição humana como das características de codificação do AAC.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Melhora a qualidade de áudio percecionada do áudio codificado em AAC, utilizando um algoritmo de tempo real que tira partido tanto dos modelos psicoacústicos da audição humana como das características de codificação do AAC.",
@ -449,11 +457,6 @@
"settings.header.visual": "Aparência", "settings.header.visual": "Aparência",
"settings.header.visual.description": "Ajustar as definições visuais do Cider.", "settings.header.visual.description": "Ajustar as definições visuais do Cider.",
"settings.option.visual.windowStyle": "Estilo da janela", "settings.option.visual.windowStyle": "Estilo da janela",
"settings.option.visual.customAccentColor": "Cor de destaque personalizada",
"settings.option.visual.accentColor": "Cor de destaque",
"settings.option.visual.purplePodcastPlaybackBar": "Barra de reprodução roxa para Podcasts",
"settings.option.visual.windowColor": "Tonalidade da cor da janela",
"settings.header.visual.windowBackgroundStyle.color": "Tonalidade da cor",
"settings.option.visual.windowBackgroundStyle": "Estilo do fundo da janela", "settings.option.visual.windowBackgroundStyle": "Estilo do fundo da janela",
"settings.header.visual.windowBackgroundStyle.none": "Nenhum", "settings.header.visual.windowBackgroundStyle.none": "Nenhum",
"settings.header.visual.windowBackgroundStyle.artwork": "Grafismo", "settings.header.visual.windowBackgroundStyle.artwork": "Grafismo",
@ -483,6 +486,7 @@
"settings.prompt.visual.theme.github.URL": "Introduza o URL do tema que pretende instalar", "settings.prompt.visual.theme.github.URL": "Introduza o URL do tema que pretende instalar",
"settings.prompt.visual.theme.uninstallTheme": "Tem a certeza de que pretende desinstalar {{ theme }}?", "settings.prompt.visual.theme.uninstallTheme": "Tem a certeza de que pretende desinstalar {{ theme }}?",
"settings.option.visual.theme.checkForUpdates": "Procurar por atualizações", "settings.option.visual.theme.checkForUpdates": "Procurar por atualizações",
"settings.header.visual.styles": "Estilos",
"settings.option.visual.theme.manageStyles": "Gerir estilos", "settings.option.visual.theme.manageStyles": "Gerir estilos",
"settings.option.visual.theme.uninstall": "Desinstalar", "settings.option.visual.theme.uninstall": "Desinstalar",
"settings.option.visual.theme.viewInfo": "Ver informação", "settings.option.visual.theme.viewInfo": "Ver informação",
@ -523,8 +527,8 @@
"settings.option.connectivity.discordRPC": "Discord Rich Presence", "settings.option.connectivity.discordRPC": "Discord Rich Presence",
"settings.option.connectivity.discordRPC.clientName": "Nome do cliente", "settings.option.connectivity.discordRPC.clientName": "Nome do cliente",
"settings.option.connectivity.discordRPC.clearOnPause": "Limpar o Discord Rich Presence ao colocar em pausa", "settings.option.connectivity.discordRPC.clearOnPause": "Limpar o Discord Rich Presence ao colocar em pausa",
"settings.option.connectivity.discordRPC.hideButtons": "Esconder botões no Discord Rich Presence", "settings.option.connectivity.discordRPC.hideButtons": "Ocultar botões no Discord Rich Presence",
"settings.option.connectivity.discordRPC.hideTimestamp": "Esconder timestamp no Discord Rich Presence", "settings.option.connectivity.discordRPC.hideTimestamp": "Ocultar timestamp no Discord Rich Presence",
"settings.option.connectivity.discordRPC.detailsFormat": "Formato dos detalhes", "settings.option.connectivity.discordRPC.detailsFormat": "Formato dos detalhes",
"settings.option.connectivity.discordRPC.stateFormat": "Formato do estado", "settings.option.connectivity.discordRPC.stateFormat": "Formato do estado",
"settings.option.connectivity.discordRPC.reload": "Reiniciar o DiscordRPC", "settings.option.connectivity.discordRPC.reload": "Reiniciar o DiscordRPC",
@ -534,7 +538,13 @@
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Ativar Last.fm Now Playing", "settings.option.connectivity.lastfmScrobble.nowPlaying": "Ativar Last.fm Now Playing",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remover artistas do título da música (Last.fm)", "settings.option.connectivity.lastfmScrobble.removeFeatured": "Remover artistas do título da música (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrar música em loop (Last.fm)", "settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrar música em loop (Last.fm)",
"settings.header.debug": "Debug", "settings.option.connectivity.lastfmScrobble.filterLoop.description": "Impedir que músicas em loop sejam \"scrobbled\" ou apresentadas na lista Now Playing na Last.fm.",
"settings.option.connectivity.lastfmScrobble.filterTypes": "Filtrar tipos de ficheiro (Last.fm)",
"settings.option.connectivity.lastfmScrobble.manualToken": "Introduzir Token Last.fm manualmente",
"settings.notyf.connectivity.lastfmScrobble.connectError": "Ligação à Last.fm expirou",
"settings.notyf.connectivity.lastfmScrobble.connectSuccess": "Ligação à Last.fm bem sucedida",
"settings.notyf.connectivity.lastfmScrobble.connecting": "A estabelecer ligação com a Last.fm...",
"settings.header.debug": "Depurar",
"settings.option.debug.copy_log": "Copiar logs para a área de transferência", "settings.option.debug.copy_log": "Copiar logs para a área de transferência",
"settings.option.debug.openAppData": "Abrir pasta do Cider", "settings.option.debug.openAppData": "Abrir pasta do Cider",
"settings.header.experimental": "Experimental", "settings.header.experimental": "Experimental",
@ -545,11 +555,18 @@
"settings.option.experimental.unknownPlugin.description": "Permitir a instalação de plug-ins de outros repositórios que não o repositório de plug-ins do Cider", "settings.option.experimental.unknownPlugin.description": "Permitir a instalação de plug-ins de outros repositórios que não o repositório de plug-ins do Cider",
"settings.option.experimental.compactUI": "UI compacta", "settings.option.experimental.compactUI": "UI compacta",
"settings.option.window.close_button_hide": "Botão fechar oculta a aplicação", "settings.option.window.close_button_hide": "Botão fechar oculta a aplicação",
"settings.option.window.maxElementScale": "Escala máxima de elementos",
"settings.option.experimental.inline_playlists": "Listas de reprodução e álbuns \"inline\"", "settings.option.experimental.inline_playlists": "Listas de reprodução e álbuns \"inline\"",
"settings.option.advanced.playlistTrackMapping": "Mapeamento de músicas de listas de reprodução", "settings.option.advanced.playlistTrackMapping": "Mapeamento de músicas de listas de reprodução",
"settings.option.advanced.playlistTrackMapping.description": "Ativa uma análise profunda das listas de reprodução para determinar que músicas estão em que listas de reprodução. O tempo de construção da cache das listas de reprodução pode aumentar significativamente.", "settings.option.advanced.playlistTrackMapping.description": "Ativa uma análise profunda das listas de reprodução para determinar que músicas estão em que listas de reprodução. O tempo de construção da cache das listas de reprodução pode aumentar significativamente.",
"settings.option.visual.transparent": "Moldura transparente", "settings.option.visual.transparent": "Moldura transparente",
"settings.option.visual.transparent.description": "Necessita de suporte do tema, requer reinício", "settings.option.visual.transparent.description": "Necessita de suporte do tema, requer reinício",
"settings.option.visual.customAccentColor": "Cor de destaque personalizada",
"settings.option.visual.accentColor": "Cor de destaque",
"settings.option.visual.purplePodcastPlaybackBar": "Barra de reprodução roxa para Podcasts",
"settings.option.visual.compactArtistHeader": "Cabeçalho compacto do artista",
"settings.option.visual.windowColor": "Tonalidade da cor da janela",
"settings.header.visual.windowBackgroundStyle.color": "Tonalidade da cor",
"settings.header.advanced": "Avançado", "settings.header.advanced": "Avançado",
"settings.header.connect": "Sincronização", "settings.header.connect": "Sincronização",
"settings.option.connect.link_account": "Ativar a sincronização com o Cider Connect", "settings.option.connect.link_account": "Ativar a sincronização com o Cider Connect",
@ -565,7 +582,7 @@
"spatial.roomPositions": "Posições na sala", "spatial.roomPositions": "Posições na sala",
"spatial.setDimensions": "Definir dimensões", "spatial.setDimensions": "Definir dimensões",
"spatial.setPositions": "Definir posições", "spatial.setPositions": "Definir posições",
"spatial.up": "Acima", "spatial.up": "Em cima",
"spatial.front": "Frente", "spatial.front": "Frente",
"spatial.left": "Esquerda", "spatial.left": "Esquerda",
"spatial.right": "Direita", "spatial.right": "Direita",
@ -586,5 +603,44 @@
"share.platform.email": "Email", "share.platform.email": "Email",
"share.platform.songLink": "Copiar com song.link", "share.platform.songLink": "Copiar com song.link",
"share.platform.clipboard": "Copiar ligação", "share.platform.clipboard": "Copiar ligação",
"about.thanks": "Um grande obrigado à equipa da Cider Collective e a todos os nossos contribuidores." "about.thanks": "Um grande obrigado à equipa da Cider Collective e a todos os nossos contribuidores.",
"oobe.yes": "Sim",
"oobe.no": "Não",
"oobe.next": "Seguinte",
"oobe.previous": "Anterior",
"oobe.done": "Concluído",
"oobe.amupsell.title": "Antes de iniciar",
"oobe.amupsell.text": "O Cider requer uma subscrição ativa e paga da Apple Music\n´O Cider não funcionará com o Apple Music Voice Plan ou algumas subscrições promocionais experimentais. Se já tem uma subscrição Apple Music qualificada, clique em Seguinte para continuar.",
"oobe.amupsell.subscribeBtn": "Subscrever a Apple Music",
"oobe.amupsell.explainBtn": "Explicação",
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
"oobe.amupsell.amWebUrl": "https://beta.music.apple.com/",
"oobe.amupsell.promoExplained": "Algumas subscrições promocionais e experimentais não-EUA da Apple Music não têm acesso às API's da Apple Music Web Player necessárias para o funcionamento da Cider. Para verificar se a sua versão experimental ativa irá funcionar com o Cider, vá a <a href='{{ amWebUrl }}'>{{ amWebUrl }}</a> iniciar sessão e tente reproduzir alguma música. Se funcionar, óptimo! Está pronto a usar o Cider, no entanto, se não considerar subscrever a Apple Music aqui: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
"oobe.intro.title": "Benvindo(a) ao Cider",
"oobe.intro.subtitle": "",
"oobe.intro.text": "Vamos preparar algumas coisas para que possa usar o Cider, como gostaria. Pode sempre alterar estas definições mais tarde.",
"oobe.general.title": "Geral",
"oobe.general.subtitle": "",
"oobe.general.text": "",
"oobe.audio.title": "Áudio",
"oobe.audio.subtitle": "",
"oobe.audio.text": "O Cider dispõe de um conjunto personalizado de áudio sintonizado e desenhado que proporciona uma rica experiência áudio de alta qualidade.\nApresentando o Cider Adrenalina, Realizador de Atmosfera, e Áudio Espacializado.\nPara ativar esta funcionalidade a \"Funcionalidade de áudio avançada\" deve ser ativada.\nA ativação da funcionalidade de áudio avançada dar-lhe-á acesso a estes melhoramentos no Cider Audio Lab, encontrados nas definições da aplicação.",
"oobe.audio.advancedFunctionality": "",
"oobe.visual.title": "Aparência",
"oobe.visual.subtitle": "",
"oobe.visual.text": "",
"oobe.visual.layout.text": "O Cider apresenta duas disposições diferentes de janela.\nO Maverick é uma disposição semelhante à do iTunes com o leitor no topo da janela.\nMojave é uma nova alternativa criada pela Cider Collective.\n\nPode alterar a disposição em qualquer altura nas definições.",
"oobe.visual.suggestingThemes": "Os temas são uma óptima forma de personalizar a sua experiência. Aqui estão alguns que sugerimos: ",
"oobe.visual.suggestingThemes.subtext": "(Estes temas serão descarregados do GitHub)",
"oobe.visual.suggestingThemes.default": "Cider",
"oobe.visual.suggestingThemes.default.text": "O tema clássico Cider.",
"oobe.visual.suggestingThemes.dark": "Escuro",
"oobe.visual.suggestingThemes.dark.text": "Escuridão.",
"oobe.visual.suggestingThemes.community1": "Groovy",
"oobe.visual.suggestingThemes.community1.text": "Um tema de influência WinUI",
"oobe.visual.suggestingThemes.community2": "iTheme",
"oobe.visual.suggestingThemes.community2.text": "A disposição clássica big fruit.",
"oobe.visual.suggestingThemes.community3": "Dracula",
"oobe.visual.suggestingThemes.community3.text": "O esquema de cores icónico Dracula.",
"oobe.amsignin.title": ""
} }

View file

@ -1444,15 +1444,13 @@ export class BrowserWindow {
if ((process.platform === "darwin" || utils.getStoreValue("general.close_button_hide")) && !isQuitting) { if ((process.platform === "darwin" || utils.getStoreValue("general.close_button_hide")) && !isQuitting) {
e.preventDefault(); e.preventDefault();
win.hide(); win.hide();
} } else {
}); win.webContents.executeJavaScript(`
win.on("closed", (_: any) => {
win.webContents.executeJavaScript(`
window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem)); window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem));
window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime)); window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime));
window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue._unplayedQueueItems)); window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue._unplayedQueueItems));
ipcRenderer.send('stopGCast','');`); ipcRenderer.send('stopGCast','');`);
}
}); });
app.on("before-quit", () => { app.on("before-quit", () => {

View file

@ -87,29 +87,43 @@ export default class RAOP {
private ondeviceup(name: any, host: any, port: any, addresses: any, text: any, airplay2: any = null) { private ondeviceup(name: any, host: any, port: any, addresses: any, text: any, airplay2: any = null) {
// console.log(this.castDevices.findIndex((item: any) => {return (item.name == host.replace(".local","") && item.port == port )})) // console.log(this.castDevices.findIndex((item: any) => {return (item.name == host.replace(".local","") && item.port == port )}))
let shown_name = (host ?? "Unknown").replace(".local", "");
try {
let model = text.filter((u: any) => String(u).startsWith("model="));
let manufacturer = text.filter((u: any) => String(u).startsWith("manufacturer="));
let name1 = text.filter((u: any) => String(u).startsWith("name="));
if (name1.length > 0) {
shown_name = name1[0].split("=")[1];
} else if (manufacturer.length > 0) {
shown_name = (manufacturer.length > 0 ? manufacturer[0].substring(13) : "") + " " + (model.length > 0 ? model[0].substring(6) : "");
shown_name = shown_name.trim().length > 1 ? shown_name : (host ?? "Unknown").replace(".local", "");
}
} catch (e) {}
let host_name = addresses != null && typeof addresses == "object" && addresses.length > 0 ? addresses[0] : typeof addresses == "string" ? addresses : "";
if ( if (
this.castDevices.findIndex((item: any) => { this.castDevices.findIndex((item: any) => {
return item != null && item.name == (host ?? "Unknown").replace(".local", "") && item.port == port && item.host == (addresses ? addresses[0] : ""); return item != null && item.name == shown_name && item.port == port && item.host == host_name && item.host != "Unknown";
}) == -1 }) == -1
) { ) {
this.castDevices.push({ this.castDevices.push({
name: (host ?? "Unknown").replace(".local", ""), name: shown_name,
host: addresses ? addresses[0] : "", host: host_name,
port: port, port: port,
addresses: addresses, addresses: addresses,
txt: text, txt: text,
airplay2: airplay2, airplay2: airplay2,
}); });
if (this.devices.indexOf(host) === -1) { // if (this.devices.indexOf(host_name) === -1) {
this.devices.push(host); // this.devices.push(host_name);
} // }
if (name) { if (shown_name) {
this._win.webContents.executeJavaScript(`console.log('deviceFound','ip: ${host} name:${name}')`).catch((err: any) => console.error(err)); this._win.webContents.executeJavaScript(`console.log('deviceFound','ip: ${host_name} name:${shown_name}')`).catch((err: any) => console.error(err));
console.log("deviceFound", host, name); console.log("deviceFound", host_name, shown_name);
} }
} else { } else {
this._win.webContents.executeJavaScript(`console.log('deviceFound (added)','ip: ${host} name:${name}')`).catch((err: any) => console.error(err)); this._win.webContents.executeJavaScript(`console.log('deviceFound (added)','ip: ${host_name} name:${shown_name}')`).catch((err: any) => console.error(err));
console.log("deviceFound (added)", host, name); console.log("deviceFound (added)", host_name, shown_name);
} }
} }
@ -142,7 +156,7 @@ export default class RAOP {
}); });
electron.ipcMain.on("getAirplayDevice", (event, data) => { electron.ipcMain.on("getAirplayDevice", (event, data) => {
this.castDevices = []; // this.castDevices = [];
console.log("scan for airplay devices"); console.log("scan for airplay devices");
const browser = this.mdns.createBrowser(this.mdns.tcp("raop")); const browser = this.mdns.createBrowser(this.mdns.tcp("raop"));

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="48px" height="48px"><path d="M21.74 19.71c-.53.06-2.08-2.47-2.08-2.47 0 1.47-.75 3.38-2.37 4.77-6.21-1.8-10.58 0-10.58 0-1.62-1.39-2.37-3.3-2.37-4.77 0 0-1.55 2.53-2.08 2.47-.25-.03-.58-1.39.43-4.67l.08-.28c.25-.76.52-1.51.72-1.99l.13-.33.94-2.36c-.01-.03-.02-.56-.02-.84C4.54 4.63 6.7 0 12 0s7.46 4.63 7.46 9.24c0 .27-.01.8-.01.84l.99 2.52.07.17-.06-.17-.03-.1c.01.03.03.07.04.1.27.71.53 1.44.85 2.44 1.01 3.28.68 4.64.43 4.67z"/><path fill="#FFF" d="M14.03 3c.72.03 1.27.91 1.23 1.96-.04 1.06-.65 1.88-1.37 1.85-.72-.03-1.27-.91-1.23-1.96.03-1.06.65-1.88 1.37-1.85zM9.97 3c.72-.03 1.34.79 1.37 1.85.04 1.05-.51 1.93-1.23 1.96-.72.03-1.33-.79-1.37-1.85C8.7 3.91 9.25 3.03 9.97 3z"/><path fill="#FFCA28" d="M7.46 8.29c.19-.43 2.13-.9 4.53-.9h.02c2.4 0 4.34.48 4.53.9.01.02.01.04.01.07 0 .03-.01.05-.02.08-.17.24-2.32 1.41-4.52 1.41h-.02c-2.2 0-4.35-1.17-4.51-1.41a.114.114 0 0 1-.03-.08c0-.03 0-.05.01-.07z"/><path d="M17.79 16.92c-.22 3.67-2.38 5.98-5.72 6.02h-.14c-3.34-.04-5.5-2.35-5.72-6.02-.08-1.35 0-2.5.15-3.43.31.06.63.12.95.17v3.51s1.64.33 3.28.1v-3.22c.49.02.96.04 1.4.03h.02c.27 0 .55 0 .83-.01h.02c1.48-.05 3.14-.26 4.76-.58h.02c.15.93.23 2.08.15 3.43zM7.463 8.293v.001zM10.494 5.804c.31-.041.537-.409.503-.825s-.311-.72-.623-.679c-.31.04-.536.409-.503.824.033.417.312.72.623.68zm3.963-.648c.077.037.219.042.286-.146.035-.095.025-.165-.009-.214-.023-.033-.132-.118-.368-.176-.896-.22-1.329.384-1.392.499-.04.072-.012.176.056.227.067.051.138.037.177-.006.575-.628 1.199-.208 1.25-.184z"/><path fill="#D32F2F" d="M19.45 10.08c-9.02 1.99-14.89 0-14.89 0l-.94 2.36c1.16.78 2.74 1.05 2.74 1.05.31.06.63.12.95.17v3.51s1.64.33 3.28.1v-3.22c.49.02.96.04 1.4.03h.02c.27 0 .55 0 .83-.01H12.96c1.69.02 3.31-.24 4.66-.58h.02c1.23-.31 2.22-.66 2.8-.89h.02l-1.01-2.52z"/><path fill="#FFCA28" d="M19.42 23.62c-.34.58-5.83.37-7.42.19-1.58.18-7.07.39-7.41-.19-.08-.13-.14-.46.29-.78.48-.35 1.23-.64 1.83-.83 0 0 4.37-1.8 10.58 0 .61.19 1.35.48 1.83.83.43.32.37.65.3.78z"/><path fill="#FFF" d="M17.79 16.92c-.22 3.67-2.38 5.98-5.72 6.02h-.14c-3.34-.04-5.5-2.35-5.72-6.02-.08-1.35 0-2.5.15-3.43.31.06.63.12.95.17v3.51s1.64.33 3.28.1v-3.22c.49.02.96.04 1.4.03h.02c.27 0 .55 0 .83-.01H12.96c1.69.02 3.31-.24 4.66-.58h.02c.15.93.23 2.08.15 3.43z"/></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -426,8 +426,9 @@ const CiderAudio = {
let dataLength = audioRawData[0]?.length ?? 0; let dataLength = audioRawData[0]?.length ?? 0;
for (let idx=0; idx<dataLength; idx++) { for (let idx=0; idx<dataLength; idx++) {
for (let channel=0; channel < numberOfChannels; channel++) { for (let channel=0; channel < numberOfChannels; channel++) {
try {
let value = audioRawData[channel][idx]; let value = audioRawData[channel][idx];
this._buffers[channel][this._bytesWritten] = value; this._buffers[channel][this._bytesWritten] = value;} catch(e){}
} }
this._bytesWritten += 1; this._bytesWritten += 1;
} }
@ -967,28 +968,29 @@ const CiderAudio = {
return; return;
} // do nothing if there's no processing lmao } // do nothing if there's no processing lmao
app.cfg.audio.maikiwiAudio.staticOptimizer.lock = true; // Lock CiderAudio from performing hierarchical loading. CiderAudioRenderer.init(() => console.log("CARenderer Called back"));
CiderAudioRenderer.init(); app.cfg.audio.maikiwiAudio.staticOptimizer.lock = true; // Lock CiderAudio from performing hierarchical loading.
if (MusicKit.getInstance().isPlaying) { if (MusicKit.getInstance().isPlaying) {
MusicKit.getInstance().pause(); // Pause first MusicKit.getInstance().pause(); // Pause first
} }
const res = CiderAudioRenderer.hierarchical_optimizer();
CiderAudioRenderer.off(); // Clean up IMMEDIATELY CiderAudioRenderer.off(); // Clean up IMMEDIATELY
CiderAudio.audioNodes.optimizedNode = CiderAudio.context.createConvolver(); CiderAudio.audioNodes.optimizedNode = CiderAudio.context.createConvolver();
CiderAudio.audioNodes.optimizedNode.normalize = false; CiderAudio.audioNodes.optimizedNode.normalize = false;
CiderAudio.audioNodes.optimizedNode.buffer = res; // Load the sucker up const res = CiderAudioRenderer.hierarchical_optimizer().then((res) => {
CiderAudio.audioNodes.optimizedNode.buffer = res;
});
// Load the sucker up
CiderAudio.hierarchical_unloading(); CiderAudio.hierarchical_unloading();
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.optimizedNode); CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.optimizedNode);
CiderAudio.audioNodes.optimizedNode.connect(CiderAudio.context.destination); CiderAudio.audioNodes.optimizedNode.connect(CiderAudio.context.destination);
console.debug("[Cider][Audio]\n" + [...configMap.entries()] + "\n lastNode: " + lastNode);
console.debug("[Cider][Audio] Finished hierarchical loading + Optimizing"); console.debug("[Cider][Audio] Finished hierarchical loading + Optimizing");
if (MusicKit.getInstance().nowPlayingItem != null) { if (MusicKit.getInstance().nowPlayingItem != null) {

View file

@ -30,7 +30,11 @@ const CiderAudioRenderer = {
}; };
} catch (e) {} } catch (e) {}
}, },
init: function () { init: function (
cb = function () {
console.log("CARenderer init");
}
) {
CiderAudioRenderer.context = new OfflineAudioContext({ CiderAudioRenderer.context = new OfflineAudioContext({
numberOfChannels: 2, numberOfChannels: 2,
length: 96000 * 8, length: 96000 * 8,
@ -42,6 +46,7 @@ const CiderAudioRenderer = {
CiderAudioRenderer.audioNodes.intelliGainComp.gain.value = 1; CiderAudioRenderer.audioNodes.intelliGainComp.gain.value = 1;
CiderAudioRenderer.audioNodes.intelliGainComp.connect(CiderAudioRenderer.audioNodes.gainNode); CiderAudioRenderer.audioNodes.intelliGainComp.connect(CiderAudioRenderer.audioNodes.gainNode);
CiderAudioRenderer.hierarchical_loading(); CiderAudioRenderer.hierarchical_loading();
cb();
}, },
optimizerProfile: [ optimizerProfile: [
{ {
@ -52,165 +57,17 @@ const CiderAudioRenderer = {
container: "WAV", container: "WAV",
}, },
], ],
spatialProfiles: [
{
id: "maikiwi",
file: "./cideraudio/impulses/CiderSpatial_Maikiwi.wav",
name: "Maikiwi",
description: "",
gainComp: "1.044",
},
{
id: "maikiwiplus",
file: "./cideraudio/impulses/CiderSpatial_MaikiwiPlus.wav",
name: "Maikiwi+",
description: "",
gainComp: "1.044",
},
{
id: "71_420maikiwi",
file: "./cideraudio/impulses/CiderSpatial_v71.420_Maikiwi.wav",
name: "Soundstage",
description: "",
gainComp: "1.3963683610559376",
},
{
id: "70_422maikiwi",
file: "./cideraudio/impulses/CiderSpatial_v70.422_Maikiwi.wav",
name: "Separation",
description: "",
gainComp: "1.30767553892022",
},
{
id: "standard",
file: "./cideraudio/impulses/CiderSpatial_Natural.wav",
name: "Minimal",
description: "",
gainComp: "1.044",
},
{
id: "standardplus",
file: "./cideraudio/impulses/CiderSpatial_Natural+.wav",
name: "Minimal+",
description: "",
gainComp: "1.044",
},
{
id: "diffused",
file: "./cideraudio/impulses/CiderSpatial_Diffuse.wav",
name: "Diffused",
description: "",
gainComp: "1.044",
},
{
id: "BPLK",
file: "./cideraudio/impulses/CiderSpatial_BPLK.wav",
name: "BPLK",
description: "",
gainComp: "1.044",
},
{
id: "HW2K",
file: "./cideraudio/impulses/CiderSpatial_HW2K.wav",
name: "HW2K",
description: "",
gainComp: "1.044",
},
{
id: "live",
file: "./cideraudio/impulses/CiderSpatial_LIVE_2.wav",
name: "live",
description: "",
gainComp: "1.2647363474711515",
},
],
atmosphereRealizerProfiles: [
{
id: "NATURAL_STANDARD",
file: "./cideraudio/impulses/AtmosphereRealizer_NaturalStandard.wav",
name: "ほうじ茶チーズクリーマティー",
description: "",
},
{
id: "NATURAL_PLUS",
file: "./cideraudio/impulses/AtmosphereRealizer_Natural+.wav",
name: "玄米茶タピオカミルクティー",
description: "",
},
{
id: "E68_1",
file: "./cideraudio/impulses/AtmosphereRealizer_E68_1.5.wav",
name: "岩塩クリームチーズティー",
description: "Light",
},
{
id: "E68_2",
file: "./cideraudio/impulses/AtmosphereRealizer_E68_2.2.wav",
name: "抹茶ミルクティー",
description: "Dark",
},
{
id: "BSCBM",
file: "./cideraudio/impulses/AtmosphereRealizer_BSCBM.wav",
name: "BSCBM",
description: "BSCBM",
},
{
id: "CUDDLE",
file: "./cideraudio/impulses/AtmosphereRealizer_Cuddle.wav",
name: "CUDDLE",
description: "CUDDLE",
},
{
id: "E168_1",
file: "./cideraudio/impulses/AtmosphereRealizer_E168_1.2.wav",
name: "春毫ジャスミンマキアート",
description: "Natural Air",
},
{
id: "Z3600",
file: "./cideraudio/impulses/AtmosphereRealizer_Z3600.wav",
name: "ロイヤルミルクティー",
description: "3600",
},
{
id: "Z8500A",
file: "./cideraudio/impulses/AtmosphereRealizer_Z8500_A.wav",
name: "ムーンライトソフトケーキ",
description: "8500",
},
{
id: "Z8500B",
file: "./cideraudio/impulses/AtmosphereRealizer_Z8500_B.wav",
name: "Clafoutis aux Cerises",
description: "8500",
},
{
id: "Z8500C",
file: "./cideraudio/impulses/AtmosphereRealizer_Z8500_C.wav",
name: "宇治抹茶だいふく",
description: "8500",
},
],
opportunisticCorrectionProfiles: [
{
id: "CHU",
file: "./cideraudio/impulses/MoondropCHU_Cider.wav",
name: "Moondrop CHU Specific",
description: "",
},
],
spatial_ninf: function () { spatial_ninf: function () {
CiderAudioRenderer.audioNodes.spatialNode = null; CiderAudioRenderer.audioNodes.spatialNode = null;
CiderAudioRenderer.audioNodes.spatialNode = CiderAudioRenderer.context.createConvolver(); CiderAudioRenderer.audioNodes.spatialNode = CiderAudioRenderer.context.createConvolver();
CiderAudioRenderer.audioNodes.spatialNode.normalize = false; CiderAudioRenderer.audioNodes.spatialNode.normalize = false;
let spatialProfile = CiderAudioRenderer.spatialProfiles.find(function (profile) { let spatialProfile = CiderAudio.spatialProfiles.find(function (profile) {
return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile; return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile;
}); });
if (spatialProfile === undefined) { if (spatialProfile === undefined) {
spatialProfile = CiderAudioRenderer.spatialProfiles[0]; spatialProfile = CiderAudio.spatialProfiles[0];
} }
fetch(spatialProfile.file).then(async (impulseData) => { fetch(spatialProfile.file).then(async (impulseData) => {
let bufferedImpulse = await impulseData.arrayBuffer(); let bufferedImpulse = await impulseData.arrayBuffer();
@ -223,7 +80,7 @@ const CiderAudioRenderer = {
spatialOff: function () { spatialOff: function () {
CiderAudioRenderer.hierarchical_loading(); CiderAudioRenderer.hierarchical_loading();
}, },
intelliGainComp_n0_0: function () { intelliGainComp_n0_0: async function () {
let filters = []; let filters = [];
const precisionHz = 12; const precisionHz = 12;
// Biquad calculation // Biquad calculation
@ -250,18 +107,16 @@ const CiderAudioRenderer = {
filterlessGain = filterlessGain * 1.096478196143185; filterlessGain = filterlessGain * 1.096478196143185;
} }
if (app.cfg.audio.maikiwiAudio.spatial == true) { if (app.cfg.audio.maikiwiAudio.spatial == true) {
let spatialProfile = CiderAudioRenderer.spatialProfiles.find(function (profile) { let spatialProfile = CiderAudio.spatialProfiles.find(function (profile) {
return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile; return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile;
}); });
if (spatialProfile === undefined) { if (spatialProfile === undefined) {
spatialProfile = CiderAudioRenderer.spatialProfiles[0]; spatialProfile = CiderAudio.spatialProfiles[0];
} }
filterlessGain = filterlessGain * spatialProfile.gainComp; filterlessGain = filterlessGain * spatialProfile.gainComp;
} }
filterlessGain = Math.pow(10, (-1 * (20 * Math.log10(filterlessGain))) / 20).toFixed(4); filterlessGain = Math.pow(10, (-1 * (20 * Math.log10(filterlessGain))) / 20).toFixed(4);
filterlessGain > 1.0 filterlessGain > 1.0 ? (CiderAudioRenderer.audioNodes.intelliGainComp.gain.value = 1) : (CiderAudioRenderer.audioNodes.intelliGainComp.gain.value = filterlessGain);
? CiderAudioRenderer.audioNodes.intelliGainComp.gain.exponentialRampToValueAtTime(1.0, CiderAudioRenderer.context.currentTime + 0.3)
: CiderAudioRenderer.audioNodes.intelliGainComp.gain.exponentialRampToValueAtTime(filterlessGain, CiderAudioRenderer.context.currentTime + 0.3);
console.debug(`[Cider][Audio] IntelliGainComp: ${filterlessGain > 1.0 ? 0 : (20 * Math.log10(filterlessGain)).toFixed(2)} dB (${filterlessGain > 1.0 ? 1 : filterlessGain})`); console.debug(`[Cider][Audio] IntelliGainComp: ${filterlessGain > 1.0 ? 0 : (20 * Math.log10(filterlessGain)).toFixed(2)} dB (${filterlessGain > 1.0 ? 1 : filterlessGain})`);
return; return;
} }
@ -307,11 +162,11 @@ const CiderAudioRenderer = {
maxGain = maxGain * 1.096478196143185; maxGain = maxGain * 1.096478196143185;
} }
if (app.cfg.audio.maikiwiAudio.spatial == true) { if (app.cfg.audio.maikiwiAudio.spatial == true) {
let spatialProfile = CiderAudioRenderer.spatialProfiles.find(function (profile) { let spatialProfile = CiderAudio.spatialProfiles.find(function (profile) {
return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile; return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile;
}); });
if (spatialProfile === undefined) { if (spatialProfile === undefined) {
spatialProfile = CiderAudioRenderer.spatialProfiles[0]; spatialProfile = CiderAudio.spatialProfiles[0];
} }
maxGain = maxGain * spatialProfile.gainComp; maxGain = maxGain * spatialProfile.gainComp;
} }
@ -325,12 +180,12 @@ const CiderAudioRenderer = {
if (status === true) { if (status === true) {
CiderAudioRenderer.audioNodes.atmosphereRealizer2 = CiderAudioRenderer.context.createConvolver(); CiderAudioRenderer.audioNodes.atmosphereRealizer2 = CiderAudioRenderer.context.createConvolver();
CiderAudioRenderer.audioNodes.atmosphereRealizer2.normalize = false; CiderAudioRenderer.audioNodes.atmosphereRealizer2.normalize = false;
let atmosphereRealizerProfile = CiderAudioRenderer.atmosphereRealizerProfiles.find(function (profile) { let atmosphereRealizerProfile = CiderAudio.atmosphereRealizerProfiles.find(function (profile) {
return profile.id === app.cfg.audio.maikiwiAudio.atmosphereRealizer2_value; return profile.id === app.cfg.audio.maikiwiAudio.atmosphereRealizer2_value;
}); });
if (atmosphereRealizerProfile === undefined) { if (atmosphereRealizerProfile === undefined) {
atmosphereRealizerProfile = CiderAudioRenderer.atmosphereRealizerProfiles[0]; atmosphereRealizerProfile = CiderAudio.atmosphereRealizerProfiles[0];
} }
fetch(atmosphereRealizerProfile.file).then(async (impulseData) => { fetch(atmosphereRealizerProfile.file).then(async (impulseData) => {
let bufferedImpulse = await impulseData.arrayBuffer(); let bufferedImpulse = await impulseData.arrayBuffer();
@ -393,12 +248,12 @@ const CiderAudioRenderer = {
if (status === true) { if (status === true) {
CiderAudioRenderer.audioNodes.atmosphereRealizer1 = CiderAudioRenderer.context.createConvolver(); CiderAudioRenderer.audioNodes.atmosphereRealizer1 = CiderAudioRenderer.context.createConvolver();
CiderAudioRenderer.audioNodes.atmosphereRealizer1.normalize = false; CiderAudioRenderer.audioNodes.atmosphereRealizer1.normalize = false;
let atmosphereRealizerProfile = CiderAudioRenderer.atmosphereRealizerProfiles.find(function (profile) { let atmosphereRealizerProfile = CiderAudio.atmosphereRealizerProfiles.find(function (profile) {
return profile.id === app.cfg.audio.maikiwiAudio.atmosphereRealizer1_value; return profile.id === app.cfg.audio.maikiwiAudio.atmosphereRealizer1_value;
}); });
if (atmosphereRealizerProfile === undefined) { if (atmosphereRealizerProfile === undefined) {
atmosphereRealizerProfile = CiderAudioRenderer.atmosphereRealizerProfiles[0]; atmosphereRealizerProfile = CiderAudio.atmosphereRealizerProfiles[0];
} }
fetch(atmosphereRealizerProfile.file).then(async (impulseData) => { fetch(atmosphereRealizerProfile.file).then(async (impulseData) => {
let bufferedImpulse = await impulseData.arrayBuffer(); let bufferedImpulse = await impulseData.arrayBuffer();
@ -461,12 +316,12 @@ const CiderAudioRenderer = {
if (status === true) { if (status === true) {
CiderAudioRenderer.audioNodes.opportunisticCorrection = CiderAudioRenderer.context.createConvolver(); CiderAudioRenderer.audioNodes.opportunisticCorrection = CiderAudioRenderer.context.createConvolver();
CiderAudioRenderer.audioNodes.opportunisticCorrection.normalize = false; CiderAudioRenderer.audioNodes.opportunisticCorrection.normalize = false;
let opportunisticCorrectionProfile = CiderAudioRenderer.opportunisticCorrectionProfiles.find(function (profile) { let opportunisticCorrectionProfile = CiderAudio.opportunisticCorrectionProfiles.find(function (profile) {
return profile.id === app.cfg.audio.maikiwiAudio.opportunisticCorrection_state; return profile.id === app.cfg.audio.maikiwiAudio.opportunisticCorrection_state;
}); });
if (opportunisticCorrectionProfile === undefined) { if (opportunisticCorrectionProfile === undefined) {
opportunisticCorrectionProfile = CiderAudioRenderer.opportunisticCorrectionProfiles[0]; opportunisticCorrectionProfile = CiderAudio.opportunisticCorrectionProfiles[0];
} }
fetch(opportunisticCorrectionProfile.file).then(async (impulseData) => { fetch(opportunisticCorrectionProfile.file).then(async (impulseData) => {
let bufferedImpulse = await impulseData.arrayBuffer(); let bufferedImpulse = await impulseData.arrayBuffer();
@ -758,25 +613,22 @@ const CiderAudioRenderer = {
} }
} }
}, },
hierarchical_optimizer: function () { hierarchical_optimizer: async function () {
CiderAudioRenderer.intelliGainComp_n0_0(); // Calculate headroom for upcoming convolver await CiderAudioRenderer.intelliGainComp_n0_0(); // Calculate headroom for upcoming convolver
// Render and return convolved buffer // Render and return convolved buffer
let optimizerProfile = CiderAudioRenderer.optimizerProfile.find(function (profile) { let optimizerProfile = CiderAudioRenderer.optimizerProfile.find(function (profile) {
return profile.id === "dirac32_96"; // Hard code for now return profile.id === "dirac32_96"; // Hard code for now
}); });
return fetch(optimizerProfile.file) fetch(optimizerProfile.file)
.then(async (response) => await response.arrayBuffer()) .then(async (response) => await response.arrayBuffer())
.then((arrayBuffer) => CiderAudioRenderer.context.decodeAudioData(arrayBuffer)) .then((arrayBuffer) => CiderAudio.context.decodeAudioData(arrayBuffer))
.then((decodedBuffer) => { .then((decodedBuffer) => {
const source = new AudioBufferSourceNode(CiderAudioRenderer.context, { const source = CiderAudioRenderer.context.createBufferSource();
buffer: decodedBuffer, source.buffer = decodedBuffer;
});
source.connect(CiderAudioRenderer.audioNodes.intelliGainComp); source.connect(CiderAudioRenderer.audioNodes.intelliGainComp);
switch (lastNode) { switch (app.cfg.audio.maikiwiAudio.lastNode) {
case "spatial": case "spatial":
CiderAudioRenderer.audioNodes.gainNode.connect(CiderAudioRenderer.audioNodes.spatialNode); CiderAudioRenderer.audioNodes.gainNode.connect(CiderAudioRenderer.audioNodes.spatialNode);
break; break;
@ -800,34 +652,34 @@ const CiderAudioRenderer = {
break; break;
} }
switch (firstNode) { switch (app.cfg.audio.maikiwiAudio.firstNode) {
case "spatial": case "spatial":
CiderAudioRenderer.audioNodes.spatialNode.disconnect(); CiderAudioRenderer.audioNodes.spatialNode.disconnect();
CiderAudioRenderer.audioNodes.spatialNode.connect(renderer.destination); CiderAudioRenderer.audioNodes.spatialNode.connect(CiderAudioRenderer.destination);
break; break;
case "n6": case "n6":
CiderAudioRenderer.audioNodes.atmosphereRealizer2.disconnect(); CiderAudioRenderer.audioNodes.atmosphereRealizer2.disconnect();
CiderAudioRenderer.audioNodes.atmosphereRealizer2.connect(renderer.destination); CiderAudioRenderer.audioNodes.atmosphereRealizer2.connect(CiderAudioRenderer.destination);
break; break;
case "n5": case "n5":
CiderAudioRenderer.audioNodes.atmosphereRealizer1.disconnect(); CiderAudioRenderer.audioNodes.atmosphereRealizer1.disconnect();
CiderAudioRenderer.audioNodes.atmosphereRealizer1.connect(renderer.destination); CiderAudioRenderer.audioNodes.atmosphereRealizer1.connect(CiderAudioRenderer.destination);
break; break;
case "n4": case "n4":
CiderAudioRenderer.audioNodes.vibrantbassNode.at(-1).disconnect(); CiderAudioRenderer.audioNodes.vibrantbassNode.at(-1).disconnect();
CiderAudioRenderer.audioNodes.vibrantbassNode.at(-1).connect(renderer.destination); CiderAudioRenderer.audioNodes.vibrantbassNode.at(-1).connect(CiderAudioRenderer.destination);
break; break;
case "n3": case "n3":
CiderAudioRenderer.audioNodes.audioBands.at(-1).disconnect(); CiderAudioRenderer.audioNodes.audioBands.at(-1).disconnect();
CiderAudioRenderer.audioNodes.audioBands.at(-1).connect(renderer.destination); CiderAudioRenderer.audioNodes.audioBands.at(-1).connect(CiderAudioRenderer.destination);
break; break;
case "n2": case "n2":
CiderAudioRenderer.audioNodes.opportunisticCorrection.disconnect(); CiderAudioRenderer.audioNodes.opportunisticCorrection.disconnect();
CiderAudioRenderer.audioNodes.opportunisticCorrection.connect(renderer.destination); CiderAudioRenderer.audioNodes.opportunisticCorrection.connect(CiderAudioRenderer.destination);
break; break;
case "n1": case "n1":
CiderAudioRenderer.audioNodes.llpw.at(-1).disconnect(); CiderAudioRenderer.audioNodes.llpw.at(-1).disconnect();
CiderAudioRenderer.audioNodes.llpw.at(-1).connect(renderer.destination); CiderAudioRenderer.audioNodes.llpw.at(-1).connect(CiderAudioRenderer.destination);
break; break;
} }

View file

@ -902,6 +902,7 @@ input[type="range"].web-slider::-webkit-slider-runnable-track {
> ._svg-icon { > ._svg-icon {
--size: var(--iconSize); --size: var(--iconSize);
flex-shrink: 0;
} }
} }
@ -1975,6 +1976,10 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
&.twitterBtn { &.twitterBtn {
background-color: #1d9bf0; background-color: #1d9bf0;
} }
&.qqBtn {
background-color: #d32f2f;
}
} }
} }

View file

@ -16,85 +16,83 @@
</div> </div>
</div> </div>
<div class="modal-content"> <div class="modal-content">
<div style="opacity: 0.8; pointer-events: none" v-if="app.cfg.audio.maikiwiAudio.staticOptimizer.lock === true"> <!-- BANDS = [60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]; -->
<!-- BANDS = [60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]; --> <div class="inputs-container">
<div class="inputs-container"> <div class="input-container mini">
<div class="input-container mini"> {{$root.cfg.audio.equalizer.vibrantBass}}
{{$root.cfg.audio.equalizer.vibrantBass}} <input tabindex="0" type="range" class="eq-slider mini" orient="vertical" min="-15" max="15" step="1" v-model="$root.cfg.audio.equalizer.vibrantBass" @change="changeVibrantBass()">
<input tabindex="0" type="range" class="eq-slider mini" orient="vertical" min="-15" max="15" step="1" v-model="$root.cfg.audio.equalizer.vibrantBass" @change="changeVibrantBass()"> Vibrant Bass
Vibrant Bass </div>
</div> <div class="input-container mini">
<div class="input-container mini"> {{$root.cfg.audio.equalizer.mix}}
{{$root.cfg.audio.equalizer.mix}} <input tabindex="0" type="range" class="eq-slider mini" orient="vertical" min="0" max="2" step="0.1" v-model="$root.cfg.audio.equalizer.mix" @change="changeMix()">
<input tabindex="0" type="range" class="eq-slider mini" orient="vertical" min="0" max="2" step="0.1" v-model="$root.cfg.audio.equalizer.mix" @change="changeMix()"> Mix
Mix </div>
</div> <div class="input-container header mini">
<div class="input-container header mini"> Gain
Gain <input type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" >
<input type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" > <div class="freq-header">Freq</div>
<div class="freq-header">Freq</div> <div>Q</div>
<div>Q</div> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[0]" @change="changeGain(0)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[0]" @change="changeGain(0)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[0]" @change="changeGain(0)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[0]" @change="changeGain(0)"> <input type="number" class="eq-freq" orient="vertical" min="22" max="44" step="2" v-model="$root.cfg.audio.equalizer.frequencies[0]" @change="changeFreq(0)">
<input type="number" class="eq-freq" orient="vertical" min="22" max="44" step="2" v-model="$root.cfg.audio.equalizer.frequencies[0]" @change="changeFreq(0)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[0]" @change="changeQ(0)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[0]" @change="changeQ(0)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[1]" @change="changeGain(1)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[1]" @change="changeGain(1)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[1]" @change="changeGain(1)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[1]" @change="changeGain(1)"> <input type="number" class="eq-freq" orient="vertical" min="44" max="88" step="4" v-model="$root.cfg.audio.equalizer.frequencies[1]" @change="changeFreq(1)">
<input type="number" class="eq-freq" orient="vertical" min="44" max="88" step="4" v-model="$root.cfg.audio.equalizer.frequencies[1]" @change="changeFreq(1)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[1]" @change="changeQ(1)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[1]" @change="changeQ(1)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[2]" @change="changeGain(2)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[2]" @change="changeGain(2)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[2]" @change="changeGain(2)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[2]" @change="changeGain(2)"> <input type="number" class="eq-freq" orient="vertical" min="88" max="177" step="8" v-model="$root.cfg.audio.equalizer.frequencies[2]" @change="changeFreq(2)">
<input type="number" class="eq-freq" orient="vertical" min="88" max="177" step="8" v-model="$root.cfg.audio.equalizer.frequencies[2]" @change="changeFreq(2)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[2]" @change="changeQ(2)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[2]" @change="changeQ(2)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[3]" @change="changeGain(3)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[3]" @change="changeGain(3)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[3]" @change="changeGain(3)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[3]" @change="changeGain(3)"> <input type="number" class="eq-freq" orient="vertical" min="177" max="355" step="16" v-model="$root.cfg.audio.equalizer.frequencies[3]" @change="changeFreq(3)">
<input type="number" class="eq-freq" orient="vertical" min="177" max="355" step="16" v-model="$root.cfg.audio.equalizer.frequencies[3]" @change="changeFreq(3)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[3]" @change="changeQ(3)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[3]" @change="changeQ(3)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[4]" @change="changeGain(4)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[4]" @change="changeGain(4)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[4]" @change="changeGain(4)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[4]" @change="changeGain(4)"> <input type="number" class="eq-freq" orient="vertical" min="355" max="710" step="32" v-model="$root.cfg.audio.equalizer.frequencies[4]" @change="changeFreq(4)">
<input type="number" class="eq-freq" orient="vertical" min="355" max="710" step="32" v-model="$root.cfg.audio.equalizer.frequencies[4]" @change="changeFreq(4)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[4]" @change="changeQ(4)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[4]" @change="changeQ(4)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[5]" @change="changeGain(5)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[5]" @change="changeGain(5)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[5]" @change="changeGain(5)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[5]" @change="changeGain(5)"> <input type="number" class="eq-freq" orient="vertical" min="710" max="1420" step="64" v-model="$root.cfg.audio.equalizer.frequencies[5]" @change="changeFreq(5)">
<input type="number" class="eq-freq" orient="vertical" min="710" max="1420" step="64" v-model="$root.cfg.audio.equalizer.frequencies[5]" @change="changeFreq(5)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[5]" @change="changeQ(5)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[5]" @change="changeQ(5)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[6]" @change="changeGain(6)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[6]" @change="changeGain(6)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[6]" @change="changeGain(6)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[6]" @change="changeGain(6)"> <input type="number" class="eq-freq" orient="vertical" min="1420" max="2840" step="128" v-model="$root.cfg.audio.equalizer.frequencies[6]" @change="changeFreq(6)">
<input type="number" class="eq-freq" orient="vertical" min="1420" max="2840" step="128" v-model="$root.cfg.audio.equalizer.frequencies[6]" @change="changeFreq(6)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[6]" @change="changeQ(6)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[6]" @change="changeQ(6)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[7]" @change="changeGain(7)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[7]" @change="changeGain(7)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[7]" @change="changeGain(7)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[7]" @change="changeGain(7)"> <input type="number" class="eq-freq" orient="vertical" min="2840" max="5680" step="256" v-model="$root.cfg.audio.equalizer.frequencies[7]" @change="changeFreq(7)">
<input type="number" class="eq-freq" orient="vertical" min="2840" max="5680" step="256" v-model="$root.cfg.audio.equalizer.frequencies[7]" @change="changeFreq(7)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[7]" @change="changeQ(7)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[7]" @change="changeQ(7)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[8]" @change="changeGain(8)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[8]" @change="changeGain(8)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[8]" @change="changeGain(8)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[8]" @change="changeGain(8)"> <input type="number" class="eq-freq" orient="vertical" min="5680" max="11360" step="512" v-model="$root.cfg.audio.equalizer.frequencies[8]" @change="changeFreq(8)">
<input type="number" class="eq-freq" orient="vertical" min="5680" max="11360" step="512" v-model="$root.cfg.audio.equalizer.frequencies[8]" @change="changeFreq(8)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[8]" @change="changeQ(8)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[8]" @change="changeQ(8)"> </div>
</div> <div class="input-container">
<div class="input-container"> <input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[9]" @change="changeGain(9)">
<input tabindex="0" type="number" class="eq-freq" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[9]" @change="changeGain(9)"> <input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[9]" @change="changeGain(9)">
<input tabindex="0" type="range" class="eq-slider" orient="vertical" min="-12" max="12" step="0.1" v-model="$root.cfg.audio.equalizer.gain[9]" @change="changeGain(9)"> <input type="number" class="eq-freq" orient="vertical" min="11360" max="22720" step="1024" v-model="$root.cfg.audio.equalizer.frequencies[9]" @change="changeFreq(9)">
<input type="number" class="eq-freq" orient="vertical" min="11360" max="22720" step="1024" v-model="$root.cfg.audio.equalizer.frequencies[9]" @change="changeFreq(9)"> <input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[9]" @change="changeQ(9)">
<input type="number" class="eq-q" orient="vertical" min="0" max="5" step="0.1" v-model="$root.cfg.audio.equalizer.Q[9]" @change="changeQ(9)">
</div>
</div> </div>
</div> </div>
</div> </div>
@ -336,9 +334,11 @@
} }
}, },
changeFreq(i) { changeFreq(i) {
if (app.cfg.audio.maikiwiAudio.staticOptimizer.lock === true) { return notyf.error("Static Compilation Mode is enabled.")}
CiderAudio.audioNodes.audioBands[i].frequency.value = app.cfg.audio.equalizer.frequencies[i] CiderAudio.audioNodes.audioBands[i].frequency.value = app.cfg.audio.equalizer.frequencies[i]
}, },
changeQ(i) { changeQ(i) {
if (app.cfg.audio.maikiwiAudio.staticOptimizer.lock === true) { return notyf.error("Static Compilation Mode is enabled.")}
CiderAudio.audioNodes.audioBands[i].Q.value = app.cfg.audio.equalizer.Q[i] CiderAudio.audioNodes.audioBands[i].Q.value = app.cfg.audio.equalizer.Q[i]
}, },
resetGain() { resetGain() {

View file

@ -62,16 +62,18 @@
<div class="title text-overflow-elipsis" :title="item.attributes.name"> <div class="title text-overflow-elipsis" :title="item.attributes.name">
{{ item.attributes.name }} {{ item.attributes.name }}
</div> </div>
<div class="subtitle text-overflow-elipsis" :title="item.attributes.artistName" <div class="subtitle text-overflow-elipsis"
style="-webkit-box-orient: horizontal;"> style="-webkit-box-orient: horizontal;">
<template v-if="item.attributes.artistName"> <template v-if="item.attributes.artistName">
<div class="artist item-navigate text-overflow-elipsis" <div class="artist item-navigate text-overflow-elipsis"
:title="item.attributes.artistName"
@click="app.searchAndNavigate(item,'artist')"> @click="app.searchAndNavigate(item,'artist')">
{{ item.attributes.artistName }} {{ item.attributes.artistName }}
</div> </div>
<template v-if="item.attributes.albumName">&nbsp;—&nbsp;</template> <template v-if="item.attributes.albumName">&nbsp;—&nbsp;</template>
<template v-if="item.attributes.albumName"> <template v-if="item.attributes.albumName">
<div class="artist item-navigate text-overflow-elipsis" <div class="artist item-navigate text-overflow-elipsis"
:title="item.attributes.albumName"
@click="app.searchAndNavigate(item,'album')"> @click="app.searchAndNavigate(item,'album')">
{{ item.attributes.albumName }} {{ item.attributes.albumName }}
</div> </div>

View file

@ -189,11 +189,7 @@
</template> </template>
</div> </div>
<div class="app-sidebar-footer display--small app-sidebar-footer--controls"> <div class="app-sidebar-footer display--small app-sidebar-footer--controls">
<div <div class="app-playback-controls" @contextmenu="$root.nowPlayingContextMenu">
class="app-playback-controls"
v-if="$root.mkReady()"
@contextmenu="$root.nowPlayingContextMenu"
>
<div class="control-buttons"> <div class="control-buttons">
<div class="app-chrome-item"> <div class="app-chrome-item">
<button <button
@ -295,15 +291,9 @@
</div> </div>
</div> </div>
</div> </div>
<div <div class="app-sidebar-notification backgroundNotification" v-if="$root.library.backgroundNotification.show" >
class="app-sidebar-notification backgroundNotification"
v-if="$root.library.backgroundNotification.show"
>
<div class="message"> <div class="message">
{{ $root.library.backgroundNotification.message }} ({{ {{ $root.library.backgroundNotification.message }} ({{$root.library.backgroundNotification.progress }} / {{ $root.library.backgroundNotification.total }})
$root.library.backgroundNotification.progress
}}
/ {{ $root.library.backgroundNotification.total }})
</div> </div>
</div> </div>
</div> </div>
@ -311,6 +301,6 @@
<script> <script>
Vue.component("cider-app-sidebar", { Vue.component("cider-app-sidebar", {
template: "#cider-app-sidebar" template: "#cider-app-sidebar",
}) })
</script> </script>

View file

@ -33,6 +33,9 @@
<button onclick="window.open('https://twitter.com/UseCider')" class="md-btn sponsorBtn twitterBtn"><img <button onclick="window.open('https://twitter.com/UseCider')" class="md-btn sponsorBtn twitterBtn"><img
src="./assets/twitter.svg" />Twitter src="./assets/twitter.svg" />Twitter
</button> </button>
<button onclick="window.open('https://jq.qq.com/?_wv=1027&k=2VP4cdyo')" class="md-btn sponsorBtn qqBtn"><img
src="./assets/qq.svg" />QQ
</button>
</div> </div>
<div class="col"> <div class="col">

View file

@ -28,7 +28,7 @@
</div> </div>
<div class="md-option-segment md-option-segment_auto"> <div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.audio.maikiwiAudio.staticOptimizer.state" <input type="checkbox" v-model="app.cfg.audio.maikiwiAudio.staticOptimizer.state"
v-on:change="CiderOptimizer()" switch/> v-on:change="CiderOptimizer()" :disabled="app.cfg.advanced.experiments.includes('staticOptimizer') === false" switch/>
</div> </div>
</div> </div>
<div class="md-option-line"> <div class="md-option-line">