The 2017 Ionic Developer Survey Results are in!

Media

Improve this doc

This plugin provides the ability to record and play back audio files on a device.

Repo: https://github.com/apache/cordova-plugin-media

Installation

  1. Install the Cordova and Ionic Native plugins:
    $ ionic cordova plugin add cordova-plugin-media
    $ npm install --save @ionic-native/media
    
  2. Add this plugin to your app's module

Supported platforms

Usage

import { Media, MediaObject } from '@ionic-native/media';


constructor(private media: Media) { }


...


// Create a Media instance.  Expects path to file or url as argument
// We can optionally pass a second argument to track the status of the media

const file: MediaObject = this.media.create('file.mp3');

// to listen to plugin events:

file.onStatusUpdate.subscribe(status => console.log(status)); // fires when file status changes

file.onSuccess.subscribe(() => console.log('Action is successful'));

file.onError.subscribe(error => console.log('Error!', error));

// play the file
file.play();

// pause the file
file.pause();

// get current playback position
file.getCurrentPosition().then((position) => {
  console.log(position);
});

// get file duration
let duration = file.getDuration();
console.log(duration);

// skip to 10 seconds (expects int value in ms)
file.seekTo(10000);

// stop playing the file
file.stop();

// release the native audio resource
// Platform Quirks:
// iOS simply create a new instance and the old one will be overwritten
// Android you must call release() to destroy instances of media when you are done
file.release();



// Recording to a file
const file: MediaObject = this.media.create('path/to/file.mp3');

file.startRecord();

file.stopRecord();

Some hints if you are using iOS and recording doesn't work: 1.) Try to use a absolute file path but remove beginning "file://". Then it looks like: /var/mobile/Containers/Data/Application/AF438B8B-7724-4FBB-8E69-083463224FC4/tmp/my_file.m4a Example: this.media.create(this.file.tempDirectory.replace(/^file:\/\//, '') + 'my_file.m4a') 2.) If that's not working, too, create the file before using. Example:

import { Media, MediaObject } from '@ionic-native/media';
import { File } from '@ionic-native/file';

...

constructor(private media: Media, private file: File) { }

...

this.file.createFile(this.file.tempDirectory, 'my_file.m4a', true).then(() => {
  let file = this.media.create(this.file.tempDirectory.replace(/^file:\/\//, '') + 'my_file.m4a');
  file.startRecord();
  window.setTimeout(() => file.stopRecord(), 10000);
});

You can find the reasons here: https://github.com/ionic-team/ionic-native/issues/1452#issuecomment-299605906

Instance Members

create(src)

Open a media file

Param Type Details
src string

A URI containing the audio content.

Returns: MediaObject

MediaObject

Instance Members

onSuccess()

An observable that notifies you on actions success

onError()

An observable that notifies you when an error occurs

onStatusUpdate()

An observable that notifies you when the file status changes

getCurrentAmplitude()

Get the current amplitude of the current recording.

Returns: Promise<any> Returns a promise with the amplitude of the current recording

getCurrentPosition()

Get the current position within an audio file. Also updates the Media object’s position parameter.

Returns: Promise<any> Returns a promise with the position of the current recording

getDuration()

Get the duration of an audio file in seconds. If the duration is unknown, it returns a value of -1.

Returns: number Returns a promise with the duration of the current recording

play()

Starts or resumes playing an audio file.

pause()

Pauses playing an audio file.

release()

Releases the underlying operating system’s audio resources. This is particularly important for Android, since there are a finite amount of OpenCore instances for media playback. Applications should call the release function for any Media resource that is no longer needed.

seekTo(milliseconds)

Sets the current position within an audio file.

Param Type Details
milliseconds number

The time position you want to set for the current audio file

setVolume(volume)

Set the volume for an audio file.

Param Type Details
volume number

The volume to set for playback. The value must be within the range of 0.0 to 1.0.

setRate()

startRecord()

Starts recording an audio file.

stopRecord()

Stops recording

pauseRecord()

Pauses recording

resumeRecord()

Resumes recording

stop()

Stops playing an audio file.

MediaError

Param Type Details
message string

Error message

code number

Error code

API

Native

General