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

Звуковой сигнал звуковой записи звуковой дорожки Ionic не работает

Я использую Ionic и хочу записывать аудио в файл, а затем делать что-то с файлом.

Запуск: Galaxy S4

Итак, сначала создаю файл:

await this.file.createFile(this.getFileDirectory(), this.getFileName(), true);

Когда он будет готов, я создам новый экземпляр Media:

this.currentRecording = this.media.create(this.getFilePath());

Прикрепите слушателей к успеху и ошибкам:

this.currentRecording.onSuccess.subscribe((e) => {
  console.log(this.currentRecording.getDuration());
  this.file.readAsArrayBuffer(this.getFileDirectory(), this.getFileName())
          .then(file => console.warn(file))
});
this.currentRecording.onError.subscribe((err) => console.error(err));

Затем я начинаю запись: this.currentRecording.startRecord();

Через несколько секунд я прекращаю запись, this.currentRecording.stopRecord() и выполняется обратный вызов успеха.

В консоли теперь я вижу

-1//console.log(this.currentRecording.getDuration());

ArrayBuffer {}//console.warn(файл);

Я что-то делаю неправильно? Почему он решает к успеху, но без файла и продолжительности?

Edit

Репозитарий репродукции: https://github.com/AmitMY/ionic-media-record-repro

README имеет полные инструкции

4b9b3361

Ответ 1

@Допустим, я клонировал ваше репо и получил те же результаты, что и вы. Некоторое время я занимался этим, там определенно было странное sh * t с медиа-плагином. Я попытаюсь потратить некоторое время на отправку некоторых запросов на растяжение, чтобы добавить несколько функций и исправить несколько неправильных действий, как с помощью getDuration().

Оказывается, функция getDuration() не запрашивает родную часть плагина, какова продолжительность, она возвращает с сохраненным значением в javascript, и это значение обновляется только тогда, когда родной код отправляет сообщение. Таким образом, вы не получите свежее значение текущей продолжительности. Вы можете изменить плагин, чтобы он получил длительность в собственном коде с помощью кордовы exec().

О файле, я начал использовать плагин для файлов, но в итоге его бросил. Пробовал только с плагином для мультимедиа, передавая только имя файла, без пути. Файл хранился в файле /storage/emulated/ 0/file.3gp. Он был записан, имел контент и был доступен для воспроизведения. Я предполагаю, что использование плагина файла и передача полной строки пути заставят его создать файл, в котором вы хотите. Но когда вы проходите тот же путь к медиа-плагину, это не соблюдается, потому что когда я использовал его, файл был выделен, но после записи у него было 0 байт, но все же я мог воспроизводить запись, поэтому он должен был ее где-то сохранить иначе.

Если использование медиа-плагина самостоятельно решает вашу проблему, как это было для меня, отлично! Если это не так, и вы все равно хотите продолжать работать над этим, я предлагаю вам использовать монитор Android в Android Studio для мониторинга собственных сообщений и просмотра кода плагина. Вот как я узнал о вещах.

Надеюсь, что это поможет