Подтвердить что ты не робот

Открыть локальный файл в электронном и рендеринге в waveurfer.js

Я работаю над приложением, созданным с помощью электрона, он должен работать с waveurfer.js для отображения формы сигнала, представляющей аудиофайл. Тем не менее, у меня возникли проблемы с открытием файла с помощью модуля fs и нажатия содержимого файла для waveurfer через Blob. Файл загружается, и все, кажется, работает, но когда декодирование waveurfer говорит Error decoding audiobuffer.

Две вещи, которые, как я думал, могут повлиять на это:

  • Функция fs.readFile принимает кодировку как второй параметр
  • Конструктор Blob принимает объект опций в качестве второго параметра, в то время как вы можете определить тип mimetype с помощью свойства type

Однако до сих пор оба подхода не смогли устранить проблему.

Я надеюсь, что у кого-то есть решение. (Также может быть функция fs.readFile - это совершенно неправильный путь, и там гораздо лучший способ: я просто ищу относительно эффективный способ открытия файла, любая помощь приветствуется) Cheers!

Здесь код...

(Я оставляю все электронные шаблоны, вы можете легко получить его, выполнив git clone https://github.com/sindresorhus/electron-boilerplate/). Включите тег script в main.js в index.html, добавьте div с id wave-area где-нибудь в html и добавьте тег script в библиотеку waveurfer.js. Также вам понадобится локальная копия демонстрационного wav файла.

Затем в файле main.js...

var fs = require('fs');

var wavesurfer = Object.create(WaveSurfer);
wavesurfer.init({
  container: '#wave-area'
});

fs.readFile('/path/to/demo.wav', function(err, data) {
  if (data && !err) {
    console.log('has data and no error!');
  }
  var file = new window.Blob([data]);
  wavesurfer.loadBlob(file);
}

wavesurfer.on('loading', function(e) {
  console.log('loading', e);
});

wavesurfer.on('error', function(err) {
  console.log(err);
});
4b9b3361

Ответ 1

Наконец-то я нашел решение! BLOB, который передается для волнения через метод loadBlob, должен преобразовываться в Uint8Array

Рабочий код выглядит следующим образом:

fs.readFile('/path/to/demo.wav', function(err, buffer) {
  // …
  var blob = new window.Blob([new Uint8Array(buffer)]);
  wavesurfer.loadBlob(blob);
}