~holger-seelig/cobweb.js/trunk

« back to all changes in this revision

Viewing changes to src/cobweb/Components/Sound/X3DSoundSourceNode.js

  • Committer: Holger Seelig
  • Date: 2017-08-22 04:53:24 UTC
  • Revision ID: holger.seelig@yahoo.de-20170822045324-4of4xxgt79669gbt
Switched to npm.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- Mode: JavaScript; coding: utf-8; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 3 -*-
 
2
 *******************************************************************************
 
3
 *
 
4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
5
 *
 
6
 * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011.
 
7
 *
 
8
 * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
 
9
 *
 
10
 * The copyright notice above does not evidence any actual of intended
 
11
 * publication of such source code, and is an unpublished work by create3000.
 
12
 * This material contains CONFIDENTIAL INFORMATION that is the property of
 
13
 * create3000.
 
14
 *
 
15
 * No permission is granted to copy, distribute, or create derivative works from
 
16
 * the contents of this software, in whole or in part, without the prior written
 
17
 * permission of create3000.
 
18
 *
 
19
 * NON-MILITARY USE ONLY
 
20
 *
 
21
 * All create3000 software are effectively free software with a non-military use
 
22
 * restriction. It is free. Well commented source is provided. You may reuse the
 
23
 * source in any way you please with the exception anything that uses it must be
 
24
 * marked to indicate is contains 'non-military use only' components.
 
25
 *
 
26
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
27
 *
 
28
 * Copyright 2015, 2016 Holger Seelig <holger.seelig@yahoo.de>.
 
29
 *
 
30
 * This file is part of the Cobweb Project.
 
31
 *
 
32
 * Cobweb is free software: you can redistribute it and/or modify it under the
 
33
 * terms of the GNU General Public License version 3 only, as published by the
 
34
 * Free Software Foundation.
 
35
 *
 
36
 * Cobweb is distributed in the hope that it will be useful, but WITHOUT ANY
 
37
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 
38
 * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
 
39
 * details (a copy is included in the LICENSE file that accompanied this code).
 
40
 *
 
41
 * You should have received a copy of the GNU General Public License version 3
 
42
 * along with Cobweb.  If not, see <http://www.gnu.org/licenses/gpl.html> for a
 
43
 * copy of the GPLv3 License.
 
44
 *
 
45
 * For Silvio, Joy and Adi.
 
46
 *
 
47
 ******************************************************************************/
 
48
 
 
49
 
 
50
define ([
 
51
        "jquery",
 
52
        "cobweb/Components/Core/X3DChildNode",
 
53
        "cobweb/Components/Time/X3DTimeDependentNode",
 
54
        "cobweb/Bits/X3DConstants",
 
55
],
 
56
function ($,
 
57
          X3DChildNode,
 
58
          X3DTimeDependentNode,
 
59
          X3DConstants)
 
60
{
 
61
"use strict";
 
62
 
 
63
        function X3DSoundSourceNode (executionContext)
 
64
        {
 
65
                X3DChildNode         .call (this, executionContext);
 
66
                X3DTimeDependentNode .call (this, executionContext);
 
67
 
 
68
                this .addType (X3DConstants .X3DSoundSourceNode);
 
69
 
 
70
                this .volume = 0;
 
71
                this .media  = null;
 
72
        }
 
73
 
 
74
        X3DSoundSourceNode .prototype = $.extend (Object .create (X3DChildNode .prototype),
 
75
                X3DTimeDependentNode .prototype,
 
76
        {
 
77
                constructor: X3DSoundSourceNode,
 
78
                initialize: function ()
 
79
                {
 
80
                        X3DChildNode         .prototype .initialize .call (this);
 
81
                        X3DTimeDependentNode .prototype .initialize .call (this);
 
82
 
 
83
                },
 
84
                set_browser_live__: function ()
 
85
                {
 
86
                        X3DTimeDependentNode .prototype .set_browser_live__ .call (this);
 
87
 
 
88
                        if (this .getDisabled ())
 
89
                        {
 
90
                                this .getBrowser () .volume_ .removeInterest ("set_volume__", this);
 
91
                                this .getBrowser () .mute_   .removeInterest ("set_volume__", this);
 
92
                        }
 
93
                        else
 
94
                        {
 
95
                                this .getBrowser () .volume_ .addInterest ("set_volume__", this);
 
96
                                this .getBrowser () .mute_   .addInterest ("set_volume__", this);
 
97
                                this .set_volume__ ();
 
98
                        }
 
99
                },
 
100
                setMedia: function (value)
 
101
                {
 
102
                        if (this .media)
 
103
                        {
 
104
                                this .media [0] .volume = 0;
 
105
                                this .media [0] .pause ();
 
106
                                this .media .unbind ("ended");
 
107
                        }
 
108
 
 
109
                        this .media = value;
 
110
        
 
111
                        if (value)
 
112
                        {
 
113
                                var media = value [0];
 
114
 
 
115
                                this .setVolume (0);
 
116
                                this .duration_changed_ = media .duration;
 
117
 
 
118
                                //this .set_loop__ ();
 
119
 
 
120
                                if (this .enabled_ .getValue ())
 
121
                                {
 
122
                                        if (this .isActive_ .getValue ())
 
123
                                        {
 
124
                                                if (this .loop_ .getValue ())
 
125
                                                        media .currentTime = this .getElapsedTime () % media .duration;
 
126
                                                else
 
127
                                                        media .currentTime = this .getElapsedTime ();
 
128
 
 
129
                                                if (! this .isPaused_ .getValue ())
 
130
                                                {                                                       
 
131
                                                        if (this .speed_ .getValue ())
 
132
                                                                media .play ();
 
133
                                                }
 
134
                                        }
 
135
                                }
 
136
                        }
 
137
                },
 
138
                getMedia: function ()
 
139
                {
 
140
                        return this .media;
 
141
                },
 
142
                setVolume: function (volume)
 
143
                {
 
144
                        this .volume = volume;
 
145
 
 
146
                        this .set_volume__ ();
 
147
                },
 
148
                set_volume__: function ()
 
149
                {
 
150
                        if (this .media)
 
151
                                this .media [0] .volume = (! this .getBrowser () .mute_ .getValue ()) * this .getBrowser () .volume_ .getValue () * this .volume;
 
152
                },
 
153
                set_speed: function ()
 
154
                { },
 
155
                set_pitch: function ()
 
156
                { },
 
157
                set_start: function ()
 
158
                {
 
159
                        if (this .media)
 
160
                        {
 
161
                                if (this .speed_ .getValue ())
 
162
                                {
 
163
                                        this .media [0] .currentTime = 0;
 
164
                                        this .media [0] .play ();
 
165
                                }
 
166
                        }
 
167
                },
 
168
                set_pause: function ()
 
169
                {
 
170
                        if (this .media)
 
171
                        {
 
172
                                this .media .unbind ("ended");
 
173
                                this .media [0] .pause ();
 
174
                        }
 
175
                },
 
176
                set_resume: function ()
 
177
                {
 
178
                        if (this .media)
 
179
                        {
 
180
                                if (this .speed_ .getValue ())
 
181
                                        this .media [0] .play ();
 
182
                        }
 
183
                },
 
184
                set_stop: function ()
 
185
                {
 
186
                        if (this .media)
 
187
                        {
 
188
                                this .media .unbind ("ended");
 
189
                                this .media [0] .pause ();
 
190
                        }
 
191
                },
 
192
                set_ended: function ()
 
193
                {
 
194
                        if (this .media)
 
195
                        {
 
196
                                var media = this .media [0];
 
197
 
 
198
                                if (media .currentTime < media .duration)
 
199
                                        return;
 
200
 
 
201
                                if (this .loop_ .getValue ())
 
202
                                {
 
203
                                        if (this .speed_ .getValue ())
 
204
                                                media .play ();
 
205
 
 
206
                                        // The event order below is very important.
 
207
 
 
208
                                        this .elapsedTime_ = this .getElapsedTime ();
 
209
                                        this .cycleTime_   = this .getBrowser () .getCurrentTime ();
 
210
                                }
 
211
                                else
 
212
                                        this .stop ();
 
213
                        }
 
214
                },
 
215
                prepareEvents: function ()
 
216
                {
 
217
                        this .set_ended ();
 
218
 
 
219
                        this .elapsedTime_ = this .getElapsedTime ();
 
220
                },
 
221
        });
 
222
 
 
223
        return X3DSoundSourceNode;
 
224
});
 
225