1/*
2 * Copyright (c) 2009-2010 jMonkeyEngine
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 *   notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 *   notice, this list of conditions and the following disclaimer in the
14 *   documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17 *   may be used to endorse or promote products derived from this software
18 *   without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33package com.jme3.niftygui;
34
35import com.jme3.asset.AssetManager;
36import com.jme3.audio.AudioNode;
37import com.jme3.audio.AudioNode.Status;
38import com.jme3.audio.AudioRenderer;
39import de.lessvoid.nifty.spi.sound.SoundHandle;
40
41public class SoundHandleJme implements SoundHandle {
42
43    private AudioNode node;
44    private AssetManager am;
45    private String fileName;
46    private float volume = 1;
47
48    public SoundHandleJme(AudioRenderer ar, AudioNode node){
49        if (ar == null || node == null)
50            throw new NullPointerException();
51
52        this.node = node;
53    }
54
55    /**
56     * For streaming music only. (May need to loop..)
57     * @param ar
58     * @param am
59     * @param fileName
60     */
61    public SoundHandleJme(AudioRenderer ar, AssetManager am, String fileName){
62        if (ar == null || am == null)
63            throw new NullPointerException();
64
65        this.am = am;
66        if (fileName == null)
67            throw new NullPointerException();
68
69        this.fileName = fileName;
70    }
71
72    public void play() {
73        if (fileName != null){
74            if (node != null){
75                node.stop();
76            }
77
78            node = new AudioNode(am, fileName, true);
79            node.setPositional(false);
80            node.setVolume(volume);
81            node.play();
82        }else{
83            node.playInstance();
84        }
85    }
86
87    public void stop() {
88        if (node != null){
89            node.stop();
90            node = null;
91        }
92    }
93
94    public void setVolume(float f) {
95        if (node != null) {
96            node.setVolume(f);
97        }
98        volume = f;
99    }
100
101    public float getVolume() {
102        return volume;
103    }
104
105    public boolean isPlaying() {
106        return node != null && node.getStatus() == Status.Playing;
107    }
108
109    public void dispose() {
110    }
111}
112