npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nativescript-audio-ssi

v4.0.6

Published

NativeScript plugin to record and play audio.

Downloads

7

Readme

npm npm

NativeScript-Audio

NativeScript plugin to play and record audio files for Android and iOS.

This forks from Brad Martin's plugin. It fixes an issue in ios when dispose is called before init from url completes.

Uses the following native classes:

Android

iOS

Note: You will need to grant permissions on iOS to allow the device to access the microphone if you are using the recording function. If you don't, your app may crash on device and/or your app might be rejected during Apple's review routine. To do this, add this key to your app/App_Resources/iOS/Info.plist file:

<key>NSMicrophoneUsageDescription</key>
<string>Recording Practice Sessions</string>

Installation

The plugin is compatible with both Nativescript 3.x and 2.x versions. Install with:

tns plugin add nativescript-audio

Sample Screen

AudioExample

Sample Usage

Just a simple example of how you could reuse player instances for a given file:

import { TNSPlayer } from 'nativescript-audio';

export class YourClass {
	private _player: TNSPlayer;
	
	constructor() {
		this._player = new TNSPlayer();
		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);
	}
}

And a simple javascript example:

var audio = require("nativescript-audio");

var player = new audio.TNSPlayer();
var 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 () {
        console.log("something went wrong...");
    })

API

TNSRecorder

Method | Description -------- | --------- TNSRecorder.CAN_RECORD(): boolean | Determine if ready to record. start(options: AudioRecorderOptions): Promise | Start recording file. stop(): void | Stop recording. pause(): Promise<any> | Pause recording resume(): Promise<any> | Resume recording. dispose(): void | Free up system resources when done with recorder.

TNSPlayer

Method | Description -------- | --------- initFromFile( { audioFile: string, loop: boolean, completeCallback?: Function, errorCallback?: Function, infoCallback?: Function; } ): Promise | Initialize player instance with a file without auto-playing. playFromFile( { audioFile: string, loop: boolean, completeCallback?: Function, errorCallback?: Function, infoCallback?: Function; } ): Promise | Auto-play from a file. initFromUrl( { audioFile: string, loop: boolean, completeCallback?: Function, errorCallback?: Function, infoCallback?: Function; } ): Promise | Initialize player instance from a url without auto-playing. playFromUrl( { audioFile: string, loop: boolean, completeCallback?: Function, errorCallback?: Function, infoCallback?: Function; } ): 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 mediaPlayer. currentTime: number | Get the current time in the media file's duration. volume: void | Get/Set the player volume. Value range from 0 to 1.

You can access the underlying native class instance via ios and android getters on the respective platforms which will return you:

  • AVAudioPlayer on iOS
  • MediaPlayer on Android

Platform specific:

iOS:

playAtTime(time: number): Play at a specific time.

Why the TNS prefixed name?

TNS stands for Telerik NativeScript

iOS uses classes prefixed with NS (stemming from the NeXTSTEP days of old): https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/

To avoid confusion with iOS native classes, TNS is used instead.

License

MIT