From 7b7aaad1a36f9ce8809fa8e383e289b8dd902f62 Mon Sep 17 00:00:00 2001 From: Ibrahim Hadeed Date: Mon, 15 Aug 2016 03:05:11 -0400 Subject: [PATCH] feat(native-audio): Add native audio plugin closes #315 --- src/index.ts | 3 ++ src/plugins/native-audio.ts | 91 +++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/plugins/native-audio.ts diff --git a/src/index.ts b/src/index.ts index c53bb88721..f6fc22937a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -56,6 +56,7 @@ import {Keyboard} from './plugins/keyboard'; import {LaunchNavigator} from './plugins/launchnavigator'; import {LocalNotifications} from './plugins/localnotifications'; import {MediaCapture} from './plugins/media-capture'; +import {NativeAudio} from './plugins/native-audio'; import {NativeStorage} from './plugins/nativestorage'; import {MediaPlugin} from './plugins/media'; import {Network} from './plugins/network'; @@ -146,6 +147,7 @@ export { Hotspot, Insomnia, Keyboard, + NativeAudio, NativeStorage, Network, OneSignal, @@ -220,6 +222,7 @@ window['IonicNative'] = { LocalNotifications: LocalNotifications, MediaCapture: MediaCapture, MediaPlugin: MediaPlugin, + NativeAudio: NativeAudio, NativeStorage: NativeStorage, Network: Network, Printer: Printer, diff --git a/src/plugins/native-audio.ts b/src/plugins/native-audio.ts new file mode 100644 index 0000000000..a3b4e0858d --- /dev/null +++ b/src/plugins/native-audio.ts @@ -0,0 +1,91 @@ +import {Plugin, Cordova} from './plugin'; +/** + * @name NativeAudio + * @description Native Audio Playback + * @usage + * ```typescript + * import {NativeAudio} from 'ionic-native'; + * + * NativeAudio.preloadSimple('uniqueId1', 'path/to/file.mp3').then(onSuccess, onError); + * NativeAudio.preloadComplex('uniqueId2', 'path/to/file2.mp3', 1, 1, 0).then(onSuccess, onError); + * + * NativeAudio.play('uniqueId1').then(onSuccess, onError); + * NativeAudio.loop('uniqueId2').then(onSuccess, onError); + * + * NativeAudio.setVolumeForComplexAsset('uniqueId2', 0.6).then(onSuccess,onError); + * + * NativeAudio.stop('uniqueId1').then(onSuccess,onError); + * + * NativeAudio.unload('uniqueId1').then(onSuccess,onError); + * + * ``` + */ +@Plugin({ + plugin: 'cordova-plugin-nativeaudio', + pluginRef: 'NativeAudio', + repo: 'https://github.com/floatinghotpot/cordova-plugin-nativeaudio' +}) +export class NativeAudio { + /** + * Loads an audio file into memory. Optimized for short clips / single shots (up to five seconds). Cannot be stopped / looped. + * @param id {string} unique ID for the audio file + * @param assetPath {string} the relative path or absolute URL (inluding http://) to the audio asset. + * @returns {Promise} + */ + @Cordova() + static preloadSimple(id: string, assetPath: string): Promise {return; } + + /** + * Loads an audio file into memory. Optimized for background music / ambient sound. Uses highlevel native APIs with a larger footprint. (iOS: AVAudioPlayer). Can be stopped / looped and used with multiple voices. Can be faded in and out using the delay parameter. + * @param id {string} unique ID for the audio file + * @param assetPath {string} the relative path or absolute URL (inluding http://) to the audio asset. + * @param volume {number} the volume of the preloaded sound (0.1 to 1.0) + * @param voices {number} the number of multichannel voices available + * @param delay {number} + * @returns {Promise} + */ + @Cordova() + static preloadComplex(id: string, assetPath: string, volume: number, voices: number, delay: number): Promise {return; } + + /** + * Plays an audio asset + * @param id {string} unique ID for the audio file + * @param completeCallback {Function} callback to be invoked when audio is done playing + */ + @Cordova({ + successIndex: 1, + errorIndex: 2 + }) + static play(id: string, completeCallback: Function): Promise {return; } + + /** + * Stops playing an audio + * @param id {string} unique ID for the audio file + */ + @Cordova() + static stop(id: string): Promise {return; } + + /** + * Loops an audio asset infinitely, this only works for complex assets + * @param id {string} unique ID for the audio file + * @return {Promise} + */ + @Cordova() + static loop(id: string): Promise {return; } + + /** + * Unloads an audio file from memory + * @param id {string} unique ID for the audio file + */ + @Cordova() + static unload(id: string): Promise {return; } + + /** + * Changes the volume for preloaded complex assets. + * @param id {string} unique ID for the audio file + * @param volume {number} the volume of the audio asset (0.1 to 1.0) + */ + @Cordova() + static setVolumeForComplexAsset(id: string, volume: number): Promise {return; } + +}