blob: 5b8e7efa8e94d63c3a9c21017589034825eac154 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
/*global Windows:true */
var cordova = require('cordova'),
Media = require('cordova/plugin/Media');
var MediaError = require('cordova/plugin/MediaError');
module.exports = {
mediaCaptureMrg:null,
// Initiates the audio file
create:function(win, lose, args) {
var id = args[0];
var src = args[1];
var thisM = Media.get(id);
Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_STARTING);
Media.prototype.node = null;
var fn = src.split('.').pop(); // gets the file extension
if (thisM.node === null) {
if (fn === 'mp3' || fn === 'wma' || fn === 'wma' ||
fn === 'cda' || fn === 'adx' || fn === 'wm' ||
fn === 'm3u' || fn === 'wmx') {
thisM.node = new Audio(src);
thisM.node.load();
var dur = thisM.node.duration;
if (isNaN(dur)) {
dur = -1;
}
Media.onStatus(id, Media.MEDIA_DURATION, dur);
}
else {
lose && lose({code:MediaError.MEDIA_ERR_ABORTED});
}
}
},
// Start playing the audio
startPlayingAudio:function(win, lose, args) {
var id = args[0];
//var src = args[1];
//var options = args[2];
Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_RUNNING);
(Media.get(id)).node.play();
},
// Stops the playing audio
stopPlayingAudio:function(win, lose, args) {
var id = args[0];
try {
(Media.get(id)).node.pause();
(Media.get(id)).node.currentTime = 0;
Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_STOPPED);
win();
} catch (err) {
lose("Failed to stop: "+err);
}
},
// Seeks to the position in the audio
seekToAudio:function(win, lose, args) {
var id = args[0];
var milliseconds = args[1];
try {
(Media.get(id)).node.currentTime = milliseconds / 1000;
win();
} catch (err) {
lose("Failed to seek: "+err);
}
},
// Pauses the playing audio
pausePlayingAudio:function(win, lose, args) {
var id = args[0];
var thisM = Media.get(id);
try {
thisM.node.pause();
Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_PAUSED);
} catch (err) {
lose("Failed to pause: "+err);
}
},
// Gets current position in the audio
getCurrentPositionAudio:function(win, lose, args) {
var id = args[0];
try {
var p = (Media.get(id)).node.currentTime;
Media.onStatus(id, Media.MEDIA_POSITION, p);
win(p);
} catch (err) {
lose(err);
}
},
// Start recording audio
startRecordingAudio:function(win, lose, args) {
var id = args[0];
var src = args[1];
// Initialize device
Media.prototype.mediaCaptureMgr = null;
var thisM = (Media.get(id));
var captureInitSettings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
captureInitSettings.streamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.audio;
thisM.mediaCaptureMgr = new Windows.Media.Capture.MediaCapture();
thisM.mediaCaptureMgr.addEventListener("failed", lose);
thisM.mediaCaptureMgr.initializeAsync(captureInitSettings).done(function (result) {
thisM.mediaCaptureMgr.addEventListener("recordlimitationexceeded", lose);
thisM.mediaCaptureMgr.addEventListener("failed", lose);
}, lose);
// Start recording
Windows.Storage.KnownFolders.musicLibrary.createFileAsync(src, Windows.Storage.CreationCollisionOption.replaceExisting).done(function (newFile) {
var storageFile = newFile;
var fileType = this.src.split('.').pop();
var encodingProfile = null;
switch (fileType) {
case 'm4a':
encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createM4a(Windows.Media.MediaProperties.AudioEncodingQuality.auto);
break;
case 'mp3':
encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp3(Windows.Media.MediaProperties.AudioEncodingQuality.auto);
break;
case 'wma':
encodingProfile = Windows.Media.MediaProperties.MediaEncodingProfile.createWma(Windows.Media.MediaProperties.AudioEncodingQuality.auto);
break;
default:
lose("Invalid file type for record");
break;
}
thisM.mediaCaptureMgr.startRecordToStorageFileAsync(encodingProfile, storageFile).done(win, lose);
}, lose);
},
// Stop recording audio
stopRecordingAudio:function(win, lose, args) {
var id = args[0];
var thisM = Media.get(id);
thisM.mediaCaptureMgr.stopRecordAsync().done(win, lose);
},
// Release the media object
release:function(win, lose, args) {
var id = args[0];
var thisM = Media.get(id);
try {
delete thisM.node;
} catch (err) {
lose("Failed to release: "+err);
}
},
setVolume:function(win, lose, args) {
var id = args[0];
var volume = args[1];
var thisM = Media.get(id);
thisM.volume = volume;
}
};
require("cordova/commandProxy").add("Media",module.exports);