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)); |