-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Feature/pitch shifter plugin #4043
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit
eslint
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| // π¨ βββββββββββββββ Plugin Stylesheet βββββββββββββββ |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| /** Inline CSS loaded into the YT Music renderer for consistent styling. */ |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| /** Inline CSS loaded into the YT Music renderer for consistent styling. */ |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| stylesheets: [style], |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| stylesheets: [style], |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| // π§ βββββββββββββββ Renderer Logic βββββββββββββββ |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| // π§ βββββββββββββββ Renderer Logic βββββββββββββββ |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| /** |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| /** |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| * The renderer is triggered once the YouTube Music player API is available. |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| * The renderer is triggered once the YouTube Music player API is available. |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| * It handles all DOM interactions, UI injection, and audio processing. |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| * It handles all DOM interactions, UI injection, and audio processing. |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| */ |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| */ |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| renderer: { |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| renderer: { |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉβΉ with Β·Β·Β·Β·
| onPlayerApiReady, |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| onPlayerApiReady, |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| }, |
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| }, |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "solid-js" with 'solid-js'
| import { createSignal, onCleanup, createEffect } from "solid-js"; |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| import { createSignal, onCleanup, createEffect } from "solid-js"; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "solid-js/web" with 'solid-js/web'
| import { render } from "solid-js/web"; |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| import { render } from "solid-js/web"; |
π« [eslint] <importPlugin/order> reported by reviewdog πΆ
There should be at least one empty line between import groups
| import * as Tone from "tone"; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "tone" with 'tone'
| import * as Tone from "tone"; |
π« [eslint] <importPlugin/no-unresolved> reported by reviewdog πΆ
Unable to resolve path to module 'tone'.
| import * as Tone from "tone"; |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| import * as Tone from "tone"; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "@/types/contexts" with '@/types/contexts'
| import type { RendererContext } from "@/types/contexts"; |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| import type { RendererContext } from "@/types/contexts"; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "./index" with './index'
| import type { PitchShifterPluginConfig } from "./index"; |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| import type { PitchShifterPluginConfig } from "./index"; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Insert ,
| { getConfig, setConfig }: RendererContext<PitchShifterPluginConfig> |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "[pitch-shifter]Β·RendererΒ·(Solid)Β·initializedΒ·β
" with '[pitch-shifter]Β·RendererΒ·(Solid)Β·initializedΒ·β
'
| console.log("[pitch-shifter] Renderer (Solid) initialized β "); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| console.log("[pitch-shifter] Renderer (Solid) initialized β "); |
π« [eslint] <@typescript-eslint/no-redundant-type-constituents> reported by reviewdog πΆ
'PitchShift' is an 'error' type that acts as 'any' and overrides all other types in this union type.
| let pitchShift: Tone.PitchShift | null = null; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "video" with 'video'
| document.querySelector("video") || |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| document.querySelector("video") || |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "audio" with 'audio'
| document.querySelector("audio") || |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| document.querySelector("audio") || |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "ytmusic-playerΒ·video" with 'ytmusic-playerΒ·video'
| document.querySelector("ytmusic-player video"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| document.querySelector("ytmusic-player video"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "[pitch-shifter]Β·MediaΒ·foundΒ·π§" with '[pitch-shifter]Β·MediaΒ·foundΒ·π§'
| console.log("[pitch-shifter] Media found π§", media); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| console.log("[pitch-shifter] Media found π§", media); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) error type typed value.
| await Tone.start(); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .start on an error typed value.
| await Tone.start(); |
π« [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog πΆ
Unsafe assignment of an error typed value.
| const toneCtx = Tone.getContext(); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) error type typed value.
| const toneCtx = Tone.getContext(); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .getContext on an error typed value.
| const toneCtx = Tone.getContext(); |
π« [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog πΆ
Unsafe assignment of an any value.
pear-desktop/src/plugins/pitch-shifter/renderer.tsx
Lines 50 to 51 in 67d6b05
| const stream = | |
| (media as any).captureStream?.() || (media as any).mozCaptureStream?.(); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) any typed value.
| (media as any).captureStream?.() || (media as any).mozCaptureStream?.(); |
π« [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog πΆ
Unexpected any. Specify a different type.
| (media as any).captureStream?.() || (media as any).mozCaptureStream?.(); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .captureStream on an any value.
| (media as any).captureStream?.() || (media as any).mozCaptureStream?.(); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) any typed value.
| (media as any).captureStream?.() || (media as any).mozCaptureStream?.(); |
π« [eslint] <@typescript-eslint/no-explicit-any> reported by reviewdog πΆ
Unexpected any. Specify a different type.
| (media as any).captureStream?.() || (media as any).mozCaptureStream?.(); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .mozCaptureStream on an any value.
| (media as any).captureStream?.() || (media as any).mozCaptureStream?.(); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "[pitch-shifter]Β·βΒ·captureStream()Β·unavailable" with '[pitch-shifter]Β·βΒ·captureStream()Β·unavailable'
| console.error("[pitch-shifter] β captureStream() unavailable"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| console.error("[pitch-shifter] β captureStream() unavailable"); |
π« [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog πΆ
Unsafe assignment of an error typed value.
pear-desktop/src/plugins/pitch-shifter/renderer.tsx
Lines 60 to 63 in 67d6b05
| pitchShift = new Tone.PitchShift({ | |
| pitch: semitones(), | |
| windowSize: 0.1, | |
| }).toDestination(); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) error type typed value.
pear-desktop/src/plugins/pitch-shifter/renderer.tsx
Lines 60 to 63 in 67d6b05
| pitchShift = new Tone.PitchShift({ | |
| pitch: semitones(), | |
| windowSize: 0.1, | |
| }).toDestination(); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe construction of a(n) error type typed value.
pear-desktop/src/plugins/pitch-shifter/renderer.tsx
Lines 60 to 63 in 67d6b05
| pitchShift = new Tone.PitchShift({ | |
| pitch: semitones(), | |
| windowSize: 0.1, | |
| }).toDestination(); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .PitchShift on an error typed value.
| pitchShift = new Tone.PitchShift({ |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .toDestination on an error typed value.
| }).toDestination(); |
π« [eslint] <@typescript-eslint/no-unsafe-assignment> reported by reviewdog πΆ
Unsafe assignment of an error typed value.
| nativeSource = toneCtx.createMediaStreamSource(stream); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) error type typed value.
| nativeSource = toneCtx.createMediaStreamSource(stream); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .createMediaStreamSource on an error typed value.
| nativeSource = toneCtx.createMediaStreamSource(stream); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) error type typed value.
| Tone.connect(nativeSource, pitchShift); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .connect on an error typed value.
| Tone.connect(nativeSource, pitchShift); |
π« [eslint] <@typescript-eslint/no-unnecessary-type-assertion> reported by reviewdog πΆ
This assertion is unnecessary since it does not change the type of the expression.
| media!.muted = true; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "[pitch-shifter]Β·PitchΒ·processorΒ·activeΒ·πΆ" with '[pitch-shifter]Β·PitchΒ·processorΒ·activeΒ·πΆ'
| console.log("[pitch-shifter] Pitch processor active πΆ"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| console.log("[pitch-shifter] Pitch processor active πΆ"); |
π« [eslint] <@typescript-eslint/no-unsafe-call> reported by reviewdog πΆ
Unsafe call of a(n) error type typed value.
| pitchShift?.dispose(); |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .dispose on an error typed value.
| pitchShift?.dispose(); |
π« [eslint] <@typescript-eslint/no-unnecessary-type-assertion> reported by reviewdog πΆ
This assertion is unnecessary since it does not change the type of the expression.
| media!.muted = false; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "[pitch-shifter]Β·PitchΒ·processorΒ·stoppedΒ·π΄" with '[pitch-shifter]Β·PitchΒ·processorΒ·stoppedΒ·π΄'
| console.log("[pitch-shifter] Pitch processor stopped π΄"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| console.log("[pitch-shifter] Pitch processor stopped π΄"); |
Unexpected mix of '+' and '*'. Use parentheses to clarify the intended order of operations.
| color = cold.map((c, i) => Math.round(c + (neutral[i] - c) * t)); |
Unexpected mix of '+' and '*'. Use parentheses to clarify the intended order of operations.
| color = cold.map((c, i) => Math.round(c + (neutral[i] - c) * t)); |
Unexpected mix of '+' and '*'. Use parentheses to clarify the intended order of operations.
| color = neutral.map((c, i) => Math.round(c + (warm[i] - c) * t)); |
Unexpected mix of '+' and '*'. Use parentheses to clarify the intended order of operations.
| color = neutral.map((c, i) => Math.round(c + (warm[i] - c) * t)); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "," with ','
| return `linear-gradient(90deg, rgb(${color.join(",")}) 0%, #fff 100%)`; |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| return `linear-gradient(90deg, rgb(${color.join(",")}) 0%, #fff 100%)`; |
π« [eslint] <stylistic/jsx-sort-props> reported by reviewdog πΆ
Props should be sorted alphabetically
| min="-12" |
π« [eslint] <stylistic/jsx-sort-props> reported by reviewdog πΆ
Props should be sorted alphabetically
| max="12" |
π« [eslint] <stylistic/jsx-sort-props> reported by reviewdog πΆ
Props should be sorted alphabetically
| step="1" |
π« [eslint] <stylistic/jsx-sort-props> reported by reviewdog πΆ
Props should be sorted alphabetically
| class="pitch-slider" |
π« [eslint] <stylistic/jsx-sort-props> reported by reviewdog πΆ
Props should be sorted alphabetically
| onInput={(e) => { |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .pitch on an error typed value.
| if (pitchShift) pitchShift.pitch = v; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace ".pitch-label" with '.pitch-label'
| const labelEl = document.querySelector(".pitch-label"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| const labelEl = document.querySelector(".pitch-label"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "active" with 'active'
| labelEl.classList.add("active"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| labelEl.classList.add("active"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "active" with 'active'
| setTimeout(() => labelEl.classList.remove("active"), 200); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| setTimeout(() => labelEl.classList.remove("active"), 200); |
π« [eslint] <stylistic/jsx-sort-props> reported by reviewdog πΆ
Props should be sorted alphabetically
| ref={(el) => updateSliderColor(el, semitones())} |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "+"Β·:Β·"" with '+'Β·:Β·''
| {semitones() >= 0 ? "+" : ""} |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| {semitones() >= 0 ? "+" : ""} |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| {semitones() >= 0 ? "+" : ""} |
π« [eslint] <stylistic/jsx-sort-props> reported by reviewdog πΆ
Props should be sorted alphabetically
| onClick={() => { |
π« [eslint] <@typescript-eslint/no-unsafe-member-access> reported by reviewdog πΆ
Unsafe member access .pitch on an error typed value.
| if (pitchShift) pitchShift.pitch = 0; |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace ".pitch-slider" with '.pitch-slider',
| ".pitch-slider" |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| ".pitch-slider" |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace ".pitch-label" with '.pitch-label'
| const labelEl = document.querySelector(".pitch-label"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| const labelEl = document.querySelector(".pitch-label"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "active" with 'active'
| labelEl.classList.add("active"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| labelEl.classList.add("active"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "active" with 'active'
| setTimeout(() => labelEl.classList.remove("active"), 200); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| setTimeout(() => labelEl.classList.remove("active"), 200); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "tp-yt-paper-tabs.tab-header-container" with βΒ·Β·Β·Β·Β·Β·'tp-yt-paper-tabs.tab-header-container',βΒ·Β·Β·Β·
| const tabs = document.querySelector("tp-yt-paper-tabs.tab-header-container"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| const tabs = document.querySelector("tp-yt-paper-tabs.tab-header-container"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace tabsΒ·&&Β·tabs.parentElementΒ·&&Β·!document.querySelector(".pitch-wrapper") with βΒ·Β·Β·Β·Β·Β·tabsΒ·&&βΒ·Β·Β·Β·Β·Β·tabs.parentElementΒ·&&βΒ·Β·Β·Β·Β·Β·!document.querySelector('.pitch-wrapper')βΒ·Β·Β·Β·
| if (tabs && tabs.parentElement && !document.querySelector(".pitch-wrapper")) { |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| if (tabs && tabs.parentElement && !document.querySelector(".pitch-wrapper")) { |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "div" with 'div'
| mount = document.createElement("div"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| mount = document.createElement("div"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "[pitch-shifter]Β·UIΒ·injectedΒ·viaΒ·SolidΒ·β
" with '[pitch-shifter]Β·UIΒ·injectedΒ·viaΒ·SolidΒ·β
'
| console.log("[pitch-shifter] UI injected via Solid β "); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| console.log("[pitch-shifter] UI injected via Solid β "); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace ".pitch-wrapper" with '.pitch-wrapper'
| const existing = document.querySelector(".pitch-wrapper"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| const existing = document.querySelector(".pitch-wrapper"); |
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace "[pitch-shifter]Β·UIΒ·removedΒ·β" with '[pitch-shifter]Β·UIΒ·removedΒ·β'
| console.log("[pitch-shifter] UI removed β"); |
π« [eslint] <stylistic/quotes> reported by reviewdog πΆ
Strings must use singlequote.
| console.log("[pitch-shifter] UI removed β"); |
|
|
||
| /** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Delete β
| /** | |
| /** |
| * allowing users to raise or lower the key of a song dynamically. | ||
| */ | ||
| export type PitchShifterPluginConfig = { | ||
| /** Whether the plugin is enabled (active in the player). */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| /** Whether the plugin is enabled (active in the player). */ | |
| /** Whether the plugin is enabled (active in the player). */ |
| * allowing users to raise or lower the key of a song dynamically. | ||
| */ | ||
| export type PitchShifterPluginConfig = { | ||
| /** Whether the plugin is enabled (active in the player). */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| */ | ||
| export type PitchShifterPluginConfig = { | ||
| /** Whether the plugin is enabled (active in the player). */ | ||
| enabled: boolean; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| enabled: boolean; | |
| enabled: boolean; |
| */ | ||
| export type PitchShifterPluginConfig = { | ||
| /** Whether the plugin is enabled (active in the player). */ | ||
| enabled: boolean; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| // βοΈ βββββββββββββββ Default Configuration βββββββββββββββ | ||
| config: { | ||
| enabled: false, // Plugin starts disabled by default | ||
| semitones: 0, // Neutral pitch (no shift) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉβΉsemitones:Β·0,Β·Β· with Β·Β·Β·Β·semitones:Β·0,
| semitones: 0, // Neutral pitch (no shift) | |
| semitones: 0, // Neutral pitch (no shift) |
| // βοΈ βββββββββββββββ Default Configuration βββββββββββββββ | ||
| config: { | ||
| enabled: false, // Plugin starts disabled by default | ||
| semitones: 0, // Neutral pitch (no shift) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| config: { | ||
| enabled: false, // Plugin starts disabled by default | ||
| semitones: 0, // Neutral pitch (no shift) | ||
| } as PitchShifterPluginConfig, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| } as PitchShifterPluginConfig, | |
| } as PitchShifterPluginConfig, |
| config: { | ||
| enabled: false, // Plugin starts disabled by default | ||
| semitones: 0, // Neutral pitch (no shift) | ||
| } as PitchShifterPluginConfig, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <stylistic/no-tabs> reported by reviewdog πΆ
Unexpected tab character.
| semitones: 0, // Neutral pitch (no shift) | ||
| } as PitchShifterPluginConfig, | ||
|
|
||
| // π¨ βββββββββββββββ Plugin Stylesheet βββββββββββββββ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π« [eslint] <prettier/prettier> reported by reviewdog πΆ
Replace βΉ with Β·Β·
| // π¨ βββββββββββββββ Plugin Stylesheet βββββββββββββββ | |
| // π¨ βββββββββββββββ Plugin Stylesheet βββββββββββββββ |
β¨ Add Pitch Shifter plugin
π§© Overview
This pull request introduces a brand new Pitch Shifter plugin for Pear Music.
It allows users to adjust the pitch (key) of songs in real time, using
Tone.jsfor audio processing.π Features
π§ Implementation Details
captureStream()from YouTube Musicβs<video>element to process live audio.Tone.PitchShiftnode to change pitch without altering tempo.Solid.jsfor declarative reactivity and cleaner lifecycle handling.π Localization
The plugin includes translations for:
en.jsonπ¬π§ (English)fr.jsonπ«π· (French)Other languages can easily be added later to match Pearβs
i18nsystem.π§ͺ Testing
β Successfully tested on:
Pitch shifting updates instantly in real time, with no noticeable latency or distortion.
π Notes
.pitch-*classes for isolation.π§βπ» Author
Developed and tested by TheSakyo