OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 15 matching lines...) Expand all Loading... |
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 */ | 27 */ |
28 | 28 |
29 #ifndef AudioListener_h | 29 #ifndef AudioListener_h |
30 #define AudioListener_h | 30 #define AudioListener_h |
31 | 31 |
32 #include "bindings/v8/ScriptWrappable.h" | 32 #include "bindings/v8/ScriptWrappable.h" |
33 #include "platform/geometry/FloatPoint3D.h" | 33 #include "platform/geometry/FloatPoint3D.h" |
34 #include "wtf/PassRefPtr.h" | 34 #include "wtf/PassRefPtr.h" |
35 #include "wtf/RefCounted.h" | 35 #include "wtf/RefCounted.h" |
| 36 #include "wtf/Vector.h" |
36 | 37 |
37 namespace WebCore { | 38 namespace WebCore { |
38 | 39 |
| 40 class PannerNode; |
| 41 |
39 // AudioListener maintains the state of the listener in the audio scene as defin
ed in the OpenAL specification. | 42 // AudioListener maintains the state of the listener in the audio scene as defin
ed in the OpenAL specification. |
40 | 43 |
41 class AudioListener : public ScriptWrappable, public RefCounted<AudioListener> { | 44 class AudioListener : public ScriptWrappable, public RefCounted<AudioListener> { |
42 public: | 45 public: |
43 static PassRefPtr<AudioListener> create() | 46 static PassRefPtr<AudioListener> create() |
44 { | 47 { |
45 return adoptRef(new AudioListener()); | 48 return adoptRef(new AudioListener()); |
46 } | 49 } |
| 50 virtual ~AudioListener(); |
47 | 51 |
48 // Position | 52 // Position |
49 void setPosition(float x, float y, float z) { setPosition(FloatPoint3D(x, y,
z)); } | 53 void setPosition(float x, float y, float z) { setPosition(FloatPoint3D(x, y,
z)); } |
50 void setPosition(const FloatPoint3D &position) { m_position = position; } | |
51 const FloatPoint3D& position() const { return m_position; } | 54 const FloatPoint3D& position() const { return m_position; } |
52 | 55 |
53 // Orientation | 56 // Orientation and Up-vector |
54 void setOrientation(float x, float y, float z, float upX, float upY, float u
pZ) | 57 void setOrientation(float x, float y, float z, float upX, float upY, float u
pZ) |
55 { | 58 { |
56 setOrientation(FloatPoint3D(x, y, z)); | 59 setOrientation(FloatPoint3D(x, y, z)); |
57 setUpVector(FloatPoint3D(upX, upY, upZ)); | 60 setUpVector(FloatPoint3D(upX, upY, upZ)); |
58 } | 61 } |
59 void setOrientation(const FloatPoint3D &orientation) { m_orientation = orien
tation; } | |
60 const FloatPoint3D& orientation() const { return m_orientation; } | 62 const FloatPoint3D& orientation() const { return m_orientation; } |
61 | |
62 // Up-vector | |
63 void setUpVector(const FloatPoint3D &upVector) { m_upVector = upVector; } | |
64 const FloatPoint3D& upVector() const { return m_upVector; } | 63 const FloatPoint3D& upVector() const { return m_upVector; } |
65 | 64 |
66 // Velocity | 65 // Velocity |
67 void setVelocity(float x, float y, float z) { setVelocity(FloatPoint3D(x, y,
z)); } | 66 void setVelocity(float x, float y, float z) { setVelocity(FloatPoint3D(x, y,
z)); } |
68 void setVelocity(const FloatPoint3D &velocity) { m_velocity = velocity; } | |
69 const FloatPoint3D& velocity() const { return m_velocity; } | 67 const FloatPoint3D& velocity() const { return m_velocity; } |
70 | 68 |
71 // Doppler factor | 69 // Doppler factor |
72 void setDopplerFactor(double dopplerFactor) { m_dopplerFactor = dopplerFacto
r; } | 70 void setDopplerFactor(double); |
73 double dopplerFactor() const { return m_dopplerFactor; } | 71 double dopplerFactor() const { return m_dopplerFactor; } |
74 | 72 |
75 // Speed of sound | 73 // Speed of sound |
76 void setSpeedOfSound(double speedOfSound) { m_speedOfSound = speedOfSound; } | 74 void setSpeedOfSound(double); |
77 double speedOfSound() const { return m_speedOfSound; } | 75 double speedOfSound() const { return m_speedOfSound; } |
78 | 76 |
| 77 Mutex& listenerLock() { return m_listenerLock; } |
| 78 void addPanner(PannerNode*); |
| 79 void removePanner(PannerNode*); |
| 80 |
79 private: | 81 private: |
80 AudioListener(); | 82 AudioListener(); |
81 | 83 |
82 // Position / Orientation | 84 void setPosition(const FloatPoint3D&); |
| 85 void setOrientation(const FloatPoint3D&); |
| 86 void setUpVector(const FloatPoint3D&); |
| 87 void setVelocity(const FloatPoint3D&); |
| 88 |
| 89 void markPannersAsDirty(unsigned); |
| 90 |
83 FloatPoint3D m_position; | 91 FloatPoint3D m_position; |
84 FloatPoint3D m_orientation; | 92 FloatPoint3D m_orientation; |
85 FloatPoint3D m_upVector; | 93 FloatPoint3D m_upVector; |
86 | |
87 FloatPoint3D m_velocity; | 94 FloatPoint3D m_velocity; |
88 | |
89 double m_dopplerFactor; | 95 double m_dopplerFactor; |
90 double m_speedOfSound; | 96 double m_speedOfSound; |
| 97 |
| 98 // Synchronize a panner's process() with setting of the state of the listene
r. |
| 99 mutable Mutex m_listenerLock; |
| 100 |
| 101 // List for pannerNodes in context. |
| 102 Vector<PannerNode*> m_panners; |
91 }; | 103 }; |
92 | 104 |
93 } // WebCore | 105 } // WebCore |
94 | 106 |
95 #endif // AudioListener_h | 107 #endif // AudioListener_h |
OLD | NEW |