Browse Source

Reviewed SetAudioBufferPitch() #1450

Ray 4 years ago
parent
commit
459c4754dc
2 changed files with 11 additions and 7 deletions
  1. 6 0
      examples/audio/audio_module_playing.c
  2. 5 7
      src/raudio.c

+ 6 - 0
examples/audio/audio_module_playing.c

@@ -52,6 +52,7 @@ int main(void)
 
     Music music = LoadMusicStream("resources/mini1111.xm");
     music.looping = false;
+    float pitch = 1.0f;
 
     PlayMusicStream(music);
 
@@ -84,6 +85,11 @@ int main(void)
             else ResumeMusicStream(music);
         }
 
+        if (IsKeyDown(KEY_DOWN)) pitch -= 0.01f;
+        else if (IsKeyDown(KEY_UP)) pitch += 0.01f;
+        
+        SetMusicPitch(music, pitch);
+
         // Get timePlayed scaled to bar dimensions
         timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*(screenWidth - 40);
 

+ 5 - 7
src/raudio.c

@@ -634,16 +634,14 @@ void SetAudioBufferPitch(AudioBuffer *buffer, float pitch)
 {
     if (buffer != NULL)
     {
-        float pitchMul = pitch/buffer->pitch;
-
         // Pitching is just an adjustment of the sample rate.
         // Note that this changes the duration of the sound:
         //  - higher pitches will make the sound faster
         //  - lower pitches make it slower
-        ma_uint32 newOutputSampleRate = (ma_uint32)((float)buffer->converter.config.sampleRateOut/pitchMul);
-        buffer->pitch *= (float)buffer->converter.config.sampleRateOut/newOutputSampleRate;
-
-        ma_data_converter_set_rate(&buffer->converter, buffer->converter.config.sampleRateIn, newOutputSampleRate);
+        ma_uint32 outputSampleRate = (ma_uint32)((float)buffer->converter.config.sampleRateOut/pitch);
+        ma_data_converter_set_rate(&buffer->converter, buffer->converter.config.sampleRateIn, outputSampleRate);
+        
+        buffer->pitch = pitch;
     }
 }
 
@@ -1477,7 +1475,7 @@ void SetMusicVolume(Music music, float volume)
 // Set pitch for music
 void SetMusicPitch(Music music, float pitch)
 {
-    SetAudioStreamPitch(music.stream, pitch);
+    SetAudioBufferPitch(music.stream.buffer, pitch);
 }
 
 // Get music time length (in seconds)