Loading plugin.xml +7 −0 Changes for plugin.xml: 7 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -89,5 +89,12 @@ id="org.apache.cordova.core.AudioHandler" <source-file src="src/wp/AudioPlayer.cs" /> </platform> <!-- windows8 --> <platform name="windows8"> <js-module src="src/windows8/MediaProxy.js" name="MediaProxy"> <merges target="" /> </js-module> </platform> </plugin> src/windows8/MediaProxy.js 0 → 100644 +183 −0 Changes for src/windows8/MediaProxy.js: 183 added lines, 0 removed lines. Original line number Diff line number Diff line /* * * 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('org.apache.cordova.core.AudioHandler.Media'); var MediaError = require('org.apache.cordova.core.AudioHandler.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); No newline at end of file Loading
plugin.xml +7 −0 Changes for plugin.xml: 7 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -89,5 +89,12 @@ id="org.apache.cordova.core.AudioHandler" <source-file src="src/wp/AudioPlayer.cs" /> </platform> <!-- windows8 --> <platform name="windows8"> <js-module src="src/windows8/MediaProxy.js" name="MediaProxy"> <merges target="" /> </js-module> </platform> </plugin>
src/windows8/MediaProxy.js 0 → 100644 +183 −0 Changes for src/windows8/MediaProxy.js: 183 added lines, 0 removed lines. Original line number Diff line number Diff line /* * * 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('org.apache.cordova.core.AudioHandler.Media'); var MediaError = require('org.apache.cordova.core.AudioHandler.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); No newline at end of file