Merge branch 'main' of https://github.com/ciderapp/Cider
This commit is contained in:
commit
c9268105f0
17 changed files with 257 additions and 327 deletions
3
.github/workflows/build-macos.yml
vendored
3
.github/workflows/build-macos.yml
vendored
|
@ -48,6 +48,9 @@ jobs:
|
|||
- name: Setup Environment
|
||||
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
|
||||
run: |
|
||||
yarn install
|
||||
|
|
|
@ -30,7 +30,10 @@
|
|||
|
||||
[](https://www.microsoft.com/store/apps/9P21XJ9D9G66)
|
||||
|
||||
[_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider)
|
||||
[](https://winstall.app/apps/CiderCollective.Cider)
|
||||
[_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider.Nightly)
|
||||
|
||||
[](https://community.chocolatey.org/packages/cider)
|
||||
|
||||
<!--
|
||||
[_-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider.Nightly)
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
"request": "^2.88.2",
|
||||
"run-script-os": "^1.1.6",
|
||||
"source-map-support": "^0.5.21",
|
||||
"ts-md5": "^1.2.11",
|
||||
"ts-md5": "1.2.11",
|
||||
"v8-compile-cache": "^2.3.0",
|
||||
"wallpaper": "5.0.1",
|
||||
"ws": "^8.8.1",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"i18n.languageName": "Engwish (OwO)",
|
||||
"i18n.languageNameEnglish": "Engwish (OwO)",
|
||||
"i18n.category": "fun",
|
||||
"i18n.authors": "@deerwithacurl @gamingliamstudios",
|
||||
"i18n.authors": "@deerwithacurl @gamingliamstudios @ctaetcsh",
|
||||
"app.name": "Cidew",
|
||||
"date.format": "${m} ${d}, ${y}",
|
||||
"dialog.cancel": "Cancew",
|
||||
|
@ -62,6 +62,7 @@
|
|||
"term.stop": "Stop",
|
||||
"term.previous": "Pwevious",
|
||||
"term.next": "Nyext",
|
||||
"term.skip": "Skip",
|
||||
"term.shuffle": "Shuffwe",
|
||||
"term.enableShuffle": "Enyabwe shuffwe",
|
||||
"term.disableShuffle": "Disabwe shuffwe",
|
||||
|
@ -142,7 +143,7 @@
|
|||
"term.amLive": "Appwe Music Wive",
|
||||
"term.language": "Wanguage",
|
||||
"term.funLanguages": "Fun",
|
||||
"term.noLyrics": "Instwumentaw Twack / Nyo Wywics.",
|
||||
"term.noLyrics": ">w< Sowwy Wowwy.. N-Nyo Wywics Avaiwabwe",
|
||||
"term.copyright": "Copywight",
|
||||
"term.rightsReserved": "Aww Wights Wesewved.",
|
||||
"term.sponsor": "Sponsow this pwoject",
|
||||
|
|
|
@ -317,7 +317,7 @@
|
|||
"menubar.options.toggledevtools": "Toggle Developer Tools",
|
||||
"menubar.options.window": "Window",
|
||||
"menubar.options.minimize": "Minimize",
|
||||
"menubar.options.plugins": "Plu-gins Menu",
|
||||
"menubar.options.plugins": "Plugins Menu",
|
||||
"menubar.options.controls": "Controls",
|
||||
"menubar.options.volumeup": "Volume Up",
|
||||
"menubar.options.volumedown": "Volume Down",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"i18n.languageName": "Português (Portugal)",
|
||||
"i18n.languageNameEnglish": "Portuguese (Portugal)",
|
||||
"i18n.category": "main",
|
||||
"i18n.authors": "@pgalhardo",
|
||||
"i18n.authors": "@pgalhardo @hugok79",
|
||||
"app.name": "Cider",
|
||||
"date.format": "${m} ${d}, ${y}",
|
||||
"dialog.cancel": "Cancelar",
|
||||
|
@ -31,8 +31,12 @@
|
|||
"term.miniplayer": "Mini-leitor",
|
||||
"term.history": "Histórico",
|
||||
"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.hideSearch": "Esconder a barar de pesquisa",
|
||||
"term.hideSearch": "Ocultar a barra de pesquisa",
|
||||
"term.library": "Biblioteca",
|
||||
"term.listenNow": "Ouvir agora",
|
||||
"term.browse": "Explorar",
|
||||
|
@ -58,6 +62,7 @@
|
|||
"term.stop": "Parar",
|
||||
"term.previous": "Anterior",
|
||||
"term.next": "Seguinte",
|
||||
"term.skip": "Ignorar",
|
||||
"term.shuffle": "Modo aleatório",
|
||||
"term.enableShuffle": "Ativar modo aleatório",
|
||||
"term.disableShuffle": "Desativar modo aleatório",
|
||||
|
@ -136,14 +141,13 @@
|
|||
"term.recentStations": "Estações recentes",
|
||||
"term.personalStations": "Estações pessoais",
|
||||
"term.amLive": "Apple Music Live",
|
||||
"term.live": "AO VIVO",
|
||||
"term.language": "Idioma",
|
||||
"term.funLanguages": "Divertido",
|
||||
"term.noLyrics": "A carregar... / Letra não encontrada. / Instrumental.",
|
||||
"term.copyright": "Copyright",
|
||||
"term.noLyrics": "Música instrumental / Sem letra.",
|
||||
"term.copyright": "Direitos de autor",
|
||||
"term.rightsReserved": "Todos os direitos reservados.",
|
||||
"term.sponsor": "Patrocine este projecto",
|
||||
"term.ciderTeam": "Equipa do Cider",
|
||||
"term.ciderTeam": "Equipa da Cider",
|
||||
"term.developer": "Programador",
|
||||
"term.socialTeam": "Equipa social",
|
||||
"term.socials": "Redes sociais",
|
||||
|
@ -181,6 +185,7 @@
|
|||
"term.top": "Top",
|
||||
"term.version": "Versão",
|
||||
"term.noVideos": "Não foram encontrados vídeos.",
|
||||
"term.plugins": "Plug-ins",
|
||||
"term.plugin": "Plug-in",
|
||||
"term.pluginMenu": "Menu de plug-ins",
|
||||
"term.pluginMenu.none": "Sem plug-ins interactivos",
|
||||
|
@ -207,8 +212,12 @@
|
|||
"term.zoomout": "Diminuir o zoom",
|
||||
"term.zoomreset": "Repor zoom",
|
||||
"term.fullscreen": "Ecrã inteiro",
|
||||
"term.nowPlaying": "Em reprodução",
|
||||
"home.syncFavorites": "Sincronizar 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.recentlyPlayed": "Reproduzido recentemente",
|
||||
"home.recentlyAdded": "Adicionado recentemente",
|
||||
|
@ -229,8 +238,6 @@
|
|||
"podcast.episodes": "Episódios",
|
||||
"podcast.playEpisode": "Reproduzir episódio",
|
||||
"podcast.website": "Website do Podcast",
|
||||
"action.favorite": "Adicionar favorito",
|
||||
"action.removeFavorite": "Remover favorito",
|
||||
"action.hideLibrary": "Ocultar biblioteca",
|
||||
"action.showLibrary": "Mostrar biblioteca",
|
||||
"action.cut": "Cortar",
|
||||
|
@ -239,6 +246,7 @@
|
|||
"action.delete": "Apagar",
|
||||
"action.edit": "Editar",
|
||||
"action.done": "Concluído",
|
||||
"action.submit": "Submeter",
|
||||
"action.editTracklist": "Editar lista de reprodução",
|
||||
"action.addToLibrary": "Adicionar à 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.E168_1": "Jasmine Macchiato",
|
||||
"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.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.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.",
|
||||
|
@ -449,11 +457,6 @@
|
|||
"settings.header.visual": "Aparência",
|
||||
"settings.header.visual.description": "Ajustar as definições visuais do Cider.",
|
||||
"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.header.visual.windowBackgroundStyle.none": "Nenhum",
|
||||
"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.uninstallTheme": "Tem a certeza de que pretende desinstalar {{ theme }}?",
|
||||
"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.uninstall": "Desinstalar",
|
||||
"settings.option.visual.theme.viewInfo": "Ver informação",
|
||||
|
@ -523,8 +527,8 @@
|
|||
"settings.option.connectivity.discordRPC": "Discord Rich Presence",
|
||||
"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.hideButtons": "Esconder botões no Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Esconder timestamp no Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideButtons": "Ocultar botões 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.stateFormat": "Formato do estado",
|
||||
"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.removeFeatured": "Remover artistas do título da música (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.openAppData": "Abrir pasta do Cider",
|
||||
"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.compactUI": "UI compacta",
|
||||
"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.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.visual.transparent": "Moldura transparente",
|
||||
"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.connect": "Sincronização",
|
||||
"settings.option.connect.link_account": "Ativar a sincronização com o Cider Connect",
|
||||
|
@ -565,7 +582,7 @@
|
|||
"spatial.roomPositions": "Posições na sala",
|
||||
"spatial.setDimensions": "Definir dimensões",
|
||||
"spatial.setPositions": "Definir posições",
|
||||
"spatial.up": "Acima",
|
||||
"spatial.up": "Em cima",
|
||||
"spatial.front": "Frente",
|
||||
"spatial.left": "Esquerda",
|
||||
"spatial.right": "Direita",
|
||||
|
@ -586,5 +603,44 @@
|
|||
"share.platform.email": "Email",
|
||||
"share.platform.songLink": "Copiar com song.link",
|
||||
"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": ""
|
||||
}
|
||||
|
|
|
@ -1444,15 +1444,13 @@ export class BrowserWindow {
|
|||
if ((process.platform === "darwin" || utils.getStoreValue("general.close_button_hide")) && !isQuitting) {
|
||||
e.preventDefault();
|
||||
win.hide();
|
||||
}
|
||||
});
|
||||
|
||||
win.on("closed", (_: any) => {
|
||||
} else {
|
||||
win.webContents.executeJavaScript(`
|
||||
window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem));
|
||||
window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime));
|
||||
window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue._unplayedQueueItems));
|
||||
ipcRenderer.send('stopGCast','');`);
|
||||
}
|
||||
});
|
||||
|
||||
app.on("before-quit", () => {
|
||||
|
|
|
@ -87,29 +87,43 @@ export default class RAOP {
|
|||
|
||||
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 )}))
|
||||
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 (
|
||||
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
|
||||
) {
|
||||
this.castDevices.push({
|
||||
name: (host ?? "Unknown").replace(".local", ""),
|
||||
host: addresses ? addresses[0] : "",
|
||||
name: shown_name,
|
||||
host: host_name,
|
||||
port: port,
|
||||
addresses: addresses,
|
||||
txt: text,
|
||||
airplay2: airplay2,
|
||||
});
|
||||
if (this.devices.indexOf(host) === -1) {
|
||||
this.devices.push(host);
|
||||
}
|
||||
if (name) {
|
||||
this._win.webContents.executeJavaScript(`console.log('deviceFound','ip: ${host} name:${name}')`).catch((err: any) => console.error(err));
|
||||
console.log("deviceFound", host, name);
|
||||
// if (this.devices.indexOf(host_name) === -1) {
|
||||
// this.devices.push(host_name);
|
||||
// }
|
||||
if (shown_name) {
|
||||
this._win.webContents.executeJavaScript(`console.log('deviceFound','ip: ${host_name} name:${shown_name}')`).catch((err: any) => console.error(err));
|
||||
console.log("deviceFound", host_name, shown_name);
|
||||
}
|
||||
} else {
|
||||
this._win.webContents.executeJavaScript(`console.log('deviceFound (added)','ip: ${host} name:${name}')`).catch((err: any) => console.error(err));
|
||||
console.log("deviceFound (added)", host, name);
|
||||
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, shown_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -142,7 +156,7 @@ export default class RAOP {
|
|||
});
|
||||
|
||||
electron.ipcMain.on("getAirplayDevice", (event, data) => {
|
||||
this.castDevices = [];
|
||||
// this.castDevices = [];
|
||||
console.log("scan for airplay devices");
|
||||
|
||||
const browser = this.mdns.createBrowser(this.mdns.tcp("raop"));
|
||||
|
|
1
src/renderer/assets/qq.svg
Normal file
1
src/renderer/assets/qq.svg
Normal 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 |
|
@ -426,8 +426,9 @@ const CiderAudio = {
|
|||
let dataLength = audioRawData[0]?.length ?? 0;
|
||||
for (let idx=0; idx<dataLength; idx++) {
|
||||
for (let channel=0; channel < numberOfChannels; channel++) {
|
||||
try {
|
||||
let value = audioRawData[channel][idx];
|
||||
this._buffers[channel][this._bytesWritten] = value;
|
||||
this._buffers[channel][this._bytesWritten] = value;} catch(e){}
|
||||
}
|
||||
this._bytesWritten += 1;
|
||||
}
|
||||
|
@ -967,28 +968,29 @@ const CiderAudio = {
|
|||
return;
|
||||
} // 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) {
|
||||
MusicKit.getInstance().pause(); // Pause first
|
||||
}
|
||||
|
||||
const res = CiderAudioRenderer.hierarchical_optimizer();
|
||||
|
||||
CiderAudioRenderer.off(); // Clean up IMMEDIATELY
|
||||
|
||||
CiderAudio.audioNodes.optimizedNode = CiderAudio.context.createConvolver();
|
||||
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.audioNodes.gainNode.connect(CiderAudio.audioNodes.optimizedNode);
|
||||
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");
|
||||
|
||||
if (MusicKit.getInstance().nowPlayingItem != null) {
|
||||
|
|
|
@ -30,7 +30,11 @@ const CiderAudioRenderer = {
|
|||
};
|
||||
} catch (e) {}
|
||||
},
|
||||
init: function () {
|
||||
init: function (
|
||||
cb = function () {
|
||||
console.log("CARenderer init");
|
||||
}
|
||||
) {
|
||||
CiderAudioRenderer.context = new OfflineAudioContext({
|
||||
numberOfChannels: 2,
|
||||
length: 96000 * 8,
|
||||
|
@ -42,6 +46,7 @@ const CiderAudioRenderer = {
|
|||
CiderAudioRenderer.audioNodes.intelliGainComp.gain.value = 1;
|
||||
CiderAudioRenderer.audioNodes.intelliGainComp.connect(CiderAudioRenderer.audioNodes.gainNode);
|
||||
CiderAudioRenderer.hierarchical_loading();
|
||||
cb();
|
||||
},
|
||||
optimizerProfile: [
|
||||
{
|
||||
|
@ -52,165 +57,17 @@ const CiderAudioRenderer = {
|
|||
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 () {
|
||||
CiderAudioRenderer.audioNodes.spatialNode = null;
|
||||
CiderAudioRenderer.audioNodes.spatialNode = CiderAudioRenderer.context.createConvolver();
|
||||
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;
|
||||
});
|
||||
|
||||
if (spatialProfile === undefined) {
|
||||
spatialProfile = CiderAudioRenderer.spatialProfiles[0];
|
||||
spatialProfile = CiderAudio.spatialProfiles[0];
|
||||
}
|
||||
fetch(spatialProfile.file).then(async (impulseData) => {
|
||||
let bufferedImpulse = await impulseData.arrayBuffer();
|
||||
|
@ -223,7 +80,7 @@ const CiderAudioRenderer = {
|
|||
spatialOff: function () {
|
||||
CiderAudioRenderer.hierarchical_loading();
|
||||
},
|
||||
intelliGainComp_n0_0: function () {
|
||||
intelliGainComp_n0_0: async function () {
|
||||
let filters = [];
|
||||
const precisionHz = 12;
|
||||
// Biquad calculation
|
||||
|
@ -250,18 +107,16 @@ const CiderAudioRenderer = {
|
|||
filterlessGain = filterlessGain * 1.096478196143185;
|
||||
}
|
||||
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;
|
||||
});
|
||||
if (spatialProfile === undefined) {
|
||||
spatialProfile = CiderAudioRenderer.spatialProfiles[0];
|
||||
spatialProfile = CiderAudio.spatialProfiles[0];
|
||||
}
|
||||
filterlessGain = filterlessGain * spatialProfile.gainComp;
|
||||
}
|
||||
filterlessGain = Math.pow(10, (-1 * (20 * Math.log10(filterlessGain))) / 20).toFixed(4);
|
||||
filterlessGain > 1.0
|
||||
? CiderAudioRenderer.audioNodes.intelliGainComp.gain.exponentialRampToValueAtTime(1.0, CiderAudioRenderer.context.currentTime + 0.3)
|
||||
: CiderAudioRenderer.audioNodes.intelliGainComp.gain.exponentialRampToValueAtTime(filterlessGain, CiderAudioRenderer.context.currentTime + 0.3);
|
||||
filterlessGain > 1.0 ? (CiderAudioRenderer.audioNodes.intelliGainComp.gain.value = 1) : (CiderAudioRenderer.audioNodes.intelliGainComp.gain.value = filterlessGain);
|
||||
console.debug(`[Cider][Audio] IntelliGainComp: ${filterlessGain > 1.0 ? 0 : (20 * Math.log10(filterlessGain)).toFixed(2)} dB (${filterlessGain > 1.0 ? 1 : filterlessGain})`);
|
||||
return;
|
||||
}
|
||||
|
@ -307,11 +162,11 @@ const CiderAudioRenderer = {
|
|||
maxGain = maxGain * 1.096478196143185;
|
||||
}
|
||||
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;
|
||||
});
|
||||
if (spatialProfile === undefined) {
|
||||
spatialProfile = CiderAudioRenderer.spatialProfiles[0];
|
||||
spatialProfile = CiderAudio.spatialProfiles[0];
|
||||
}
|
||||
maxGain = maxGain * spatialProfile.gainComp;
|
||||
}
|
||||
|
@ -325,12 +180,12 @@ const CiderAudioRenderer = {
|
|||
if (status === true) {
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer2 = CiderAudioRenderer.context.createConvolver();
|
||||
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;
|
||||
});
|
||||
|
||||
if (atmosphereRealizerProfile === undefined) {
|
||||
atmosphereRealizerProfile = CiderAudioRenderer.atmosphereRealizerProfiles[0];
|
||||
atmosphereRealizerProfile = CiderAudio.atmosphereRealizerProfiles[0];
|
||||
}
|
||||
fetch(atmosphereRealizerProfile.file).then(async (impulseData) => {
|
||||
let bufferedImpulse = await impulseData.arrayBuffer();
|
||||
|
@ -393,12 +248,12 @@ const CiderAudioRenderer = {
|
|||
if (status === true) {
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer1 = CiderAudioRenderer.context.createConvolver();
|
||||
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;
|
||||
});
|
||||
|
||||
if (atmosphereRealizerProfile === undefined) {
|
||||
atmosphereRealizerProfile = CiderAudioRenderer.atmosphereRealizerProfiles[0];
|
||||
atmosphereRealizerProfile = CiderAudio.atmosphereRealizerProfiles[0];
|
||||
}
|
||||
fetch(atmosphereRealizerProfile.file).then(async (impulseData) => {
|
||||
let bufferedImpulse = await impulseData.arrayBuffer();
|
||||
|
@ -461,12 +316,12 @@ const CiderAudioRenderer = {
|
|||
if (status === true) {
|
||||
CiderAudioRenderer.audioNodes.opportunisticCorrection = CiderAudioRenderer.context.createConvolver();
|
||||
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;
|
||||
});
|
||||
|
||||
if (opportunisticCorrectionProfile === undefined) {
|
||||
opportunisticCorrectionProfile = CiderAudioRenderer.opportunisticCorrectionProfiles[0];
|
||||
opportunisticCorrectionProfile = CiderAudio.opportunisticCorrectionProfiles[0];
|
||||
}
|
||||
fetch(opportunisticCorrectionProfile.file).then(async (impulseData) => {
|
||||
let bufferedImpulse = await impulseData.arrayBuffer();
|
||||
|
@ -758,25 +613,22 @@ const CiderAudioRenderer = {
|
|||
}
|
||||
}
|
||||
},
|
||||
hierarchical_optimizer: function () {
|
||||
CiderAudioRenderer.intelliGainComp_n0_0(); // Calculate headroom for upcoming convolver
|
||||
|
||||
hierarchical_optimizer: async function () {
|
||||
await CiderAudioRenderer.intelliGainComp_n0_0(); // Calculate headroom for upcoming convolver
|
||||
// Render and return convolved buffer
|
||||
let optimizerProfile = CiderAudioRenderer.optimizerProfile.find(function (profile) {
|
||||
return profile.id === "dirac32_96"; // Hard code for now
|
||||
});
|
||||
|
||||
return fetch(optimizerProfile.file)
|
||||
fetch(optimizerProfile.file)
|
||||
.then(async (response) => await response.arrayBuffer())
|
||||
.then((arrayBuffer) => CiderAudioRenderer.context.decodeAudioData(arrayBuffer))
|
||||
.then((arrayBuffer) => CiderAudio.context.decodeAudioData(arrayBuffer))
|
||||
.then((decodedBuffer) => {
|
||||
const source = new AudioBufferSourceNode(CiderAudioRenderer.context, {
|
||||
buffer: decodedBuffer,
|
||||
});
|
||||
|
||||
const source = CiderAudioRenderer.context.createBufferSource();
|
||||
source.buffer = decodedBuffer;
|
||||
source.connect(CiderAudioRenderer.audioNodes.intelliGainComp);
|
||||
|
||||
switch (lastNode) {
|
||||
switch (app.cfg.audio.maikiwiAudio.lastNode) {
|
||||
case "spatial":
|
||||
CiderAudioRenderer.audioNodes.gainNode.connect(CiderAudioRenderer.audioNodes.spatialNode);
|
||||
break;
|
||||
|
@ -800,34 +652,34 @@ const CiderAudioRenderer = {
|
|||
break;
|
||||
}
|
||||
|
||||
switch (firstNode) {
|
||||
switch (app.cfg.audio.maikiwiAudio.firstNode) {
|
||||
case "spatial":
|
||||
CiderAudioRenderer.audioNodes.spatialNode.disconnect();
|
||||
CiderAudioRenderer.audioNodes.spatialNode.connect(renderer.destination);
|
||||
CiderAudioRenderer.audioNodes.spatialNode.connect(CiderAudioRenderer.destination);
|
||||
break;
|
||||
case "n6":
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer2.disconnect();
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer2.connect(renderer.destination);
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer2.connect(CiderAudioRenderer.destination);
|
||||
break;
|
||||
case "n5":
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer1.disconnect();
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer1.connect(renderer.destination);
|
||||
CiderAudioRenderer.audioNodes.atmosphereRealizer1.connect(CiderAudioRenderer.destination);
|
||||
break;
|
||||
case "n4":
|
||||
CiderAudioRenderer.audioNodes.vibrantbassNode.at(-1).disconnect();
|
||||
CiderAudioRenderer.audioNodes.vibrantbassNode.at(-1).connect(renderer.destination);
|
||||
CiderAudioRenderer.audioNodes.vibrantbassNode.at(-1).connect(CiderAudioRenderer.destination);
|
||||
break;
|
||||
case "n3":
|
||||
CiderAudioRenderer.audioNodes.audioBands.at(-1).disconnect();
|
||||
CiderAudioRenderer.audioNodes.audioBands.at(-1).connect(renderer.destination);
|
||||
CiderAudioRenderer.audioNodes.audioBands.at(-1).connect(CiderAudioRenderer.destination);
|
||||
break;
|
||||
case "n2":
|
||||
CiderAudioRenderer.audioNodes.opportunisticCorrection.disconnect();
|
||||
CiderAudioRenderer.audioNodes.opportunisticCorrection.connect(renderer.destination);
|
||||
CiderAudioRenderer.audioNodes.opportunisticCorrection.connect(CiderAudioRenderer.destination);
|
||||
break;
|
||||
case "n1":
|
||||
CiderAudioRenderer.audioNodes.llpw.at(-1).disconnect();
|
||||
CiderAudioRenderer.audioNodes.llpw.at(-1).connect(renderer.destination);
|
||||
CiderAudioRenderer.audioNodes.llpw.at(-1).connect(CiderAudioRenderer.destination);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -902,6 +902,7 @@ input[type="range"].web-slider::-webkit-slider-runnable-track {
|
|||
|
||||
> ._svg-icon {
|
||||
--size: var(--iconSize);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1975,6 +1976,10 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
&.twitterBtn {
|
||||
background-color: #1d9bf0;
|
||||
}
|
||||
|
||||
&.qqBtn {
|
||||
background-color: #d32f2f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
</div>
|
||||
</div>
|
||||
<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]; -->
|
||||
<div class="inputs-container">
|
||||
<div class="input-container mini">
|
||||
|
@ -97,7 +96,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-lowercontent">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
|
@ -336,9 +334,11 @@
|
|||
}
|
||||
},
|
||||
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]
|
||||
},
|
||||
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]
|
||||
},
|
||||
resetGain() {
|
||||
|
|
|
@ -62,16 +62,18 @@
|
|||
<div class="title text-overflow-elipsis" :title="item.attributes.name">
|
||||
{{ item.attributes.name }}
|
||||
</div>
|
||||
<div class="subtitle text-overflow-elipsis" :title="item.attributes.artistName"
|
||||
<div class="subtitle text-overflow-elipsis"
|
||||
style="-webkit-box-orient: horizontal;">
|
||||
<template v-if="item.attributes.artistName">
|
||||
<div class="artist item-navigate text-overflow-elipsis"
|
||||
:title="item.attributes.artistName"
|
||||
@click="app.searchAndNavigate(item,'artist')">
|
||||
{{ item.attributes.artistName }}
|
||||
</div>
|
||||
<template v-if="item.attributes.albumName"> — </template>
|
||||
<template v-if="item.attributes.albumName">
|
||||
<div class="artist item-navigate text-overflow-elipsis"
|
||||
:title="item.attributes.albumName"
|
||||
@click="app.searchAndNavigate(item,'album')">
|
||||
{{ item.attributes.albumName }}
|
||||
</div>
|
||||
|
|
|
@ -189,11 +189,7 @@
|
|||
</template>
|
||||
</div>
|
||||
<div class="app-sidebar-footer display--small app-sidebar-footer--controls">
|
||||
<div
|
||||
class="app-playback-controls"
|
||||
v-if="$root.mkReady()"
|
||||
@contextmenu="$root.nowPlayingContextMenu"
|
||||
>
|
||||
<div class="app-playback-controls" @contextmenu="$root.nowPlayingContextMenu">
|
||||
<div class="control-buttons">
|
||||
<div class="app-chrome-item">
|
||||
<button
|
||||
|
@ -295,15 +291,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="app-sidebar-notification backgroundNotification"
|
||||
v-if="$root.library.backgroundNotification.show"
|
||||
>
|
||||
<div class="app-sidebar-notification backgroundNotification" v-if="$root.library.backgroundNotification.show" >
|
||||
<div class="message">
|
||||
{{ $root.library.backgroundNotification.message }} ({{
|
||||
$root.library.backgroundNotification.progress
|
||||
}}
|
||||
/ {{ $root.library.backgroundNotification.total }})
|
||||
{{ $root.library.backgroundNotification.message }} ({{$root.library.backgroundNotification.progress }} / {{ $root.library.backgroundNotification.total }})
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -311,6 +301,6 @@
|
|||
|
||||
<script>
|
||||
Vue.component("cider-app-sidebar", {
|
||||
template: "#cider-app-sidebar"
|
||||
template: "#cider-app-sidebar",
|
||||
})
|
||||
</script>
|
||||
|
|
|
@ -33,6 +33,9 @@
|
|||
<button onclick="window.open('https://twitter.com/UseCider')" class="md-btn sponsorBtn twitterBtn"><img
|
||||
src="./assets/twitter.svg" />Twitter
|
||||
</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 class="col">
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<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 class="md-option-line">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue