Subversion Repositories Games.Carmageddon

Rev

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 volume_db) {
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
    // convert from directsound -10000 - 0 decibel volume scale
116
       miniaudio->init_volume = volume;
-
 
117
       return eAB_success;
-
 
118
    }
-
 
119
 
105
    linear_volume = ma_volume_db_to_linear(volume_db / 100.0f);
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));