Skip to content

Commit

Permalink
feat(audio): add audio sample
Browse files Browse the repository at this point in the history
Co-Authored-By: João Miguel Nogueira <[email protected]>
  • Loading branch information
diogomsmiranda and Dageus committed Nov 26, 2024
1 parent d045b21 commit b10a017
Show file tree
Hide file tree
Showing 10 changed files with 146 additions and 0 deletions.
1 change: 1 addition & 0 deletions engine/samples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ macro(make_sample)
endif()
endmacro()
# Add samples
make_sample(DIR "audio" ASSETS)
make_sample(DIR "hello-cubos")
make_sample(DIR "settings")
make_sample(DIR "events")
Expand Down
Binary file added engine/samples/audio/assets/bg_music.mp3
Binary file not shown.
3 changes: 3 additions & 0 deletions engine/samples/audio/assets/bg_music.mp3.meta
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"id": "059c16e7-a439-44c7-9bdc-7f133dba0c80"
}
13 changes: 13 additions & 0 deletions engine/samples/audio/assets/input.bind
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"actions": {
"skip": [
{"keys": ["Return"]}
],
"play_pause": [
{"keys": ["Space"]}
],
"stop": [
{"keys": ["BackSpace"]}
]
}
}
3 changes: 3 additions & 0 deletions engine/samples/audio/assets/input.bind.meta
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"id": "6709a9ce-8651-4295-bdf2-848b052ce1f7"
}
Binary file added engine/samples/audio/assets/medieval_fanfare.wav
Binary file not shown.
3 changes: 3 additions & 0 deletions engine/samples/audio/assets/medieval_fanfare.wav.meta
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"id": "3f93e774-888c-4ead-8819-67fc7e873df0"
}
Binary file added engine/samples/audio/assets/sample1.flac
Binary file not shown.
3 changes: 3 additions & 0 deletions engine/samples/audio/assets/sample1.flac.meta
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"id": "ccf3b646-1307-430d-bf3e-a23e06430043"
}
120 changes: 120 additions & 0 deletions engine/samples/audio/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
#include <cubos/engine/assets/plugin.hpp>
#include <cubos/engine/audio/plugin.hpp>
#include <cubos/engine/collisions/plugin.hpp>
#include <cubos/engine/fixed_step/plugin.hpp>
#include <cubos/engine/input/plugin.hpp>
#include <cubos/engine/physics/plugin.hpp>
#include <cubos/engine/render/camera/camera.hpp>
#include <cubos/engine/render/camera/draws_to.hpp>
#include <cubos/engine/render/camera/perspective.hpp>
#include <cubos/engine/render/defaults/plugin.hpp>
#include <cubos/engine/render/defaults/target.hpp>
#include <cubos/engine/settings/plugin.hpp>
#include <cubos/engine/settings/settings.hpp>
#include <cubos/engine/transform/plugin.hpp>
#include <cubos/engine/window/plugin.hpp>

#include "cubos/core/tel/logging.hpp"
#include "cubos/engine/audio/pause.hpp"
#include "cubos/engine/audio/play.hpp"
#include "cubos/engine/audio/stop.hpp"

using namespace cubos::engine;

/// [Get handles to assets]
static const Asset<Audio> AudioAssetMP3 = AnyAsset("059c16e7-a439-44c7-9bdc-7f133dba0c80");
static const Asset<Audio> AudioAssetWAV = AnyAsset("3f93e774-888c-4ead-8819-67fc7e873df0");
static const Asset<Audio> AudioAssetFLAC = AnyAsset("ccf3b646-1307-430d-bf3e-a23e06430043");
static const Asset<InputBindings> BindingsAsset = AnyAsset("6709a9ce-8651-4295-bdf2-848b052ce1f7");
static const std::array<Asset<Audio>, 3> AudioAssets = {AudioAssetMP3, AudioAssetWAV, AudioAssetFLAC};
/// [Get handles to assets]

int main(int argc, char** argv)
{
Cubos cubos{argc, argv};

size_t currAsset = 0;

cubos.plugin(settingsPlugin);
cubos.plugin(windowPlugin);
cubos.plugin(transformPlugin);
cubos.plugin(fixedStepPlugin);
cubos.plugin(assetsPlugin);
cubos.plugin(renderDefaultsPlugin);
cubos.plugin(collisionsPlugin);
cubos.plugin(physicsPlugin);
cubos.plugin(inputPlugin);
cubos.plugin(audioPlugin);

cubos.startupSystem("configure Assets").before(settingsTag).call([](Settings& settings) {
settings.setString("assets.app.osPath", APP_ASSETS_PATH);
settings.setString("assets.builtin.osPath", BUILTIN_ASSETS_PATH);
});

cubos.startupSystem("load and set the Input Bindings")
.tagged(assetsTag)
.call([](const Assets& assets, Input& input) {
auto bindings = assets.read<InputBindings>(BindingsAsset);
input.bind(*bindings);
});

cubos.startupSystem("create a camera").call([](Commands cmds) {
auto targetEnt = cmds.create().add(RenderTargetDefaults{}).entity();

cmds.create()
.relatedTo(targetEnt, DrawsTo{})
.add(Camera{.zNear = 0.1F, .zFar = 1000.0F})
.add(PerspectiveCamera{.fovY = 60.0F})
.add(Position{{0.0F, 0.0F, 0.0F}})
.add(Rotation::lookingAt({-1.0F, -1.0F, -1.0F}, glm::vec3{0.0F, 1.0F, 0.0F}))
.add(AudioListener{true});
});

cubos.startupSystem("create an audio source").after(audioStateInitTag).call([](Commands cmds) {
cmds.create()
.add(Position{{0.0F, 0.0F, 0.0F}})
.add(Velocity{.vec = {1.0F, 1.0F, 1.0F}})
.add(Rotation::lookingAt({-1.0F, -1.0F, -1.0F}, glm::vec3{0.0F, 1.0F, 0.0F}))
.add(AudioSource{});
});

cubos.system("play audio").call([&currAsset](Input& input, Commands cmds, Query<Entity, AudioSource&> query) {
for (auto [ent, src] : query)
{
if (src.sound.isNull())
{
src.sound = AudioAssets[0];
cmds.add(ent, AudioPlay{});
}

if (input.justPressed("skip"))
{
CUBOS_INFO("SKIP: {}", src.sound.getIdString());
cmds.add(ent, AudioStop{});
src.sound = AudioAssets[++currAsset % 3];
CUBOS_INFO("PLAYING: {}", src.sound.getIdString());
cmds.add(ent, AudioPlay{});
}
if (input.justPressed("play_pause"))
{
if (src.playing)
{
cmds.add(ent, AudioPause{});
CUBOS_INFO("PAUSING: {}", src.sound.getIdString());
}
else
{
cmds.add(ent, AudioPlay{});
CUBOS_INFO("PLAYING: {}", src.sound.getIdString());
}
}
if (input.justPressed("stop"))
{
cmds.add(ent, AudioStop{});
CUBOS_INFO("STOPPING: {}", src.sound.getIdString());
}
}
});

cubos.run();
}

0 comments on commit b10a017

Please sign in to comment.