Fix music frequency conversion bug
This commit is contained in:
@@ -96,6 +96,7 @@ void givealbuffer_common(const void *buf, const uint8_t src, const int size){
|
|||||||
int conv_size;
|
int conv_size;
|
||||||
int i;
|
int i;
|
||||||
double gain;
|
double gain;
|
||||||
|
int target_rate;
|
||||||
if(audio[src] == -1) return;
|
if(audio[src] == -1) return;
|
||||||
|
|
||||||
gain = sound_muted ? 0.0 : pow(10.0, (double) sound_gain / 20.0);
|
gain = sound_muted ? 0.0 : pow(10.0, (double) sound_gain / 20.0);
|
||||||
@@ -114,18 +115,18 @@ void givealbuffer_common(const void *buf, const uint8_t src, const int size){
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_NEW_API
|
#ifdef USE_NEW_API
|
||||||
output_size = (double)conv_size * info[src].rate / freq;
|
target_rate = info[src].rate;
|
||||||
#else
|
#else
|
||||||
output_size = (double)conv_size * info[src].play.sample_rate / freq;
|
target_rate = info[src].play.sample_rate;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
output_size = (double)conv_size * target_rate / freq;
|
||||||
|
output_size -= output_size % 2;
|
||||||
output = malloc(output_size);
|
output = malloc(output_size);
|
||||||
|
|
||||||
for(i = 0; i < output_size / sizeof(int16_t) / 2; i++){
|
for(i = 0; i < output_size / sizeof(int16_t) / 2; i++){
|
||||||
#ifdef USE_NEW_API
|
int ind = i * freq / target_rate * 2;
|
||||||
int ind = i * freq / info[src].rate * 2;
|
ind -= ind % 2;
|
||||||
#else
|
|
||||||
int ind = i * freq / info[src].play.sample_rate * 2;
|
|
||||||
#endif
|
|
||||||
output[i * 2 + 0] = conv[ind + 0] * gain;
|
output[i * 2 + 0] = conv[ind + 0] * gain;
|
||||||
output[i * 2 + 1] = conv[ind + 1] * gain;
|
output[i * 2 + 1] = conv[ind + 1] * gain;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user