Macos fix

This commit is contained in:
Djkáťo 2023-08-04 19:52:44 +02:00
parent b9ea1928b9
commit d45173872b
5 changed files with 41 additions and 27 deletions

View file

@ -1,6 +1,6 @@
{
"name": "@euterpe.js/euterpe",
"version": "1.0.11",
"version": "1.0.13",
"type": "module",
"description": "Fully featured solution for playing music on the web. Support for local library, audio visuals and more!",
"main": "./src/index.js",

View file

@ -1,6 +1,6 @@
{
"name": "@euterpe.js/player",
"version": "1.0.6",
"version": "1.0.8",
"type": "module",
"description": "A simple, safe AudioContext web music player",
"main": "./src/index.js",

View file

@ -122,7 +122,7 @@ export class MusicPlayer {
*/
try_seek_async(new_time: number) {
return new Promise((resolve, reject) => {
if (this.track.context.state == "closed" || this.track.context.state == "suspended") {
if (this.track.context.state !== "running") {
this.is_playing = false
reject(new Error("Can't seek - track not playing"))
}
@ -141,9 +141,9 @@ export class MusicPlayer {
*/
try_play_toggle_async() {
return new Promise((resolve, reject) => {
if (this.audio_context.state === "suspended" || this.audio_context.state === "closed") {
if (this.track.context.state !== "running") {
this.audio_context.resume().then(undefined, (e) =>
reject(new Error("Context closed or suspended" + JSON.stringify(e))))
reject(e))
}
if (this.audio_element.paused) {
this.audio_element.play().then((s) => {
@ -151,7 +151,7 @@ export class MusicPlayer {
resolve(s)
}, (r) => {
this.is_playing = false
reject(new Error("failed to play audio elements" + JSON.stringify(r)))
reject(r)
})
} else {
this.audio_element.pause()
@ -165,7 +165,7 @@ export class MusicPlayer {
*/
play_toggle_async() {
return new Promise((resolve, reject) => {
if (this.audio_context.state === "suspended" || this.audio_context.state === "closed") {
if (this.track.context.state !== "running") {
this.audio_context.resume()
}
if (this.audio_element.paused) {
@ -174,7 +174,7 @@ export class MusicPlayer {
resolve(s)
}, (r) => {
this.is_playing = false
reject(new Error(JSON.stringify(r)))
reject(r)
})
} else {
this.audio_element.pause()
@ -204,14 +204,14 @@ export class MusicPlayer {
try_play_async() {
return new Promise((resolve, reject) => {
if (this.is_playing) resolve(Error("Already playing"))
if (this.audio_context.state === "suspended" || this.audio_context.state === "closed") {
if (this.track.context.state !== "running") {
this.audio_context.resume().then(() => {
this.audio_element.play().then((s) => {
this.is_playing = true
resolve(s)
}, (r) => {
this.is_playing = false
reject(new Error(JSON.stringify(r)))
reject(r)
})
}, (e) =>
reject(new Error("Context closed or suspended" + JSON.stringify(e))))
@ -221,7 +221,7 @@ export class MusicPlayer {
resolve(s)
}, (r) => {
this.is_playing = false
reject(new Error(JSON.stringify(r)))
reject(r)
})
}
})
@ -237,7 +237,7 @@ export class MusicPlayer {
resolve(s)
}, (r) => {
this.is_playing = false
reject(new Error(JSON.stringify(r)))
reject(r)
})
})
}
@ -248,7 +248,7 @@ export class MusicPlayer {
if (this.is_playing) return
this.audio_element.play().catch((r) => {
this.is_playing = false
throw new Error(r)
throw r
})
}
/**
@ -274,12 +274,12 @@ export class MusicPlayer {
this.audio_element.addEventListener("error", function error_listener(e) {
controller.abort()
reject(new Error("Failed to load new song, error:" + JSON.stringify(e)))
reject(e)
}, { signal: controller.signal })
this.audio_element.addEventListener("stalled", function stalled_listener(e) {
controller.abort()
reject(new Error("Failed to load new song, stalled: " + JSON.stringify(e)))
reject(e)
}, { signal: controller.signal })
//once aborted, try to set current_song_duration
@ -408,7 +408,7 @@ export class MusicPlayerBuilder {
constructor(private audio_element: HTMLAudioElement) {
if (audio_element === undefined) throw Error("audio_element was undefined")
// ↓ For old browsers
const AudioContext = window.AudioContext || window.webkitAudioContext;
const AudioContext = window.AudioContext;
this.#audio_context = new AudioContext()
this.#track = this.#audio_context.createMediaElementSource(audio_element)
this.#gain = this.#audio_context.createGain()

View file

@ -8,21 +8,33 @@ import filehound from "filehound"
import { execSync, exec } from 'child_process'
import { fstat, unlinkSync } from "fs"
function generateNewPhotoSizes(file, currentExtention) {
function generate_new_photo_sizes(file, currentExtention) {
exec(`start ffmpeg -y -i "${file}.${currentExtention}" -lossless 0 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_ogw.webp" -vf scale=1000:-1 -lossless 0 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_1000w.webp" -vf scale=800:-1 -lossless 0 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_800w.webp" -vf scale=500:-1 -lossless 0 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_500w.webp" -vf scale=320:-1 -lossless 0 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_320w.webp" -vf scale=-1:64,gblur=sigma=10:steps=2 -lossless 0 -compression_level 6 -quality 85 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_placeholder.webp"`)
}
function generateNewAnimPhotoSizes(file, currentExtention) {
function generate_new_anim_photo_sizes(file, currentExtention) {
exec(`start ffmpeg -y -i "${file}.${currentExtention}" -lossless 0 -frames:v 1 -r 1 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_ogw_static.webp" -vf scale=1000:-1 -lossless 0 -frames:v 1 -r 1 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_1000w_static.webp" -vf scale=800:-1 -lossless 0 -frames:v 1 -r 1 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_800w_static.webp" -vf scale=500:-1 -lossless 0 -frames:v 1 -r 1 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_500w_static.webp" -vf scale=320:-1 -lossless 0 -frames:v 1 -r 1 -quality 85 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_320w_static.webp" -vf scale=-1:64,gblur=sigma=10:steps=2 -lossless 0 -frames:v 1 -r 1 -compression_level 6 -quality 85 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_placeholder_static.webp"`)
exec(`start ffmpeg -y -i "${file}.${currentExtention}" -lossless 0 -quality 85 -loop 0 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_ogw.webp" -vf scale=1000:-1 -lossless 0 -quality 85 -loop 0 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_1000w.webp" -vf scale=800:-1 -lossless 0 -quality 85 -loop 0 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_800w.webp" -vf scale=500:-1 -lossless 0 -quality 85 -loop 0 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_500w.webp" -vf scale=320:-1 -lossless 0 -quality 85 -loop 0 -compression_level 6 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_320w.webp" -vf scale=-1:64,gblur=sigma=10:steps=2 -frames:v 1 -lossless 0 -c:v libwebp -compression_level 6 -quality 85 -metadata author="Djkáťo" -metadata copyright="https://djkato.net" "${file}_placeholder.webp"`)
}
function generateNewSounds(file, currentExtention) {
function generate_new_sounds_ogg(file, currentExtention) {
const path = file.substring(0, file.lastIndexOf("\\"))
file = file.substring(file.lastIndexOf("\\") + 1)
let command = ""
command += `cd "${path}" && start cmd /k "`
command += `ffmpeg -y -i "${file}.${currentExtention}" `
command += `-c:a libopus -b:a 128k "${file}.ogg"`
command += `-c:a libopus -b:a 96k "${file}.ogg"`
command += ` && exit"`
exec(command)
// console.log(command)
}
function generate_new_sounds_mp3(file, currentExtention) {
const path = file.substring(0, file.lastIndexOf("\\"))
file = file.substring(file.lastIndexOf("\\") + 1)
let command = ""
command += `cd "${path}" && start cmd /k "`
command += `ffmpeg -y -i "${file}.${currentExtention}" `
command += `-b:a 160k "${file}.mp3"`
command += ` && exit"`
exec(command)
// console.log(command)
@ -70,25 +82,27 @@ for (let i = 0; i < dirs.length; i++) {
}
for (let current_media of current_folder_files) {
current_media = [current_media.substring(0, current_media.lastIndexOf(".")), current_media.substring(current_media.lastIndexOf(".") + 1)]
if (current_media[1] == "wav" || current_media[1] == "mp3") {
if (current_media[1] == "wav") {
console.log(`${current_media[0]}.${current_media[1]}\n`)
generateNewSounds(`${current_media[0]}`, `${current_media[1]}`)
generate_new_sounds_ogg(`${current_media[0]}`, `${current_media[1]}`)
generate_new_sounds_mp3(`${current_media[0]}`, `${current_media[1]}`)
}
continue
if (current_media[1] == "png" || current_media[1] == "jpg") {
console.log(`.\\${current_media[0]}.${current_media[1]}\n`)
generateNewPhotoSizes(`.\\${current_media[0]}`, `${current_media[1]}`)
generate_new_photo_sizes(`.\\${current_media[0]}`, `${current_media[1]}`)
}
else if (current_media[1] == "gif") {
console.log(`.\\${current_media[0]}.${current_media[1]}\n`)
generateNewAnimPhotoSizes(`.\\${current_media[0]}`, `${current_media[1]}`)
generate_new_anim_photo_sizes(`.\\${current_media[0]}`, `${current_media[1]}`)
}
else if (current_media[1] == "webm" || current_media[1] == "mov" || current_media[1] == "avi" || current_media[1] == "mp4") {
//console.log(`Video: ${current_media[0]}.${current_media[1]}\n`)
console.log(`Video: ${current_media[0]}.${current_media[1]}\n`)
// generateNewVideoSizes(`${current_media[0]}`, `${current_media[1]}`, [2560, 1080, 720, 480])
generateNewVideoSizes(`${current_media[0]}`, `${current_media[1]}`, [2560, 1080, 720, 480])
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@euterpe.js/visualizer",
"version": "1.0.7",
"version": "1.0.8",
"type": "module",
"description": "Music visualizer based on SVG and AudioContext",
"main": "./src/index.js",