#javascript #angular #html #html5-audio #howler.js
#javascript #angular #HTML #html5-аудио #howler.js
Вопрос:
итак, я работаю с Angular 7, и я создал приложение, которое использует api, я создал http-перехватчик, и все мои функции crud работают нормально, http-перехватчик технически добавляет токен к каждому запросу. итак, проблема, с которой я столкнулся, заключается в том, что когда я добавил HowlerJs, я получил ошибку 401, и я изучил это, и я не смог найти решение для этого. вот мой код:
public play_audio_file(id: string) {
this.httpClient.get(`${this.Url}/${id}/audiofile`, {
responseType: "blob",
headers: {
'Accept': 'audio/*',
'Authorization': `Bearer ${this.token}`
}
})
.subscribe(blob => {
var sound = new Howl({
src: `${this.Url}/${id}/audiofile`,
format: ['wav'],
});
sound.play();
console.log(sound)
});
}
пожалуйста, обратите внимание, что мне не обязательно работать с howler, все, что я пытаюсь сделать, это воспроизвести аудио, даже с помощью аудиоплеера HTML,
любая помощь будет оценена
Ответ №1:
Итак, я был НЕПРАВ… все неправильно, и я должен найти решение, я получил 401, потому что я делаю 2 вызова, один из httpclient и из howlerJS, один из httpclient имеет токен, но второй не имеет токена и, таким образом, приводит к ошибке -401 — поэтому я изменил свой код на следующий :
public play_audio_file(id: string) {
var xhr = new XMLHttpRequest();
var url = `${this.Url}/${id}/audiofile`;
xhr.open('GET', encodeURI(url), true);
xhr.setRequestHeader('Authorization', `Bearer ${this.token`);
xhr.responseType = 'blob';
xhr.onload = function (evt) {
var blob = new Blob([xhr.response], { type: 'audio/*' });
var objectUrl = URL.createObjectURL(blob);
var sound = new Howl({
src: objectUrl,
format: ['wav'],
});
sound.play();
//OR with web audio API
// var audio = new Audio();
// audio.src = objectUrl;
// audio.onload = function (evt) {
// URL.revokeObjectURL(objectUrl);
// };
// audio.play();
};
xhr.send();
}
Или даже лучше с HttpClient :
public play_audio_file(id: string) {
this.httpClient.get(`${this.Url}/${id}/audiofile`, { responseType: "blob", headers: { 'Accept': 'audio/*' } })
.subscribe(blob => {
var objectUrl = URL.createObjectURL(blob);
var sound = new Howl({
src: objectUrl,
format: ['wav'],
});
sound.play();
//OR with web audio API
// var audio = new Audio();
// audio.src = objectUrl;
// audio.onload = function (evt) {
// URL.revokeObjectURL(objectUrl);
// };
// audio.play();
});
}