diff options
author | Armin Weatherwax | 2011-01-04 00:25:35 +0100 |
---|---|---|
committer | Armin Weatherwax | 2011-01-04 00:36:19 +0100 |
commit | b4959214023db77c6048036cc924075c4271ba74 (patch) | |
tree | bfc899fae639c2187088d3802e2404a7d689ed88 /linden/indra/newview | |
parent | load unloaded-avatar-cloud particle system from LLSD file. (diff) | |
download | meta-impy-b4959214023db77c6048036cc924075c4271ba74.zip meta-impy-b4959214023db77c6048036cc924075c4271ba74.tar.gz meta-impy-b4959214023db77c6048036cc924075c4271ba74.tar.bz2 meta-impy-b4959214023db77c6048036cc924075c4271ba74.tar.xz |
move streaming audio out of gAudiop into its own class.
* might solve several issues with streaming audio, like:
streaming audio not working when the sound effects driver fails.
* breaks fmod. Sorry. If you want fmod go fix it, its probably not difficult.
Diffstat (limited to 'linden/indra/newview')
-rw-r--r-- | linden/indra/newview/CMakeLists.txt | 2 | ||||
-rw-r--r-- | linden/indra/newview/chatbar_as_cmdline.cpp | 4 | ||||
-rw-r--r-- | linden/indra/newview/kokuastreamingaudio.cpp | 129 | ||||
-rw-r--r-- | linden/indra/newview/kokuastreamingaudio.h | 71 | ||||
-rw-r--r-- | linden/indra/newview/llappviewer.cpp | 14 | ||||
-rw-r--r-- | linden/indra/newview/lloverlaybar.cpp | 13 | ||||
-rw-r--r-- | linden/indra/newview/llstartup.cpp | 17 | ||||
-rw-r--r-- | linden/indra/newview/llvieweraudio.cpp | 125 | ||||
-rw-r--r-- | linden/indra/newview/llviewercontrol.cpp | 11 | ||||
-rw-r--r-- | linden/indra/newview/llviewermedia_streamingaudio.cpp | 7 | ||||
-rw-r--r-- | linden/indra/newview/llviewermedia_streamingaudio.h | 2 | ||||
-rw-r--r-- | linden/indra/newview/llviewerparcelmgr.cpp | 18 |
12 files changed, 315 insertions, 98 deletions
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt index e6c1767..4a30be3 100644 --- a/linden/indra/newview/CMakeLists.txt +++ b/linden/indra/newview/CMakeLists.txt | |||
@@ -88,6 +88,7 @@ set(viewer_SOURCE_FILES | |||
88 | impprefsfonts.cpp | 88 | impprefsfonts.cpp |
89 | jcfloater_animation_list.cpp | 89 | jcfloater_animation_list.cpp |
90 | jcfloaterareasearch.cpp | 90 | jcfloaterareasearch.cpp |
91 | kokuastreamingaudio.cpp | ||
91 | kowopenregionsettings.cpp | 92 | kowopenregionsettings.cpp |
92 | lightshare.cpp | 93 | lightshare.cpp |
93 | llagent.cpp | 94 | llagent.cpp |
@@ -541,6 +542,7 @@ set(viewer_HEADER_FILES | |||
541 | impprefsfonts.h | 542 | impprefsfonts.h |
542 | jcfloater_animation_list.h | 543 | jcfloater_animation_list.h |
543 | jcfloaterareasearch.h | 544 | jcfloaterareasearch.h |
545 | kokuastreamingaudio.h | ||
544 | lightshare.h | 546 | lightshare.h |
545 | lggautocorrectfloater.h | 547 | lggautocorrectfloater.h |
546 | lggautocorrect.h | 548 | lggautocorrect.h |
diff --git a/linden/indra/newview/chatbar_as_cmdline.cpp b/linden/indra/newview/chatbar_as_cmdline.cpp index 0593091..b5a7e8c 100644 --- a/linden/indra/newview/chatbar_as_cmdline.cpp +++ b/linden/indra/newview/chatbar_as_cmdline.cpp | |||
@@ -69,7 +69,7 @@ | |||
69 | #include "llviewerparcelmgr.h" | 69 | #include "llviewerparcelmgr.h" |
70 | #include "llviewerparcelmedia.h" | 70 | #include "llviewerparcelmedia.h" |
71 | #include "llparcel.h" | 71 | #include "llparcel.h" |
72 | #include "llaudioengine.h" | 72 | #include "kokuastreamingaudio.h" |
73 | #include "llviewerparcelmediaautoplay.h" | 73 | #include "llviewerparcelmediaautoplay.h" |
74 | #include "lloverlaybar.h" | 74 | #include "lloverlaybar.h" |
75 | #include "lggautocorrectfloater.h" | 75 | #include "lggautocorrectfloater.h" |
@@ -367,7 +367,7 @@ bool cmd_line_chat(std::string revised_text, EChatType type) | |||
367 | { | 367 | { |
368 | gOverlayBar->toggleMusicPlay(gOverlayBar); | 368 | gOverlayBar->toggleMusicPlay(gOverlayBar); |
369 | } | 369 | } |
370 | gAudiop->startInternetStream(status); | 370 | gAudioStream->startInternetStream(status); |
371 | return false; | 371 | return false; |
372 | } | 372 | } |
373 | } | 373 | } |
diff --git a/linden/indra/newview/kokuastreamingaudio.cpp b/linden/indra/newview/kokuastreamingaudio.cpp new file mode 100644 index 0000000..ed606db --- /dev/null +++ b/linden/indra/newview/kokuastreamingaudio.cpp | |||
@@ -0,0 +1,129 @@ | |||
1 | /** | ||
2 | * @file kokuastreamingaudio.cpp | ||
3 | * @brief Definition of KOKUAStreamingAudio base class for streaming audio support | ||
4 | * | ||
5 | * $LicenseInfo:firstyear=2011&license=viewergpl$ | ||
6 | * Kokua Viewer Source Code | ||
7 | * Copyright (C) 2011, Armin.Weatherwax (at) googlemail.com | ||
8 | * for the Kokua Viewer Team, in special for our Imprudence Viewer. | ||
9 | * | ||
10 | * The source code in this file ("Source Code") is provided by the author | ||
11 | * to you under the terms of the GNU General Public License, version 2.0 | ||
12 | * ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in this | ||
13 | * distribution, or online at | ||
14 | * http://secondlifegrid.net/programs/open_source/licensing/gplv2 | ||
15 | * | ||
16 | * There are special exceptions to the terms and conditions of the GPL as | ||
17 | * it is applied to this Source Code. View the full text of the exception | ||
18 | * in the file doc/FLOSS-exception.txt in this software distribution, or | ||
19 | * online at | ||
20 | * http://secondlifegrid.net/programs/open_source/licensing/flossexception | ||
21 | * | ||
22 | * By copying, modifying or distributing this software, you acknowledge | ||
23 | * that you have read and understood your obligations described above, | ||
24 | * and agree to abide by those obligations. | ||
25 | * | ||
26 | * THIS SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO | ||
27 | * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, | ||
28 | * COMPLETENESS OR PERFORMANCE. | ||
29 | * | ||
30 | * $/LicenseInfo$ | ||
31 | */ | ||
32 | |||
33 | #include "kokuastreamingaudio.h" | ||
34 | #include "llstreamingaudio.h" | ||
35 | |||
36 | |||
37 | KOKUAStreamingAudio* gAudioStream = NULL; | ||
38 | |||
39 | KOKUAStreamingAudio::KOKUAStreamingAudio(LLStreamingAudioInterface *impl) : | ||
40 | mStreamingAudioImpl (impl) | ||
41 | { | ||
42 | |||
43 | } | ||
44 | |||
45 | KOKUAStreamingAudio::~KOKUAStreamingAudio() | ||
46 | { | ||
47 | if (mStreamingAudioImpl) | ||
48 | { | ||
49 | delete mStreamingAudioImpl; | ||
50 | mStreamingAudioImpl = NULL; | ||
51 | } | ||
52 | } | ||
53 | |||
54 | LLStreamingAudioInterface* KOKUAStreamingAudio::getStreamingAudioImpl() | ||
55 | { | ||
56 | return mStreamingAudioImpl; | ||
57 | } | ||
58 | |||
59 | // void KOKUAStreamingAudio::setStreamingAudioImpl(LLStreamingAudioInterface *impl) | ||
60 | // { | ||
61 | // mStreamingAudioImpl = impl; | ||
62 | // } | ||
63 | |||
64 | // virtual | ||
65 | void KOKUAStreamingAudio::startInternetStream(const std::string& url) | ||
66 | { | ||
67 | if (mStreamingAudioImpl) | ||
68 | mStreamingAudioImpl->start(url); | ||
69 | } | ||
70 | |||
71 | // virtual | ||
72 | void KOKUAStreamingAudio::stopInternetStream() | ||
73 | { | ||
74 | if (mStreamingAudioImpl) | ||
75 | mStreamingAudioImpl->stop(); | ||
76 | } | ||
77 | |||
78 | // virtual | ||
79 | void KOKUAStreamingAudio::pauseInternetStream(int pause) | ||
80 | { | ||
81 | if (mStreamingAudioImpl) | ||
82 | mStreamingAudioImpl->pause(pause); | ||
83 | } | ||
84 | |||
85 | // virtual | ||
86 | void KOKUAStreamingAudio::updateInternetStream() | ||
87 | { | ||
88 | if (mStreamingAudioImpl) | ||
89 | mStreamingAudioImpl->update(); | ||
90 | } | ||
91 | |||
92 | // virtual | ||
93 | KOKUAStreamingAudio::KOKUAAudioPlayState KOKUAStreamingAudio::isInternetStreamPlaying() | ||
94 | { | ||
95 | if (mStreamingAudioImpl) | ||
96 | return (KOKUAStreamingAudio::KOKUAAudioPlayState) mStreamingAudioImpl->isPlaying(); | ||
97 | |||
98 | return KOKUAStreamingAudio::AUDIO_STOPPED; // Stopped | ||
99 | } | ||
100 | |||
101 | // virtual | ||
102 | void KOKUAStreamingAudio::setInternetStreamGain(F32 vol) | ||
103 | { | ||
104 | if (mStreamingAudioImpl) | ||
105 | mStreamingAudioImpl->setGain(vol); | ||
106 | } | ||
107 | |||
108 | F32 KOKUAStreamingAudio::getInternetStreamGain() | ||
109 | { | ||
110 | if (mStreamingAudioImpl) | ||
111 | return mStreamingAudioImpl->getGain(); | ||
112 | else | ||
113 | return 1.0f; | ||
114 | } | ||
115 | |||
116 | // virtual | ||
117 | std::string KOKUAStreamingAudio::getInternetStreamURL() | ||
118 | { | ||
119 | if (mStreamingAudioImpl) | ||
120 | return mStreamingAudioImpl->getURL(); | ||
121 | else return std::string(); | ||
122 | } | ||
123 | |||
124 | std::string KOKUAStreamingAudio::getVersion() | ||
125 | { | ||
126 | if (mStreamingAudioImpl) | ||
127 | return mStreamingAudioImpl->getVersion(); | ||
128 | else return std::string(); | ||
129 | } \ No newline at end of file | ||
diff --git a/linden/indra/newview/kokuastreamingaudio.h b/linden/indra/newview/kokuastreamingaudio.h new file mode 100644 index 0000000..eb49f25 --- /dev/null +++ b/linden/indra/newview/kokuastreamingaudio.h | |||
@@ -0,0 +1,71 @@ | |||
1 | /** | ||
2 | * @file kokuastreamingaudio.h | ||
3 | * @brief Definition of KOKUAStreamingAudio base class for streaming audio support | ||
4 | * | ||
5 | * $LicenseInfo:firstyear=2011&license=viewergpl$ | ||
6 | * Kokua Viewer Source Code | ||
7 | * Copyright (C) 2011, Armin.Weatherwax (at) googlemail.com | ||
8 | * for the Kokua Viewer Team. | ||
9 | * | ||
10 | * The source code in this file ("Source Code") is provided by the author | ||
11 | * to you under the terms of the GNU General Public License, version 2.0 | ||
12 | * ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in this | ||
13 | * distribution, or online at | ||
14 | * http://secondlifegrid.net/programs/open_source/licensing/gplv2 | ||
15 | * | ||
16 | * There are special exceptions to the terms and conditions of the GPL as | ||
17 | * it is applied to this Source Code. View the full text of the exception | ||
18 | * in the file doc/FLOSS-exception.txt in this software distribution, or | ||
19 | * online at | ||
20 | * http://secondlifegrid.net/programs/open_source/licensing/flossexception | ||
21 | * | ||
22 | * By copying, modifying or distributing this software, you acknowledge | ||
23 | * that you have read and understood your obligations described above, | ||
24 | * and agree to abide by those obligations. | ||
25 | * | ||
26 | * THIS SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO | ||
27 | * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, | ||
28 | * COMPLETENESS OR PERFORMANCE. | ||
29 | * | ||
30 | * $/LicenseInfo$ | ||
31 | */ | ||
32 | #ifndef KOKUA_STREAMINGAUDIO_H | ||
33 | #define KOKUA_STREAMINGAUDIO_H | ||
34 | |||
35 | #include "linden_common.h" | ||
36 | |||
37 | class LLStreamingAudioInterface; | ||
38 | |||
39 | class KOKUAStreamingAudio | ||
40 | { | ||
41 | public: | ||
42 | enum KOKUAAudioPlayState | ||
43 | { | ||
44 | // isInternetStreamPlaying() returns an *int*, with | ||
45 | // 0 = stopped, 1 = playing, 2 = paused. | ||
46 | AUDIO_STOPPED = 0, | ||
47 | AUDIO_PLAYING = 1, | ||
48 | AUDIO_PAUSED = 2 | ||
49 | }; | ||
50 | |||
51 | KOKUAStreamingAudio(LLStreamingAudioInterface *impl); | ||
52 | virtual ~KOKUAStreamingAudio(); | ||
53 | |||
54 | LLStreamingAudioInterface *getStreamingAudioImpl(); | ||
55 | // void setStreamingAudioImpl(LLStreamingAudioInterface *impl); | ||
56 | void startInternetStream(const std::string& url); | ||
57 | void stopInternetStream(); | ||
58 | void pauseInternetStream(int pause); | ||
59 | void updateInternetStream(); | ||
60 | KOKUAAudioPlayState isInternetStreamPlaying(); | ||
61 | void setInternetStreamGain(F32 vol); | ||
62 | F32 getInternetStreamGain(); | ||
63 | std::string getInternetStreamURL(); | ||
64 | std::string getVersion(); | ||
65 | private: | ||
66 | LLStreamingAudioInterface *mStreamingAudioImpl; | ||
67 | }; | ||
68 | |||
69 | extern KOKUAStreamingAudio* gAudioStream; | ||
70 | |||
71 | #endif | ||
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 8aea221..eb03727 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp | |||
@@ -104,6 +104,7 @@ | |||
104 | #include "llassetstorage.h" | 104 | #include "llassetstorage.h" |
105 | #include "llpolymesh.h" | 105 | #include "llpolymesh.h" |
106 | #include "llcachename.h" | 106 | #include "llcachename.h" |
107 | #include "kokuastreamingaudio.h" | ||
107 | #include "llaudioengine.h" | 108 | #include "llaudioengine.h" |
108 | #include "llstreamingaudio.h" | 109 | #include "llstreamingaudio.h" |
109 | #include "llviewermenu.h" | 110 | #include "llviewermenu.h" |
@@ -1278,14 +1279,17 @@ bool LLAppViewer::cleanup() | |||
1278 | 1279 | ||
1279 | llinfos << "Global stuff deleted" << llendflush; | 1280 | llinfos << "Global stuff deleted" << llendflush; |
1280 | 1281 | ||
1281 | if (gAudiop) | 1282 | if (gAudioStream) |
1282 | { | 1283 | { |
1283 | // shut down the streaming audio sub-subsystem first, in case it relies on not outliving the general audio subsystem. | 1284 | // shut down the streaming audio sub-subsystem first, in case it relies on not outliving the general audio subsystem. |
1284 | 1285 | ||
1285 | LLStreamingAudioInterface *sai = gAudiop->getStreamingAudioImpl(); | 1286 | LLStreamingAudioInterface *sai = gAudioStream->getStreamingAudioImpl(); |
1286 | delete sai; | 1287 | delete sai; |
1287 | gAudiop->setStreamingAudioImpl(NULL); | 1288 | // gAudioStream->setStreamingAudioImpl(NULL); |
1289 | } | ||
1288 | 1290 | ||
1291 | if (gAudiop) | ||
1292 | { | ||
1289 | // shut down the audio subsystem | 1293 | // shut down the audio subsystem |
1290 | 1294 | ||
1291 | bool want_longname = false; | 1295 | bool want_longname = false; |
@@ -3732,6 +3736,10 @@ void LLAppViewer::idle() | |||
3732 | const F32 max_audio_decode_time = 0.002f; // 2 ms decode time | 3736 | const F32 max_audio_decode_time = 0.002f; // 2 ms decode time |
3733 | gAudiop->idle(max_audio_decode_time); | 3737 | gAudiop->idle(max_audio_decode_time); |
3734 | } | 3738 | } |
3739 | |||
3740 | // update streaming audio | ||
3741 | if (gAudioStream) | ||
3742 | gAudioStream->updateInternetStream(); | ||
3735 | } | 3743 | } |
3736 | 3744 | ||
3737 | 3745 | ||
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp index ed406e8..4e1d03e 100644 --- a/linden/indra/newview/lloverlaybar.cpp +++ b/linden/indra/newview/lloverlaybar.cpp | |||
@@ -38,7 +38,7 @@ | |||
38 | #include "lloverlaybar.h" | 38 | #include "lloverlaybar.h" |
39 | 39 | ||
40 | #include "aoremotectrl.h" | 40 | #include "aoremotectrl.h" |
41 | #include "llaudioengine.h" | 41 | #include "kokuastreamingaudio.h" |
42 | #include "llrender.h" | 42 | #include "llrender.h" |
43 | #include "llagent.h" | 43 | #include "llagent.h" |
44 | #include "llbutton.h" | 44 | #include "llbutton.h" |
@@ -438,17 +438,16 @@ void LLOverlayBar::toggleMusicPlay(void*) | |||
438 | if (gOverlayBar->mMusicState != PLAYING) | 438 | if (gOverlayBar->mMusicState != PLAYING) |
439 | { | 439 | { |
440 | gOverlayBar->mMusicState = PLAYING; // desired state | 440 | gOverlayBar->mMusicState = PLAYING; // desired state |
441 | if (gAudiop) | 441 | if (gAudioStream) |
442 | { | 442 | { |
443 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); | 443 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); |
444 | if ( parcel ) | 444 | if ( parcel ) |
445 | { | 445 | { |
446 | // this doesn't work properly when crossing parcel boundaries - even when the | 446 | // this doesn't work properly when crossing parcel boundaries - even when the |
447 | // stream is stopped, it doesn't return the right thing - commenting out for now. | 447 | // stream is stopped, it doesn't return the right thing - commenting out for now. |
448 | // if ( gAudiop->isInternetStreamPlaying() == 0 ) | 448 | // if ( gAudioStream->isInternetStreamPlaying() == 0 ) |
449 | { | 449 | { |
450 | gAudiop->startInternetStream(parcel->getMusicURL()); | 450 | gAudioStream->startInternetStream(parcel->getMusicURL()); |
451 | //awfixme sTitleObserver.init(parcel->getMusicURL()); | ||
452 | } | 451 | } |
453 | } | 452 | } |
454 | } | 453 | } |
@@ -456,9 +455,9 @@ void LLOverlayBar::toggleMusicPlay(void*) | |||
456 | else | 455 | else |
457 | { | 456 | { |
458 | gOverlayBar->mMusicState = STOPPED; // desired state | 457 | gOverlayBar->mMusicState = STOPPED; // desired state |
459 | if (gAudiop) | 458 | if (gAudioStream) |
460 | { | 459 | { |
461 | gAudiop->stopInternetStream(); | 460 | gAudioStream->stopInternetStream(); |
462 | } | 461 | } |
463 | } | 462 | } |
464 | } | 463 | } |
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index b744961..0417f61 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp | |||
@@ -41,6 +41,7 @@ | |||
41 | #endif | 41 | #endif |
42 | #include "llpluginclassmediaowner.h" | 42 | #include "llpluginclassmediaowner.h" |
43 | #include "llviewermedia_streamingaudio.h" | 43 | #include "llviewermedia_streamingaudio.h" |
44 | #include "kokuastreamingaudio.h" | ||
44 | #include "llaudioengine.h" | 45 | #include "llaudioengine.h" |
45 | 46 | ||
46 | #ifdef LL_FMOD | 47 | #ifdef LL_FMOD |
@@ -681,19 +682,13 @@ bool idle_startup() | |||
681 | delete gAudiop; | 682 | delete gAudiop; |
682 | gAudiop = NULL; | 683 | gAudiop = NULL; |
683 | } | 684 | } |
684 | |||
685 | if (gAudiop) | ||
686 | { | ||
687 | // if the audio engine hasn't set up its own preferred handler for streaming audio then set up the generic streaming audio implementation which uses media plugins | ||
688 | if (NULL == gAudiop->getStreamingAudioImpl()) | ||
689 | { | ||
690 | LL_INFOS("AppInit") << "Using media plugins to render streaming audio" << LL_ENDL; | ||
691 | gAudiop->setStreamingAudioImpl(new LLStreamingAudio_MediaPlugins()); | ||
692 | } | ||
693 | } | ||
694 | } | 685 | } |
695 | } | 686 | } |
696 | 687 | ||
688 | |||
689 | if (!gAudioStream) | ||
690 | gAudioStream = new KOKUAStreamingAudio(new LLStreamingAudio_MediaPlugins()); | ||
691 | |||
697 | LL_INFOS("AppInit") << "Audio Engine Initialized." << LL_ENDL; | 692 | LL_INFOS("AppInit") << "Audio Engine Initialized." << LL_ENDL; |
698 | 693 | ||
699 | 694 | ||
diff --git a/linden/indra/newview/llvieweraudio.cpp b/linden/indra/newview/llvieweraudio.cpp index 91e7ce5..d465177 100644 --- a/linden/indra/newview/llvieweraudio.cpp +++ b/linden/indra/newview/llvieweraudio.cpp | |||
@@ -33,6 +33,7 @@ | |||
33 | #include "llviewerprecompiledheaders.h" | 33 | #include "llviewerprecompiledheaders.h" |
34 | 34 | ||
35 | #include "llaudioengine.h" | 35 | #include "llaudioengine.h" |
36 | #include "kokuastreamingaudio.h" | ||
36 | #include "llagent.h" | 37 | #include "llagent.h" |
37 | #include "llappviewer.h" | 38 | #include "llappviewer.h" |
38 | #include "llvieweraudio.h" | 39 | #include "llvieweraudio.h" |
@@ -46,69 +47,71 @@ | |||
46 | 47 | ||
47 | void init_audio() | 48 | void init_audio() |
48 | { | 49 | { |
49 | if (!gAudiop) | 50 | if (gAudiop) |
50 | { | 51 | { |
51 | llwarns << "Failed to create an appropriate Audio Engine" << llendl; | 52 | LLVector3d lpos_global = gAgent.getCameraPositionGlobal(); |
52 | return; | 53 | LLVector3 lpos_global_f; |
54 | |||
55 | lpos_global_f.setVec(lpos_global); | ||
56 | |||
57 | gAudiop->setListener(lpos_global_f, | ||
58 | LLVector3::zero, // LLViewerCamera::getInstance()->getVelocity(), // !!! BUG need to replace this with smoothed velocity! | ||
59 | LLViewerCamera::getInstance()->getUpAxis(), | ||
60 | LLViewerCamera::getInstance()->getAtAxis()); | ||
61 | |||
62 | // load up our initial set of sounds we'll want so they're in memory and ready to be played | ||
63 | |||
64 | bool mute_audio = gSavedSettings.getBOOL("MuteAudio"); | ||
65 | |||
66 | if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload")) | ||
67 | { | ||
68 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndAlert"))); | ||
69 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndBadKeystroke"))); | ||
70 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndChatFromObject"))); | ||
71 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndClick"))); | ||
72 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndClickRelease"))); | ||
73 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndHealthReductionF"))); | ||
74 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndHealthReductionM"))); | ||
75 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndIncomingChat"))); | ||
76 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndIncomingIM"))); | ||
77 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndInvApplyToObject"))); | ||
78 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndInvalidOp"))); | ||
79 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndInventoryCopyToInv"))); | ||
80 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndMoneyChangeDown"))); | ||
81 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndMoneyChangeUp"))); | ||
82 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectCopyToInv"))); | ||
83 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectCreate"))); | ||
84 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectDelete"))); | ||
85 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectRezIn"))); | ||
86 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectRezOut"))); | ||
87 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuAppear"))); | ||
88 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuHide"))); | ||
89 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight0"))); | ||
90 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight1"))); | ||
91 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight2"))); | ||
92 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight3"))); | ||
93 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight4"))); | ||
94 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight5"))); | ||
95 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight6"))); | ||
96 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight7"))); | ||
97 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndSnapshot"))); | ||
98 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStartAutopilot"))); | ||
99 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStartFollowpilot"))); | ||
100 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStartIM"))); | ||
101 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStopAutopilot"))); | ||
102 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTeleportOut"))); | ||
103 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTextureApplyToObject"))); | ||
104 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTextureCopyToInv"))); | ||
105 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTyping"))); | ||
106 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowClose"))); | ||
107 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowOpen"))); | ||
108 | } | ||
53 | } | 109 | } |
54 | LLVector3d lpos_global = gAgent.getCameraPositionGlobal(); | 110 | else |
55 | LLVector3 lpos_global_f; | ||
56 | |||
57 | lpos_global_f.setVec(lpos_global); | ||
58 | |||
59 | gAudiop->setListener(lpos_global_f, | ||
60 | LLVector3::zero, // LLViewerCamera::getInstance()->getVelocity(), // !!! BUG need to replace this with smoothed velocity! | ||
61 | LLViewerCamera::getInstance()->getUpAxis(), | ||
62 | LLViewerCamera::getInstance()->getAtAxis()); | ||
63 | |||
64 | // load up our initial set of sounds we'll want so they're in memory and ready to be played | ||
65 | |||
66 | bool mute_audio = gSavedSettings.getBOOL("MuteAudio"); | ||
67 | |||
68 | if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload")) | ||
69 | { | 111 | { |
70 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndAlert"))); | 112 | llwarns << "Failed to create an appropriate Audio Engine" << llendl; |
71 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndBadKeystroke"))); | 113 | return; |
72 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndChatFromObject"))); | ||
73 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndClick"))); | ||
74 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndClickRelease"))); | ||
75 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndHealthReductionF"))); | ||
76 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndHealthReductionM"))); | ||
77 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndIncomingChat"))); | ||
78 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndIncomingIM"))); | ||
79 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndInvApplyToObject"))); | ||
80 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndInvalidOp"))); | ||
81 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndInventoryCopyToInv"))); | ||
82 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndMoneyChangeDown"))); | ||
83 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndMoneyChangeUp"))); | ||
84 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectCopyToInv"))); | ||
85 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectCreate"))); | ||
86 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectDelete"))); | ||
87 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectRezIn"))); | ||
88 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndObjectRezOut"))); | ||
89 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuAppear"))); | ||
90 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuHide"))); | ||
91 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight0"))); | ||
92 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight1"))); | ||
93 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight2"))); | ||
94 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight3"))); | ||
95 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight4"))); | ||
96 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight5"))); | ||
97 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight6"))); | ||
98 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndPieMenuSliceHighlight7"))); | ||
99 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndSnapshot"))); | ||
100 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStartAutopilot"))); | ||
101 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStartFollowpilot"))); | ||
102 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStartIM"))); | ||
103 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndStopAutopilot"))); | ||
104 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTeleportOut"))); | ||
105 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTextureApplyToObject"))); | ||
106 | //gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTextureCopyToInv"))); | ||
107 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTyping"))); | ||
108 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowClose"))); | ||
109 | gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowOpen"))); | ||
110 | } | 114 | } |
111 | |||
112 | audio_update_volume(true); | 115 | audio_update_volume(true); |
113 | } | 116 | } |
114 | 117 | ||
@@ -158,12 +161,12 @@ void audio_update_volume(bool force_update) | |||
158 | } | 161 | } |
159 | 162 | ||
160 | // Streaming Music | 163 | // Streaming Music |
161 | if (gAudiop) | 164 | if (gAudioStream) |
162 | { | 165 | { |
163 | F32 music_volume = gSavedSettings.getF32("AudioLevelMusic"); | 166 | F32 music_volume = gSavedSettings.getF32("AudioLevelMusic"); |
164 | BOOL music_muted = gSavedSettings.getBOOL("MuteMusic"); | 167 | BOOL music_muted = gSavedSettings.getBOOL("MuteMusic"); |
165 | music_volume = mute_volume * master_volume * (music_volume*music_volume); | 168 | music_volume = mute_volume * master_volume * (music_volume*music_volume); |
166 | gAudiop->setInternetStreamGain ( music_muted ? 0.f : music_volume ); | 169 | gAudioStream->setInternetStreamGain ( music_muted ? 0.f : music_volume ); |
167 | 170 | ||
168 | } | 171 | } |
169 | 172 | ||
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp index 3675072..00e3a9a 100644 --- a/linden/indra/newview/llviewercontrol.cpp +++ b/linden/indra/newview/llviewercontrol.cpp | |||
@@ -38,7 +38,8 @@ | |||
38 | #include "indra_constants.h" | 38 | #include "indra_constants.h" |
39 | 39 | ||
40 | // For Listeners | 40 | // For Listeners |
41 | #include "llaudioengine.h" | 41 | // #include "llaudioengine.h" |
42 | #include "kokuastreamingaudio.h" | ||
42 | #include "llagent.h" | 43 | #include "llagent.h" |
43 | #include "llconsole.h" | 44 | #include "llconsole.h" |
44 | #include "lldrawpoolterrain.h" | 45 | #include "lldrawpoolterrain.h" |
@@ -310,7 +311,7 @@ static bool handleJoystickChanged(const LLSD& newvalue) | |||
310 | 311 | ||
311 | static bool handleAudioStreamMusicChanged(const LLSD& newvalue) | 312 | static bool handleAudioStreamMusicChanged(const LLSD& newvalue) |
312 | { | 313 | { |
313 | if (gAudiop) | 314 | if (gAudioStream) |
314 | { | 315 | { |
315 | if ( newvalue.asBoolean() ) | 316 | if ( newvalue.asBoolean() ) |
316 | { | 317 | { |
@@ -319,15 +320,15 @@ static bool handleAudioStreamMusicChanged(const LLSD& newvalue) | |||
319 | { | 320 | { |
320 | // if stream is already playing, don't call this | 321 | // if stream is already playing, don't call this |
321 | // otherwise music will briefly stop | 322 | // otherwise music will briefly stop |
322 | if ( !gAudiop->isInternetStreamPlaying() ) | 323 | if ( !gAudioStream->isInternetStreamPlaying() ) |
323 | { | 324 | { |
324 | gAudiop->startInternetStream(LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL()); | 325 | gAudioStream->startInternetStream(LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL()); |
325 | } | 326 | } |
326 | } | 327 | } |
327 | } | 328 | } |
328 | else | 329 | else |
329 | { | 330 | { |
330 | gAudiop->stopInternetStream(); | 331 | gAudioStream->stopInternetStream(); |
331 | } | 332 | } |
332 | } | 333 | } |
333 | return true; | 334 | return true; |
diff --git a/linden/indra/newview/llviewermedia_streamingaudio.cpp b/linden/indra/newview/llviewermedia_streamingaudio.cpp index 575dbc8..4bbc519 100644 --- a/linden/indra/newview/llviewermedia_streamingaudio.cpp +++ b/linden/indra/newview/llviewermedia_streamingaudio.cpp | |||
@@ -69,6 +69,8 @@ void LLStreamingAudio_MediaPlugins::start(const std::string& url) | |||
69 | llinfos << "mMediaPlugin is now " << mMediaPlugin << llendl; | 69 | llinfos << "mMediaPlugin is now " << mMediaPlugin << llendl; |
70 | } | 70 | } |
71 | 71 | ||
72 | mVersion = mMediaPlugin ? mMediaPlugin->getPluginVersion() : std::string(); | ||
73 | |||
72 | if(!mMediaPlugin) | 74 | if(!mMediaPlugin) |
73 | return; | 75 | return; |
74 | 76 | ||
@@ -156,6 +158,11 @@ std::string LLStreamingAudio_MediaPlugins::getURL() | |||
156 | return mURL; | 158 | return mURL; |
157 | } | 159 | } |
158 | 160 | ||
161 | std::string LLStreamingAudio_MediaPlugins::getVersion() | ||
162 | { | ||
163 | return mVersion; | ||
164 | } | ||
165 | |||
159 | void LLStreamingAudio_MediaPlugins::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) | 166 | void LLStreamingAudio_MediaPlugins::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) |
160 | { | 167 | { |
161 | if (event == MEDIA_EVENT_NAME_CHANGED) | 168 | if (event == MEDIA_EVENT_NAME_CHANGED) |
diff --git a/linden/indra/newview/llviewermedia_streamingaudio.h b/linden/indra/newview/llviewermedia_streamingaudio.h index 816e213..5802a31 100644 --- a/linden/indra/newview/llviewermedia_streamingaudio.h +++ b/linden/indra/newview/llviewermedia_streamingaudio.h | |||
@@ -56,6 +56,7 @@ class LLStreamingAudio_MediaPlugins : | |||
56 | /*virtual*/ void setGain(F32 vol); | 56 | /*virtual*/ void setGain(F32 vol); |
57 | /*virtual*/ F32 getGain(); | 57 | /*virtual*/ F32 getGain(); |
58 | /*virtual*/ std::string getURL(); | 58 | /*virtual*/ std::string getURL(); |
59 | /*virtual*/ std::string getVersion(); | ||
59 | 60 | ||
60 | // inherited from LLPluginClassMediaOwner | 61 | // inherited from LLPluginClassMediaOwner |
61 | /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); | 62 | /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); |
@@ -66,6 +67,7 @@ private: | |||
66 | LLPluginClassMedia *mMediaPlugin; | 67 | LLPluginClassMedia *mMediaPlugin; |
67 | std::string mURL; | 68 | std::string mURL; |
68 | F32 mGain; | 69 | F32 mGain; |
70 | std::string mVersion; | ||
69 | }; | 71 | }; |
70 | 72 | ||
71 | 73 | ||
diff --git a/linden/indra/newview/llviewerparcelmgr.cpp b/linden/indra/newview/llviewerparcelmgr.cpp index b589f2e..630da54 100644 --- a/linden/indra/newview/llviewerparcelmgr.cpp +++ b/linden/indra/newview/llviewerparcelmgr.cpp | |||
@@ -35,7 +35,7 @@ | |||
35 | #include "llviewerparcelmgr.h" | 35 | #include "llviewerparcelmgr.h" |
36 | 36 | ||
37 | // Library includes | 37 | // Library includes |
38 | #include "llaudioengine.h" | 38 | #include "kokuastreamingaudio.h" |
39 | #include "indra_constants.h" | 39 | #include "indra_constants.h" |
40 | #include "llcachename.h" | 40 | #include "llcachename.h" |
41 | #include "llgl.h" | 41 | #include "llgl.h" |
@@ -1672,7 +1672,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use | |||
1672 | else | 1672 | else |
1673 | { | 1673 | { |
1674 | // look for music. | 1674 | // look for music. |
1675 | if (gAudiop) | 1675 | if (gAudioStream) |
1676 | { | 1676 | { |
1677 | if (parcel) | 1677 | if (parcel) |
1678 | { | 1678 | { |
@@ -1685,12 +1685,12 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use | |||
1685 | // On entering a new parcel, stop the last stream if the | 1685 | // On entering a new parcel, stop the last stream if the |
1686 | // new parcel has a different music url. (Empty URL counts | 1686 | // new parcel has a different music url. (Empty URL counts |
1687 | // as different.) | 1687 | // as different.) |
1688 | const std::string& stream_url = gAudiop->getInternetStreamURL(); | 1688 | const std::string& stream_url = gAudioStream->getInternetStreamURL(); |
1689 | 1689 | ||
1690 | if (music_url.empty() || music_url != stream_url) | 1690 | if (music_url.empty() || music_url != stream_url) |
1691 | { | 1691 | { |
1692 | // URL is different from one currently playing. | 1692 | // URL is different from one currently playing. |
1693 | gAudiop->stopInternetStream(); | 1693 | gAudioStream->stopInternetStream(); |
1694 | 1694 | ||
1695 | // If there is a new music URL and it's valid, play it. | 1695 | // If there is a new music URL and it's valid, play it. |
1696 | if (music_url.size() > 12) | 1696 | if (music_url.size() > 12) |
@@ -1700,19 +1700,19 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use | |||
1700 | optionally_start_music(music_url); | 1700 | optionally_start_music(music_url); |
1701 | } | 1701 | } |
1702 | } | 1702 | } |
1703 | else if (!gAudiop->getInternetStreamURL().empty()) | 1703 | else if (!gAudioStream->getInternetStreamURL().empty()) |
1704 | { | 1704 | { |
1705 | llinfos << "Stopping parcel music" << llendl; | 1705 | llinfos << "Stopping parcel music" << llendl; |
1706 | gAudiop->startInternetStream(LLStringUtil::null); | 1706 | gAudioStream->startInternetStream(LLStringUtil::null); |
1707 | } | 1707 | } |
1708 | } | 1708 | } |
1709 | } | 1709 | } |
1710 | else | 1710 | else |
1711 | { | 1711 | { |
1712 | // Public land has no music | 1712 | // Public land has no music |
1713 | gAudiop->stopInternetStream(); | 1713 | gAudioStream->stopInternetStream(); |
1714 | } | 1714 | } |
1715 | }//if gAudiop | 1715 | }//if gAudioStream |
1716 | 1716 | ||
1717 | // now check for video | 1717 | // now check for video |
1718 | LLViewerParcelMedia::update( parcel ); | 1718 | LLViewerParcelMedia::update( parcel ); |
@@ -1730,7 +1730,7 @@ void optionally_start_music(const std::string& music_url) | |||
1730 | // changed as part of SL-4878 | 1730 | // changed as part of SL-4878 |
1731 | if ( gOverlayBar && gOverlayBar->musicPlaying()) | 1731 | if ( gOverlayBar && gOverlayBar->musicPlaying()) |
1732 | { | 1732 | { |
1733 | gAudiop->startInternetStream(music_url); | 1733 | gAudioStream->startInternetStream(music_url); |
1734 | } | 1734 | } |
1735 | } | 1735 | } |
1736 | } | 1736 | } |