title: iOS sine wave generation - audible clicking
body: <p>I am in the process of creating a synthesiser for iOS. After playing around and attempting to learn core audio, I have encountered a problem that I cannot get my head around. My sine wave makes a clicking noise on regular intervals, which Im guessing is related to the phase. I have looked at several guides and books on the subject, and all suggest that I am doing it correctly.</p>
  
  <p>If anybody would be so kind to look at my code for me it would be greatly appreciated.</p>
  
  <pre><code>static OSStatus renderInput(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData)
  {
  
  
      // Get a reference to the object that was passed with the callback
      // In this case, the AudioController passed itself so
      // that you can access its data.
      AudioController *THIS = (AudioController*)inRefCon;
  
      // Get a pointer to the dataBuffer of the AudioBufferList
      AudioSampleType *outA = (AudioSampleType *)ioData-&gt;mBuffers[0].mData;
  
      float freq = THIS-&gt;Frequency;   
      float phase = THIS-&gt;sinPhase;
  
      float envValue;
      float sinSignal;
  
      // The amount the phase changes in  single sample
      double phaseIncrement = 2 * M_PI * freq / kGraphSampleRate;
  
      // Loop through the callback buffer, generating samples
      for (UInt32 i = 0; i &lt; inNumberFrames; ++i) {       
  
          sinSignal = sin(phase);
  
          envValue = THIS-&gt;env.tick();
  
          // Put the sample into the buffer
          // Scale the -1 to 1 values float to
          // -32767 to 32767 and then cast to an integer
          outA[i] = (SInt16)(((sinSignal * 32767.0f) / 2) * envValue);
  
          phase = phase + phaseIncrement;
  
          if (phase &gt;= (2 * M_PI * freq)) {
              phase = phase - (2 * M_PI * freq);
          }
      }
  
      // Store the phase for the next callback.
      THIS-&gt;sinPhase = phase;
  
      return noErr;
  }
  </code></pre>