Rev 1 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1 | Rev 21 | ||
---|---|---|---|
Line 9... | Line 9... | ||
9 | #include <string.h> |
9 | #include <string.h> |
10 | 10 | ||
11 | typedef struct tS3_sample_struct_miniaudio { |
11 | typedef struct tS3_sample_struct_miniaudio { |
12 | ma_audio_buffer_ref buffer_ref; |
12 | ma_audio_buffer_ref buffer_ref; |
13 | ma_sound sound; |
13 | ma_sound sound; |
- | 14 | int init_volume; |
|
- | 15 | int init_pan; |
|
- | 16 | int init_new_rate; |
|
14 | int initialized; |
17 | int initialized; |
15 | } tS3_sample_struct_miniaudio; |
18 | } tS3_sample_struct_miniaudio; |
16 | 19 | ||
17 | // dethrace |
20 | // dethrace |
18 | ma_engine miniaudio_engine; |
21 | ma_engine miniaudio_engine; |
Line 74... | Line 77... | ||
74 | result = ma_sound_init_from_data_source(&miniaudio_engine, &miniaudio->buffer_ref, flags, NULL, &miniaudio->sound); |
77 | result = ma_sound_init_from_data_source(&miniaudio_engine, &miniaudio->buffer_ref, flags, NULL, &miniaudio->sound); |
75 | if (result != MA_SUCCESS) { |
78 | if (result != MA_SUCCESS) { |
76 | return eAB_error; |
79 | return eAB_error; |
77 | } |
80 | } |
78 | miniaudio->initialized = 1; |
81 | miniaudio->initialized = 1; |
- | 82 | ||
- | 83 | if (miniaudio->init_volume > 0) |
|
- | 84 | { |
|
- | 85 | AudioBackend_SetVolume (chan, miniaudio->init_volume); |
|
- | 86 | AudioBackend_SetPan (chan, miniaudio->init_pan); |
|
- | 87 | AudioBackend_SetFrequency (chan, miniaudio->init_new_rate); |
|
- | 88 | } |
|
79 | 89 | ||
80 | ma_sound_set_looping(&miniaudio->sound, chan->repetitions == 0); |
90 | ma_sound_set_looping(&miniaudio->sound, chan->repetitions == 0); |
81 | ma_sound_start(&miniaudio->sound); |
91 | ma_sound_start(&miniaudio->sound); |
82 | return eAB_success; |
92 | return eAB_success; |
83 | } |
93 | } |
Line 92... | Line 102... | ||
92 | return 1; |
102 | return 1; |
93 | } |
103 | } |
94 | return 0; |
104 | return 0; |
95 | } |
105 | } |
96 | 106 | ||
97 | tAudioBackend_error_code AudioBackend_SetVolume(tS3_channel* chan, int |
107 | tAudioBackend_error_code AudioBackend_SetVolume(tS3_channel* chan, int volume) { |
98 | tS3_sample_struct_miniaudio* miniaudio; |
108 | tS3_sample_struct_miniaudio* miniaudio; |
99 | float linear_volume; |
109 | float linear_volume; |
100 | 110 | ||
101 | miniaudio = (tS3_sample_struct_miniaudio*)chan->type_struct_sample; |
111 | miniaudio = (tS3_sample_struct_miniaudio*)chan->type_struct_sample; |
102 | assert(miniaudio != NULL); |
112 | assert(miniaudio != NULL); |
103 | 113 | ||
- | 114 | if (!miniaudio->initialized) |
|
- | 115 | { |
|
104 |
|
116 | miniaudio->init_volume = volume; |
- | 117 | return eAB_success; |
|
- | 118 | } |
|
- | 119 | ||
105 | linear_volume = |
120 | linear_volume = volume / 510.0f; |
106 | ma_sound_set_volume(&miniaudio->sound, linear_volume); |
121 | ma_sound_set_volume(&miniaudio->sound, linear_volume); |
107 | return eAB_success; |
122 | return eAB_success; |
108 | } |
123 | } |
109 | 124 | ||
110 | tAudioBackend_error_code AudioBackend_SetPan(tS3_channel* chan, int pan) { |
125 | tAudioBackend_error_code AudioBackend_SetPan(tS3_channel* chan, int pan) { |
111 | tS3_sample_struct_miniaudio* miniaudio; |
126 | tS3_sample_struct_miniaudio* miniaudio; |
112 | 127 | ||
113 | miniaudio = (tS3_sample_struct_miniaudio*)chan->type_struct_sample; |
128 | miniaudio = (tS3_sample_struct_miniaudio*)chan->type_struct_sample; |
114 | assert(miniaudio != NULL); |
129 | assert(miniaudio != NULL); |
- | 130 | ||
- | 131 | if (!miniaudio->initialized) |
|
- | 132 | { |
|
- | 133 | miniaudio->init_pan = pan; |
|
- | 134 | return eAB_success; |
|
- | 135 | } |
|
115 | 136 | ||
116 | // convert from directsound -10000 - 10000 pan scale |
137 | // convert from directsound -10000 - 10000 pan scale |
117 | ma_sound_set_pan(&miniaudio->sound, pan / 10000.0f); |
138 | ma_sound_set_pan(&miniaudio->sound, pan / 10000.0f); |
118 | return eAB_success; |
139 | return eAB_success; |
119 | } |
140 | } |
Line 122... | Line 143... | ||
122 | tS3_sample_struct_miniaudio* miniaudio; |
143 | tS3_sample_struct_miniaudio* miniaudio; |
123 | tS3_sample* sample_data; |
144 | tS3_sample* sample_data; |
124 | 145 | ||
125 | miniaudio = (tS3_sample_struct_miniaudio*)chan->type_struct_sample; |
146 | miniaudio = (tS3_sample_struct_miniaudio*)chan->type_struct_sample; |
126 | assert(miniaudio != NULL); |
147 | assert(miniaudio != NULL); |
- | 148 | ||
- | 149 | if (!miniaudio->initialized) |
|
- | 150 | { |
|
- | 151 | miniaudio->init_new_rate = rate; |
|
- | 152 | return eAB_success; |
|
- | 153 | } |
|
127 | 154 | ||
128 | sample_data = (tS3_sample*)chan->descriptor->sound_data; |
155 | sample_data = (tS3_sample*)chan->descriptor->sound_data; |
129 | 156 | ||
130 | // convert from directsound frequency to linear pitch scale |
157 | // convert from directsound frequency to linear pitch scale |
131 | ma_sound_set_pitch(&miniaudio->sound, (rate / (float)sample_data->rate)); |
158 | ma_sound_set_pitch(&miniaudio->sound, (rate / (float)sample_data->rate)); |