summaryrefslogtreecommitdiff
path: root/tests/pke-test-audio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pke-test-audio.cpp')
-rw-r--r--tests/pke-test-audio.cpp92
1 files changed, 89 insertions, 3 deletions
diff --git a/tests/pke-test-audio.cpp b/tests/pke-test-audio.cpp
index 076634a..2d48022 100644
--- a/tests/pke-test-audio.cpp
+++ b/tests/pke-test-audio.cpp
@@ -1,7 +1,10 @@
#include "./pke-test-audio.h"
+#include "ecs.hpp"
#include "game-settings.hpp"
+#include "math-helpers.hpp"
+#include "physics.hpp"
#include "pk.h"
#include "audio-types.hpp"
@@ -21,13 +24,18 @@ void pke_test_audio_spinup() {
pkeSettings.isSimulationPaused = true;
PkeThreads_Init();
AM_Init();
+ Physics_Init();
+ ECS_Init();
pke_audio_init();
+ pke_audio_mstr.master_volume = 0.125;
// pk_funcinstr_teardown();
};
void pke_test_audio_teardown() {
// pk_funcinstr_init();
pke_audio_teardown();
+ ECS_Teardown();
+ Physics_Teardown();
AM_Teardown();
PkeThreads_Teardown();
bkt = nullptr;
@@ -54,7 +62,7 @@ int pke_test_audio_001() {
AssetHandle ah_sawtooth = AM_Register(ak_sawtooth, PKE_ASSET_TYPE_AUDIO, zip_bop_bytes, sizeof(float) * 48000, 64);
pk_delete<float>(zip_bop_bytes, 48000, bkt);
- pke_audio_play(ah_sawtooth, pke_audio_source_music, glm::vec3(0), pke_audio_flag_none);
+ pke_audio_play(ah_sawtooth, pke_audio_source_music, pke_audio_flag_none, glm::vec3(0));
while (pke_audio_mstr.playing_objects.next > 0) {
pke_audio_tick(0.001f);
@@ -101,7 +109,7 @@ int pke_test_audio_002() {
}
std::chrono::milliseconds(1);
for(k = 0; k < 3; ++k) {
- pke_audio_play(ahs[k], pke_audio_source_music, src_poss[k], pke_audio_flag_pos_spatial);
+ pke_audio_play(ahs[k], pke_audio_source_music, pke_audio_flag_pos_spatial, src_poss[k]);
}
while (pke_audio_mstr.playing_objects.next > 0) {
@@ -121,8 +129,81 @@ int pke_test_audio_002() {
return 0;
}
+int pke_test_audio_003() {
+ uint64_t i, k;
+ try {
+ bkt = pk_mem_bucket_create("pke_test_serialization", PK_MEM_DEFAULT_BUCKET_SIZE, PK_MEMBUCKET_FLAG_NONE);
+
+ UBO.model = glm::translate(glm::mat4(1.f), glm::vec3(0, 0, 0));
+
+ InstPos inst_pos{};
+ Entity_Base *ent = ECS_CreateGenericEntity();
+ CompInstance *inst = ECS_CreateInstance(ent, pk_uuid_zed, nullptr, &inst_pos);
+
+ uint64_t dur_seconds = 2;
+ uint64_t bit_rate = 48000;
+ uint64_t total_frames = bit_rate * dur_seconds;
+ AssetHandle ahs[1];
+ const AssetKey aks[1] {"sawtooth"};
+ float freqs[1] = {2000.f};
+ glm::vec3 src_poss[1] = {
+ glm::vec3(5, 0, 5),
+ };
+
+ for(k = 0; k < 1; ++k) {
+ float *zip_bop_bytes = pk_new<float>(total_frames, bkt);
+ float phase = 0.0f;
+ float phase_increment = freqs[k] / float(bit_rate);
+ for (i = 0; i < total_frames; ++i) {
+ zip_bop_bytes[i] = 2.f * (phase - floor(phase + 0.5f));
+ phase += phase_increment;
+ if (phase >= 1.f) phase -= 1.f;
+ }
+ ahs[k] = AM_Register(aks[k], PKE_ASSET_TYPE_AUDIO, zip_bop_bytes, sizeof(float) * total_frames, 64);
+ pk_delete<float>(zip_bop_bytes, total_frames, bkt);
+ }
+
+ for(k = 0; k < 1; ++k) {
+ pke_audio_play(ahs[k], pke_audio_source_music, pke_audio_flag_pos_spatial, src_poss[k], inst->instanceHandle);
+ }
+
+
+ float delta = 0.f;
+ float delta_elapsed = 0.f;
+ btTransform trfm{};
+ std::chrono::time_point ts = std::chrono::steady_clock::now();
+ std::chrono::time_point now = std::chrono::steady_clock::now();
+ while (pke_audio_mstr.playing_objects.next > 0) {
+ now = std::chrono::steady_clock::now();
+ auto ts_diff = now - ts;
+ delta = ts_diff.count() / 1000000000.f;
+ ts = now;
+
+ delta_elapsed += delta;
+ pke_audio_tick(delta);
+ glm::vec3 rot_pos = glm::rotate(glm::mat4(1.f), glm::radians(360.f) * delta_elapsed, glm::vec3(0.f, 1.f, 0.f)) * glm::vec4(5.f, 0.f, 5.f, 1.f);
+ GlmToBullet(rot_pos, trfm.getOrigin());
+ // NOTE: fine for a test, but prefer ECS_UpdateInstance()
+ inst->bt.rigidBody->setWorldTransform(trfm);
+ // fprintf(stdout, "%f,%f,%f\n", rot_pos.x, rot_pos.y, rot_pos.z);
+
+ std::this_thread::sleep_for(std::chrono::nanoseconds(1));
+ }
+
+ for(k = 0; k < 1; ++k) {
+ AM_Release(ahs[k]);
+ }
+
+ } catch (const std::exception &ex) {
+ pk_mem_bucket_destroy(bkt);
+ throw;
+ }
+ pk_mem_bucket_destroy(bkt);
+ return 0;
+}
+
struct pke_test_group *pke_test_audio_get_group() {
- static const uint64_t test_count = 2;
+ static const uint64_t test_count = 3;
static struct pke_test tests[test_count] = {
{
.title = "test 001",
@@ -134,6 +215,11 @@ struct pke_test_group *pke_test_audio_get_group() {
.func = pke_test_audio_002,
.expected_result = 0,
},
+ {
+ .title = "test 003",
+ .func = pke_test_audio_003,
+ .expected_result = 0,
+ },
};
static struct pke_test_group group = {};
group.title = "audio";