libacfutils
A general purpose library of utility functions designed to make it easier to develop addons for the X-Plane flight simulator.
Loading...
Searching...
No Matches
wav.h
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license in the file COPYING
10 * or http://www.opensource.org/licenses/CDDL-1.0.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file COPYING.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2017 Saso Kiselkov. All rights reserved.
24 */
25
26#ifndef _ACF_UTILS_WAV_H_
27#define _ACF_UTILS_WAV_H_
28
29#include <stdint.h>
30
31#include <al.h>
32
33#include "geom.h"
34#include "types.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40typedef struct alc alc_t;
41
42typedef struct wav_fmt_hdr {
43 uint16_t datafmt; /* PCM = 1 */
44 uint16_t n_channels;
45 uint32_t srate; /* sample rate in Hz */
46 uint32_t byte_rate; /* (srate * bps * #channels) / 8 */
47 uint16_t padding; /* unused */
48 uint16_t bps; /* bits per sample */
50
51typedef struct wav_s {
52 char *name;
53 wav_fmt_hdr_t fmt;
54 double duration; /* in seconds */
55 alc_t *alc;
56 ALuint albuf;
57 ALuint alsrc;
58
59 vect3_t dir;
60 double cone_inner;
61 double cone_outer;
62 double gain_outer;
63
64 vect3_t pos;
65 vect3_t vel;
66 bool_t loop;
67 double ref_dist;
68 double max_dist;
69 double rolloff_fact;
70 float gain;
71 float pitch;
72
73 uint64_t play_start;
74} wav_t;
75
76API_EXPORT char **openal_list_output_devs(size_t *num_p);
77API_EXPORT alc_t *openal_init(const char *devname, bool_t shared);
78API_EXPORT alc_t *openal_init2(const char *devname, bool_t shared,
79 const int *attrs, bool_t thr_local);
80API_EXPORT void openal_fini(alc_t *alc);
81
82API_EXPORT wav_t *wav_load(const char *filename, const char *descr_name,
83 alc_t *alc);
84API_EXPORT void wav_free(wav_t *wav);
85
86API_EXPORT void wav_set_offset(wav_t *wav, float offset_sec);
87API_EXPORT float wav_get_offset(wav_t *wav);
88API_EXPORT void wav_set_gain(wav_t *wav, float gain);
89API_EXPORT float wav_get_gain(wav_t *wav);
90API_EXPORT void wav_set_loop(wav_t *wav, bool_t loop);
91API_EXPORT bool_t wav_get_loop(wav_t *wav);
92API_EXPORT void wav_set_pitch(wav_t *wav, float pitch);
93API_EXPORT float wav_get_pitch(wav_t *wav);
94API_EXPORT void wav_set_position(wav_t *wav, vect3_t pos);
95API_EXPORT vect3_t wav_get_position(wav_t *wav);
96API_EXPORT void wav_set_velocity(wav_t *wav, vect3_t vel);
97API_EXPORT vect3_t wav_get_velocity(wav_t *wav);
98API_EXPORT void wav_set_ref_dist(wav_t *wav, double d);
99API_EXPORT double wav_get_ref_dist(wav_t *wav);
100API_EXPORT void wav_set_max_dist(wav_t *wav, double d);
101API_EXPORT double wav_get_max_dist(wav_t *wav);
102API_EXPORT void wav_set_spatialize(wav_t *wav, bool_t flag);
103API_EXPORT void wav_set_rolloff_fact(wav_t *wav, double r);
104API_EXPORT double wav_get_rolloff_fact(wav_t *wav);
105
106/* Directional parameters */
107API_EXPORT void wav_set_dir(wav_t *wav, vect3_t dir);
108API_EXPORT void wav_set_cone_inner(wav_t *wav, double cone_inner);
109API_EXPORT void wav_set_cone_outer(wav_t *wav, double cone_outer);
110API_EXPORT void wav_set_gain_outer(wav_t *wav, double gain_outer);
111API_EXPORT void wav_set_gain_outerhf(wav_t *wav, double gain_outerhf);
112API_EXPORT void wav_set_stereo_angles(wav_t *wav, double a1, double a2);
113
114API_EXPORT void wav_set_air_absorption_fact(wav_t *wav, double fact);
115
116API_EXPORT bool_t wav_play(wav_t *wav);
117API_EXPORT bool_t wav_is_playing(wav_t *wav);
118API_EXPORT void wav_stop(wav_t *wav);
119
120API_EXPORT void alc_set_dist_model(alc_t *alc, ALenum model);
121API_EXPORT void alc_listener_set_pos(alc_t *alc, vect3_t pos);
122API_EXPORT vect3_t alc_listener_get_pos(alc_t *alc);
123API_EXPORT void alc_listener_set_orient(alc_t *alc, vect3_t orient);
124API_EXPORT void alc_listener_set_velocity(alc_t *alc, vect3_t vel);
125
126API_EXPORT alc_t *alc_global_save(alc_t *new_alc);
127API_EXPORT void alc_global_restore(alc_t *new_alc, alc_t *old_alc);
128
129#ifdef __cplusplus
130}
131#endif
132
133#endif /* _ACF_UTILS_WAV_H_ */
Definition wav.c:96
Definition geom.h:89
Definition wav.h:51