Giter Site home page Giter Site logo

nativescript-audioplay's Introduction

NativeScript plugin to play audio files for Android and iOS.

Ported from nativescript-audio (v4.3.5) to require lesser permissions for audio playback only. All credits go to original project contributors

npm npm-downloads license

Installation

tns plugin add nativescript-audioplay


Android Native Classes

iOS Native Classes

Usage

TypeScript Example

import { TNSPlayer } from 'nativescript-audioplay';

export class YourClass {
  private _player: TNSPlayer;

  constructor() {
    this._player = new TNSPlayer();
    this._player.debug = true; // set true to enable TNSPlayer console logs for debugging.
    this._player
      .initFromFile({
        audioFile: '~/audio/song.mp3', // ~ = app directory
        loop: false,
        completeCallback: this._trackComplete.bind(this),
        errorCallback: this._trackError.bind(this)
      })
      .then(() => {
        this._player.getAudioTrackDuration().then(duration => {
          // iOS: duration is in seconds
          // Android: duration is in milliseconds
          console.log(`song duration:`, duration);
        });
      });
  }

  public togglePlay() {
    if (this._player.isAudioPlaying()) {
      this._player.pause();
    } else {
      this._player.play();
    }
  }

  private _trackComplete(args: any) {
    console.log('reference back to player:', args.player);
    // iOS only: flag indicating if completed succesfully
    console.log('whether song play completed successfully:', args.flag);
  }

  private _trackError(args: any) {
    console.log('reference back to player:', args.player);
    console.log('the error:', args.error);
    // Android only: extra detail on error
    console.log('extra info on the error:', args.extra);
  }
}

Javascript Example:

const audio = require('nativescript-audioplay');

const player = new audio.TNSPlayer();
const playerOptions = {
  audioFile: 'http://some/audio/file.mp3',
  loop: false,
  completeCallback: function() {
    console.log('finished playing');
  },
  errorCallback: function(errorObject) {
    console.log(JSON.stringify(errorObject));
  },
  infoCallback: function(args) {
    console.log(JSON.stringify(args));
  }
};

player
  .playFromUrl(playerOptions)
  .then(function(res) {
    console.log(res);
  })
  .catch(function(err) {
    console.log('something went wrong...', err);
  });

API

TNSPlayer Methods

Method Description
initFromFile(options: AudioPlayerOptions): Promise Initialize player instance with a file without auto-playing.
playFromFile(options: AudioPlayerOptions): Promise Auto-play from a file.
initFromUrl(options: AudioPlayerOptions): Promise Initialize player instance from a url without auto-playing.
playFromUrl(options: AudioPlayerOptions): Promise Auto-play from a url.
pause(): Promise<boolean> Pause playback.
resume(): void Resume playback.
seekTo(time:number): Promise<boolean> Seek to position.
dispose(): Promise<boolean> Free up resources when done playing audio.
isAudioPlaying(): boolean Determine if player is playing.
getAudioTrackDuration(): Promise<string> Duration of media file assigned to the player.
playAtTime(time: number): void - iOS Only Play audio track at specific time of duration.
changePlayerSpeed(speed: number): void - On Android Only API 23+ Change the playback speed of the media player.

TNSPlayer Instance Properties

Property Description
ios Get the native ios AVAudioPlayer instance.
android Get the native android MediaPlayer instance.
debug: boolean Set true to enable debugging console logs (default false).
currentTime: number Get the current time in the media file's duration.
volume: number Get/Set the player volume. Value range from 0 to 1.

License

MIT

Credits

nativescript-audio

nativescript-audioplay's People

Contributors

mehyaa avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

nativescript-audioplay's Issues

Allow background audio play on iOs

Hi there, this port is great it just needs background audio when a iOs device is blocked or the screen turns off.

I saw the code at nstudio has been updated to run in this mode and seems to be an easy fix.
The six line change occurs in in ios/player.ts:

playFromUrl function change this:

let audioSession = AVAudioSession.sharedInstance();
let output = audioSession.currentRoute.outputs.lastObject.portType;

to this:

let audioSession = AVAudioSession.sharedInstance();
audioSession.setCategoryWithOptionsError(
  AVAudioSessionCategoryAmbient,
  AVAudioSessionCategoryOptions.DuckOthers
);
let output = audioSession.currentRoute.outputs.lastObject.portType;

and in playFromFile function change this:

let audioSession = AVAudioSession.sharedInstance();
let output = audioSession.currentRoute.outputs.lastObject.portType;
TNS_Player_Log('output', output);

to this:

let audioSession = AVAudioSession.sharedInstance();
audioSession.setCategoryWithOptionsError(
  AVAudioSessionCategoryAmbient,
  AVAudioSessionCategoryOptions.DuckOthers
);
let output = audioSession.currentRoute.outputs.lastObject.portType;
TNS_Player_Log('output', output);

I hope this helps someone else who has to dig around this issue.

check more information at nstudio/nativescript-audio#19

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.