Vue 3 Audio Visualizer не работает | Нет ошибок в консоли, звук не играет, холста не обновляетсяJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Vue 3 Audio Visualizer не работает | Нет ошибок в консоли, звук не играет, холста не обновляется

Сообщение Anonymous »

Я строю аудио визуализатор в Vue 3 , используя API Web Audio . Моя настройка использует Pinia для государственного управления. Каждый трек представляет собой объект с свойством аудио (созданного через новый Audio (...) ). Визуализатор - это отдельный компонент (Visualizer.vue< /code>), который подключается к аудиоэлементу текущего трека и опирается на < /p> < /p>
Проблемы: < /p>

Аудио не играет, когда я нажимаю воспроизведение. Правильно. https://github.com/kubakorniluk/audio-v ... erобразное. Ожидается. NextTrack () и prevtrack () из кнопок в компоненте игрока.tracks.js):
const tracks = ref([])
const currentTrack = ref(null)

...

const setTracks = async () => {
const files = import.meta.glob('@/assets/audio/*.wav');

for (const path in files) {
const fileModule = await files[path]();

const audio = new Audio(fileModule.default)

const track = {
id: tracks.value.length,
name: path.split('/').pop(),
src: fileModule.default,
audio: audio,
isPlaying: false,
volume: 1.0,
currentTime: {
total: 0,
minutes: 0,
seconds: 0
},
duration: {
total: 0,
minutes: 0,
seconds: 0
},
}

tracks.value.push(track);

console.log(`Loaded: ${track.name}`, track);

}

currentTrack.value = tracks.value[0];

}

const setCurrentTrack = (id) => {
tracks.value.forEach(track => {
if (track.id === id) {
track.isPlaying = !track.isPlaying;
} else {
track.isPlaying = false;
}
})
currentTrack.value = tracks.value.find(track => track.id === id);
}

const togglePlay = (id) => {
const track = tracks.value.find(t => t.id === id);
if (!track) return;

// If the clicked track is already playing, pause it
if (track.isPlaying) {
track.audio.pause();
track.isPlaying = false;
} else {
// Pause all other tracks
tracks.value.forEach(t => {
if (t.id !== id) {
t.audio.pause();
t.isPlaying = false;
}
});
// Play the selected track
track.audio.play();
track.isPlaying = true;
currentTrack.value = track;
}
};
< /code>
Next & Prev -Functs: < /p>
const nextTrack = () => {
let id = currentTrack.value.id + 1;
if (id >= tracks.value.length) {
id = 0;
}
setCurrentTrack(id);
console.log(currentTrack.value.id)
togglePlay(id);
}
const prevTrack = () => {
let id = currentTrack.value.id - 1;
if (id < 0) {
id = tracks.value.length - 1;
}
setCurrentTrack(id);
console.log(currentTrack.value.id)
togglePlay(id);
}

Часть 2 - Visualizer & Progress Bar
The Progress Bar in player.vue не обновляется по мере воспроизведения звука, даже если текущее время магазина и обновления в консоли. Визуализатор в Visualizer.vue (с использованием API веб -аудио и ) не оживляет и не показывает каких -либо полос, даже когда звук воспроизводится.
Что я проверил:

hore's CurrentTime и Duration Обновление объектов. /> Вычисленное значение строительства строительства в консоли, но UI
не обновляет.

...

const progress = computed(() => {
const track = store.getCurrentTrack;
if (track && track.duration.total > 0) {
return (track.currentTime.total / track.duration.total) * 100;
}
return 0;
});











{{ time }}









{{ checkDuration() }}




< /code>
tracks.js:
const setTracks = async () => {
...

//update track duration
audio.addEventListener("loadedmetadata", (event) => {
let duration = audio.duration;
let minutes = Math.floor(duration / 60);
let seconds = Math.floor(duration % 60);
track.duration.total = duration;
track.duration.seconds = seconds;
track.duration.minutes = minutes;
});

// update track position
audio.addEventListener("timeupdate", (event) => {
let time = audio.currentTime;
let minutes = Math.floor(time / 60);
let seconds = Math.floor(time % 60);
track.currentTime.total = time;
track.currentTime.seconds = seconds;
track.currentTime.minutes = minutes;
});
audio.load();

// Check if metadata is already loaded
if (audio.readyState >= 1) {
let duration = audio.duration;
let minutes = Math.floor(duration / 60);
let seconds = Math.floor(duration % 60);
track.duration.seconds = seconds;
track.duration.minutes = minutes;
}

tracks.value.push(track);

console.log(`Loaded: ${track.name}`, track);

}

currentTrack.value = tracks.value[0];

}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ot-playing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»