Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
86a8e06a
Commit
86a8e06a
authored
Aug 13, 2015
by
Viktor Lidholt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adds sound support to sprite api
parent
5cf3b58f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
167 additions
and
0 deletions
+167
-0
sound.dart
examples/game/lib/sound.dart
+162
-0
sprites.dart
examples/game/lib/sprites.dart
+5
-0
No files found.
examples/game/lib/sound.dart
0 → 100644
View file @
86a8e06a
part of
sprites
;
// TODO: The sound effects should probably use Android's SoundPool instead of
// MediaPlayer as it is more efficient and flexible for playing back sound effects
typedef
void
SoundCompleteCallback
(
);
class
SoundEffect
{
SoundEffect
(
this
.
_url
);
// TODO: Remove load method from SoundEffect
Future
load
()
async
{
UrlResponse
response
=
await
fetchUrl
(
_url
);
_data
=
response
.
body
;
}
String
_url
;
Object
_data
;
}
class
SoundStream
{
SoundStream
(
this
.
sound
,
this
.
tag
,
this
.
loop
,
this
.
time
,
this
.
volume
,
this
.
pitch
,
this
.
pan
,
this
.
callback
);
// TODO: Make these properties work
SoundEffect
sound
;
bool
playing
=
false
;
bool
loop
=
false
;
double
time
=
0.0
;
double
volume
=
1.0
;
double
pitch
=
1.0
;
double
pan
=
0.0
;
Object
tag
;
// TODO: Implement completion callback. On completion, sounds should
// also be removed from the list of playing sounds.
SoundCompleteCallback
callback
;
MediaPlayerProxy
_player
;
}
SoundPool
_sharedSoundPool
;
class
SoundPool
{
static
SoundPool
sharedInstance
()
{
if
(
_sharedSoundPool
==
null
)
{
_sharedSoundPool
=
new
SoundPool
();
}
return
_sharedSoundPool
;
}
SoundPool
()
{
_mediaService
=
new
MediaServiceProxy
.
unbound
();
shell
.
requestService
(
null
,
_mediaService
);
}
MediaServiceProxy
_mediaService
;
List
<
SoundStream
>
_playingSounds
=
[];
// TODO: This should no longer be needed when moving to SoundPool backing
Map
<
SoundEffect
,
MediaPlayerProxy
>
_mediaPlayers
=
{};
Future
_prepare
(
SoundStream
playingSound
)
async
{
await
playingSound
.
_player
.
ptr
.
prepare
(
playingSound
.
sound
.
_data
);
}
// TODO: Move sound loading here
// TODO: Support loading sounds from bundles
// Future<SoundEffect> load(url) async {
// ...
// }
// TODO: Add sound unloader
// unload(SoundEffect effect) {
// ...
// }
// TODO: Add paused property (should pause playback of all sounds)
bool
paused
;
SoundStream
play
(
SoundEffect
sound
,
[
Object
tag
,
bool
loop
=
false
,
double
volume
=
1.0
,
double
pitch
=
1.0
,
double
pan
=
0.0
,
double
startTime
=
0.0
,
SoundCompleteCallback
callback
=
null
])
{
// Create new PlayingSound object
SoundStream
playingSound
=
new
SoundStream
(
sound
,
tag
,
loop
,
startTime
,
volume
,
pitch
,
pan
,
callback
);
// TODO: Replace this with calls to SoundPool
if
(
_mediaPlayers
[
sound
]
==
null
)
{
// Create player
playingSound
.
_player
=
new
MediaPlayerProxy
.
unbound
();
_mediaService
.
ptr
.
createPlayer
(
playingSound
.
_player
);
// Prepare sound, then play it
_prepare
(
playingSound
).
then
((
_
)
{
playingSound
.
_player
.
ptr
.
seekTo
((
startTime
*
1000.0
).
toInt
());
playingSound
.
_player
.
ptr
.
start
();
});
_playingSounds
.
add
(
playingSound
);
_mediaPlayers
[
sound
]
=
playingSound
.
_player
;
}
else
{
// Reuse player
playingSound
.
_player
=
_mediaPlayers
[
sound
];
playingSound
.
_player
.
ptr
.
seekTo
((
startTime
*
1000.0
).
toInt
());
playingSound
.
_player
.
ptr
.
start
();
}
return
playingSound
;
}
void
stop
(
Object
tag
)
{
for
(
int
i
=
_playingSounds
.
length
;
i
>=
0
;
i
--)
{
SoundStream
playingSound
=
_playingSounds
[
i
];
if
(
playingSound
.
tag
==
tag
)
{
playingSound
.
_player
.
ptr
.
pause
();
_playingSounds
.
removeAt
(
i
);
}
}
}
List
<
SoundStream
>
playingSoundsForTag
(
Object
tag
)
{
List
<
SoundStream
>
list
=
[];
for
(
SoundStream
playingSound
in
_playingSounds
)
{
if
(
playingSound
.
tag
==
tag
)
{
list
.
add
(
playingSound
);
}
}
return
list
;
}
void
stopAll
()
{
for
(
SoundStream
playingSound
in
_playingSounds
)
{
playingSound
.
_player
.
ptr
.
pause
();
}
_playingSounds
=
[];
}
}
examples/game/lib/sprites.dart
View file @
86a8e06a
...
@@ -10,12 +10,16 @@ import 'dart:math' as math;
...
@@ -10,12 +10,16 @@ import 'dart:math' as math;
import
'dart:typed_data'
;
import
'dart:typed_data'
;
import
'dart:sky'
;
import
'dart:sky'
;
import
'package:mojo/mojo/url_response.mojom.dart'
;
import
'package:sky/animation/curves.dart'
;
import
'package:sky/animation/curves.dart'
;
import
'package:sky/base/scheduler.dart'
as
scheduler
;
import
'package:sky/base/scheduler.dart'
as
scheduler
;
import
'package:sky/mojo/asset_bundle.dart'
;
import
'package:sky/mojo/asset_bundle.dart'
;
import
'package:sky/mojo/net/fetch.dart'
;
import
'package:sky/mojo/shell.dart'
as
shell
;
import
'package:sky/rendering/box.dart'
;
import
'package:sky/rendering/box.dart'
;
import
'package:sky/rendering/object.dart'
;
import
'package:sky/rendering/object.dart'
;
import
'package:sky/widgets/framework.dart'
;
import
'package:sky/widgets/framework.dart'
;
import
'package:sky_services/media/media.mojom.dart'
;
import
'package:vector_math/vector_math.dart'
;
import
'package:vector_math/vector_math.dart'
;
part
'action.dart'
;
part
'action.dart'
;
...
@@ -26,6 +30,7 @@ part 'node.dart';
...
@@ -26,6 +30,7 @@ part 'node.dart';
part
'node3d.dart'
;
part
'node3d.dart'
;
part
'node_with_size.dart'
;
part
'node_with_size.dart'
;
part
'particle_system.dart'
;
part
'particle_system.dart'
;
part
'sound.dart'
;
part
'sprite.dart'
;
part
'sprite.dart'
;
part
'spritesheet.dart'
;
part
'spritesheet.dart'
;
part
'sprite_box.dart'
;
part
'sprite_box.dart'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment