pvrecorder/src/miniaudio/research/miniaudio_engine.c
Go to the documentation of this file.
1 #define STB_VORBIS_HEADER_ONLY
2 #include "../extras/stb_vorbis.c" /* Enables Vorbis decoding. */
3 
4 #define MA_EXPERIMENTAL__DATA_LOOPING_AND_CHAINING
5 #define MA_DEBUG_OUTPUT
6 #define MA_IMPLEMENTATION
7 #include "../miniaudio.h"
8 #include "miniaudio_engine.h"
9 
10 typedef struct
11 {
13  ma_sound* pSound;
15 
17 {
18  //sound_loaded_notification* pLoadedNotification = (sound_loaded_notification*)pNotification;
19  //ma_uint64 lengthInPCMFrames;
20 
21  (void)pNotification;
22 
23  /*
24  This will be fired when the sound has finished loading. We should be able to retrieve the length of the sound at this point. Here we'll just set
25  the fade out time.
26  */
27  //ma_sound_get_length_in_pcm_frames(pLoadedNotification->pSound, &lengthInPCMFrames);
28  //ma_sound_set_fade_point_in_frames(pLoadedNotification->pSound, 1, 1, 0, lengthInPCMFrames - 192000, lengthInPCMFrames);
29 }
30 
31 int main(int argc, char** argv)
32 {
33  ma_result result;
34  ma_resource_manager resourceManager;
35  ma_resource_manager_config resourceManagerConfig;
36  ma_engine engine;
37  ma_engine_config engineConfig;
38  ma_sound baseSound;
39  ma_sound sound;
40  ma_sound sound2;
41  sound_loaded_notification loadNotification;
42  ma_sound_group group;
43 
44 
45  if (argc < 2) {
46  printf("No input file.\n");
47  return -1;
48  }
49 
50  resourceManagerConfig = ma_resource_manager_config_init();
51  //resourceManagerConfig.decodedFormat = ma_format_f32;
52  //resourceManagerConfig.decodedChannels = 2;
53  resourceManagerConfig.decodedSampleRate = 48000;
54  //resourceManagerConfig.flags |= MA_RESOURCE_MANAGER_FLAG_NO_THREADING;
55  resourceManagerConfig.jobThreadCount = 1;
56  result = ma_resource_manager_init(&resourceManagerConfig, &resourceManager);
57  if (result != MA_SUCCESS) {
58  printf("Failed to initialize resource manager.\n");
59  return -1;
60  }
61 
62  engineConfig = ma_engine_config_init();
63  engineConfig.pResourceManager = &resourceManager;
64 
65  result = ma_engine_init(&engineConfig, &engine);
66  if (result != MA_SUCCESS) {
67  printf("Failed to initialize audio engine.\n");
68  return -1;
69  }
70 
71  result = ma_sound_group_init(&engine, 0, NULL, &group);
72  if (result != MA_SUCCESS) {
73  printf("Failed to initialize sound group.");
74  return -1;
75  }
76 
77 
78 #if 1
79  loadNotification.cb.onSignal = on_sound_loaded;
80  loadNotification.pSound = &sound;
81 
82  result = ma_sound_init_from_file(&engine, argv[1], MA_DATA_SOURCE_FLAG_DECODE | MA_DATA_SOURCE_FLAG_ASYNC /*| MA_DATA_SOURCE_FLAG_STREAM*/, &group, NULL, &baseSound);
83  if (result != MA_SUCCESS) {
84  printf("Failed to load sound: %s\n", argv[1]);
85  ma_engine_uninit(&engine);
86  return -1;
87  }
88 
89  result = ma_sound_init_copy(&engine, &baseSound, 0, &group, &sound);
90  if (result != MA_SUCCESS) {
91  printf("Failed to copy sound.\n");
92  return -1;
93  }
94 
95 #if 0
96  result = ma_sound_init_from_file(&engine, argv[1], MA_DATA_SOURCE_FLAG_DECODE /*| MA_DATA_SOURCE_FLAG_ASYNC | MA_DATA_SOURCE_FLAG_STREAM*/, NULL, &sound2);
97  if (result != MA_SUCCESS) {
98  printf("Failed to load sound: %s\n", argv[1]);
99  ma_engine_uninit(&engine);
100  return -1;
101  }
102 #endif
103 
104 
105 
106  /*ma_data_source_seek_to_pcm_frame(sound.pDataSource, 5000000);*/
107 
108  //ma_sound_group_set_pan(ma_engine_get_master_sound_group(&engine), -1);
109  ma_sound_group_set_pitch(&group, 1.25f);
110  //ma_sound_group_set_start_time(ma_engine_get_master_sound_group(&engine), 2000);
111  //ma_sound_group_set_fade_in_milliseconds(&group, 0, 1, 5000);
112  //ma_sound_group_stop(&group);
113 
114  //ma_sound_set_fade_in_milliseconds(&sound, 0, 1, 5000);
115  /*ma_sound_set_volume(&sound, 0.25f);*/
116  /*ma_sound_set_pitch(&sound, 1.1f);*/
117  /*ma_sound_set_pan(&sound, 0.0f);*/
118  ma_sound_set_looping(&sound, MA_TRUE);
119  //ma_sound_seek_to_pcm_frame(&sound, 6000000);
120  //ma_sound_set_start_time(&sound, 1110);
121  //ma_sound_set_volume(&sound, 0.5f);
122  //ma_sound_set_fade_point_in_milliseconds(&sound, 0, 0, 1, 0, 2000);
123  //ma_sound_set_fade_point_auto_reset(&sound, 0, MA_FALSE); /* Enable fading around loop transitions. */
124  //ma_sound_set_fade_point_auto_reset(&sound, 1, MA_FALSE);
125  //ma_sound_set_stop_time(&sound, 1000);
126  //ma_sound_set_volume(&sound, 1);
127  //ma_sound_set_start_time(&sound, 48000);
128  ma_sound_set_position(&sound, 0, 0, -1);
129  //ma_sound_set_spatialization_enabled(&sound, MA_FALSE);
130  ma_sound_start(&sound);
131  /*ma_sound_uninit(&sound);*/
132 
133  //ma_sleep(1000);
134  //ma_sound_set_looping(&sound2, MA_TRUE);
135  //ma_sound_set_volume(&sound2, 0.5f);
136  //ma_sound_start(&sound2);
137 
138  //ma_sleep(2000);
139  //printf("Stopping...\n");
140  //ma_sound_stop(&sound);
141  //ma_sound_group_stop(ma_engine_get_master_sound_group(&engine));
142 #endif
143 
144 #if 1
145  /*ma_engine_play_sound(&engine, argv[1], NULL);*/
146  /*ma_engine_play_sound(&engine, argv[2], NULL);
147  ma_engine_play_sound(&engine, argv[3], NULL);*/
148 #endif
149 
150 #if 0
151  for (;;) {
152  ma_resource_manager_process_next_job(&resourceManager);
153  ma_sleep(5);
154  }
155 #endif
156 
157 #if 1
158  float maxX = +10;
159  float minX = -10;
160  float posX = 0;
161  float posZ = -1.0f;
162  float step = 0.1f;
163  float stepAngle = 0.02f;
164  float angle = 0;
165 
166  float pitch = 1;
167  float pitchStep = 0.01f;
168  float pitchMin = 0.125f;
169  float pitchMax = 2;
170  for (;;) {
171  pitch += pitchStep;
172  if (pitch < pitchMin) {
173  pitch = pitchMin;
174  pitchStep = -pitchStep;
175  }
176  if (pitch > pitchMax) {
177  pitch = pitchMax;
178  pitchStep = -pitchStep;
179  }
180 
181  //ma_sound_group_set_pitch(ma_engine_get_master_sound_group(&engine), pitch);
182  //ma_sound_set_pitch(&sound, pitch);
183  //ma_sound_set_volume(&sound, pitch);
184  //ma_sound_set_pan(&sound, pitch);
185 
186  //printf("Pitch: %f\n", pitch);
187 
188 
189  posX += step;
190  if (posX > maxX) {
191  posX = maxX;
192  step = -step;
193  } else if (posX < minX) {
194  posX = minX;
195  step = -step;
196  }
197 
198  //ma_spatializer_set_position(&g_spatializer, ma_vec3f_init_3f(posX, 0, posZ));
199  ma_sound_set_position(&sound, 0, 0, -2);
200  ma_engine_listener_set_position(&engine, 0, 0, 0, -20);
201  ma_engine_listener_set_direction(&engine, 0, -1, 0, 0);
202  //ma_sound_set_velocity(&sound, step*1000, 0, 0);
203 
204  ma_engine_listener_set_direction(&engine, 0, (float)ma_cosd(angle), 0, (float)ma_sind(angle));
205  angle += stepAngle;
206 
207  ma_sleep(1);
208  }
209 #endif
210 
211  printf("Press Enter to quit...");
212  getchar();
213 
214  ma_sound_uninit(&sound);
215  ma_engine_uninit(&engine);
216 
217  return 0;
218 }
219 
220 /* stb_vorbis implementation must come after the implementation of miniaudio. */
221 #if defined(_MSC_VER) && !defined(__clang__)
222  #pragma warning(push)
223  #pragma warning(disable:4100) /* unreferenced formal parameter */
224  #pragma warning(disable:4244) /* '=': conversion from '' to '', possible loss of data */
225  #pragma warning(disable:4245) /* '=': conversion from '' to '', signed/unsigned mismatch */
226  #pragma warning(disable:4456) /* declaration of '' hides previous local declaration */
227  #pragma warning(disable:4457) /* declaration of '' hides function parameter */
228  #pragma warning(disable:4701) /* potentially uninitialized local variable '' used */
229 #else
230 #endif
231 #undef STB_VORBIS_HEADER_ONLY
232 #include "../extras/stb_vorbis.c"
233 #if defined(_MSC_VER) && !defined(__clang__)
234  #pragma warning(pop)
235 #else
236 #endif
ma_resource_manager_config::decodedSampleRate
ma_uint32 decodedSampleRate
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1517
ma_engine_init
MA_API ma_result ma_engine_init(const ma_engine_config *pConfig, ma_engine *pEngine)
NULL
#define NULL
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/speex_resampler/thirdparty/resample.c:92
ma_engine_listener_set_position
MA_API void ma_engine_listener_set_position(ma_engine *pEngine, ma_uint32 listenerIndex, float x, float y, float z)
ma_engine_config_init
MA_API ma_engine_config ma_engine_config_init(void)
ma_engine_listener_set_direction
MA_API void ma_engine_listener_set_direction(ma_engine *pEngine, ma_uint32 listenerIndex, float x, float y, float z)
ma_engine
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1968
ma_sound
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1912
MA_DATA_SOURCE_FLAG_ASYNC
#define MA_DATA_SOURCE_FLAG_ASYNC
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1123
sound_loaded_notification::cb
ma_async_notification_callbacks cb
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.c:12
sound_loaded_notification
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.c:10
f
f
ma_async_notification_callbacks
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1213
ma_result
int ma_result
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1658
ma_sound_group_set_pitch
MA_API void ma_sound_group_set_pitch(ma_sound_group *pGroup, float pitch)
ma_resource_manager_process_next_job
MA_API ma_result ma_resource_manager_process_next_job(ma_resource_manager *pResourceManager)
ma_sound_group_init
MA_API ma_result ma_sound_group_init(ma_engine *pEngine, ma_uint32 flags, ma_sound_group *pParentGroup, ma_sound_group *pGroup)
ma_resource_manager_init
MA_API ma_result ma_resource_manager_init(const ma_resource_manager_config *pConfig, ma_resource_manager *pResourceManager)
ma_resource_manager_config::jobThreadCount
ma_uint32 jobThreadCount
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1518
ma_sound_set_position
MA_API void ma_sound_set_position(ma_sound *pSound, float x, float y, float z)
ma_resource_manager_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1511
ma_async_notification
void ma_async_notification
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1211
MA_DATA_SOURCE_FLAG_DECODE
#define MA_DATA_SOURCE_FLAG_DECODE
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1122
ma_async_notification_callbacks::onSignal
void(* onSignal)(ma_async_notification *pNotification)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1215
ma_sound_uninit
MA_API void ma_sound_uninit(ma_sound *pSound)
miniaudio_engine.h
ma_sound_init_copy
MA_API ma_result ma_sound_init_copy(ma_engine *pEngine, const ma_sound *pExistingSound, ma_uint32 flags, ma_sound_group *pGroup, ma_sound *pSound)
sound_loaded_notification::pSound
ma_sound * pSound
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.c:13
ma_resource_manager
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1528
ma_resource_manager_config_init
MA_API ma_resource_manager_config ma_resource_manager_config_init(void)
ma_engine_config::pResourceManager
ma_resource_manager * pResourceManager
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1948
main
int main(int argc, char **argv)
Definition: pvrecorder/src/miniaudio/research/miniaudio_engine.c:31
python.test_porcupine.argv
argv
Definition: test_porcupine.py:158
on_sound_loaded
void on_sound_loaded(ma_async_notification *pNotification)
Definition: pvrecorder/src/miniaudio/research/miniaudio_engine.c:16
ma_sound_init_from_file
MA_API ma_result ma_sound_init_from_file(ma_engine *pEngine, const char *pFilePath, ma_uint32 flags, ma_sound_group *pGroup, ma_fence *pDoneFence, ma_sound *pSound)
ma_cosd
static MA_INLINE double ma_cosd(double x)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:818
MA_TRUE
#define MA_TRUE
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1530
MA_SUCCESS
#define MA_SUCCESS
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1659
ma_sind
static MA_INLINE double ma_sind(double x)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:787
ma_engine_uninit
MA_API void ma_engine_uninit(ma_engine *pEngine)
ma_engine_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1946
ma_sleep
static void ma_sleep(ma_uint32 milliseconds)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:522
ma_sound_set_looping
MA_API void ma_sound_set_looping(ma_sound *pSound, ma_bool8 isLooping)
ma_sound_start
MA_API ma_result ma_sound_start(ma_sound *pSound)


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:14:49