Плагин аудиоплеера воспроизводит звук URL, но не воспроизводит локальный звуковой файл - PullRequest
0 голосов
/ 26 июня 2019

Я использую NativeScript с Angular 2 и новейший рабочий процесс Webpack, а также симулятор iOS.Я использую плагин nativescript-audio для воспроизведения звуковых файлов при нажатии кнопки.

Моя цель - воспроизводить встроенные в приложение локальные звуковые файлы без использования интернет-соединения для их потоковой передачи или загрузки их в первую очередь.

Я скачал и попробовал каждое демонстрационное приложение, которое я могу найти, и точно следовал инструкциям в моем собственном приложении, но я могу заставить плагин воспроизводить звук только при ссылке на звуковой файл на веб-сервере где-нибудьостальное.Попытка воспроизведения mp3-файла, хранящегося локально, не работает.

Я также использовал модуль tns-core-modules / file-system для поиска файла, на который я ссылался, но я нигде не могу найти файлв скомпилированном приложении.Кажется, что файл просто даже не включается в процесс сборки, и я понятия не имею, почему.

Все примеры приложений, которые я нашел, воспроизводят только файлы, хранящиеся на сервере.Все они также используют устаревший рабочий процесс Legacy, и ни один из них не использует систему Angular 2.

Вот мой файл component.html:

<ActionBar class="action-bar">
  <Label class="action-bar-title" text="Sound Page"></Label>
</ActionBar>

<StackLayout orientation="vertical" width="100%" height="100%">
  <Button class="btn btn-primary btn-rounded-sm" id="playButton" text="Play Sound"
    (tap)="onPlayTap($event)"></Button>
</StackLayout>

Вот мой компонент Angular 2.ts file:

import { Component } from "@angular/core"
import { TNSPlayer } from "nativescript-audio"

const player = new TNSPlayer()
const playerOptions =
{
  audioFile: "~/audio/session_1.mp3",
  loop: false,
  autoplay: false
}

@Component({
  selector: "SongPage",
  moduleId: module.id,
  templateUrl: "./song-page.component.html"
})
export class SongPageComponent {

  constructor()
  {
    player
      .initFromFile(playerOptions)
      .then(res => console.log(res))
      .catch(err => console.log("something went wrong...", err))
  }

  onPlayTap() { player.play() }
}

Вместо воспроизведения звукового файла я получаю сообщение об ошибке из обещания player.initFromFile:

Файл журнала CONSOLE: ///app/vendor.js:59907: 39: что-то пошло не так ... Ошибка Domain = NSOSStatusErrorDomain Code = 2003334207 "(null)"

И ошибка системы: файл CONSOLE ERROR: ///app/vendor.js: 41405:24: ОШИБКА Ошибка: Uncaught (в обещании): TypeError: null не является объектом (оценка '_this._player.play')

Из того, что я понимаю, ошибки говорят мне, что он не может найтифайл, который, кажется, имеет смысл, потому что когда я открываю файл скомпилированного приложения, я нигде не могу найти звуковой файл.

  1. Что-то не так с моим кодом?
  2. Если нет, как мне убедиться, что файл включен в скомпилированный файл приложения и сделать suплагин может его найти?

1 Ответ

0 голосов
/ 26 июня 2019

Убедитесь, что ваш аудиофайл объединен во время сборки, конфигурация сборки по умолчанию не включает файлы mp3, а содержит только файлы изображений, шрифты и ресурсы.

webpack.config.js

        // Copy assets to out dir. Add your own globs as needed.
        new CopyWebpackPlugin(
            [
                { from: { glob: "assets/**" } },
                { from: { glob: "fonts/**" } },
                { from: { glob: "**/*.jpg" } },
                { from: { glob: "**/*.png" } },
                { from: { glob: "audio/**" } },
            ],
            { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] },
        ),

Обновление конфигурации CopyWebpackPlugin с помощью { from: { glob: "audio/**" } }, также объединит вашу аудио папку во время сборки.

...