Media
This plugin provides the ability to record and play back audio files on a device.
Repo: https://github.com/apache/cordova-plugin-media
Installation
- Install the Cordova and Ionic Native plugins:
$ ionic cordova plugin add cordova-plugin-media $ npm install --save @ionic-native/media@4
- Add this plugin to your app's module
Supported platforms
- Android
- Browser
- iOS
- Windows
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 |