How to use an Audio Unit on the iPhone

前端 未结 4 1072
谎友^
谎友^ 2021-02-04 20:41

I\'m looking for a way to change the pitch of recorded audio as it is saved to disk, or played back (in real time). I understand Audio Units can be used for this. The iPhone off

4条回答
  •  渐次进展
    2021-02-04 21:07

    I've used the NewTimePitch audio unit for this before, the Audio Component Description for that is

    var newTimePitchDesc = AudioComponentDescription(componentType: kAudioUnitType_FormatConverter,
            componentSubType: kAudioUnitSubType_NewTimePitch,
            componentManufacturer: kAudioUnitManufacturer_Apple,
            componentFlags: 0,
            componentFlagsMask: 0)
    

    then you can change the pitch parameter with an AudioUnitSetParamater call. For example this changes the pitch by -1000 cents

    err = AudioUnitSetParameter(newTimePitchAudioUnit,
            kNewTimePitchParam_Pitch,
            kAudioUnitScope_Global,
            0,
            -1000,
            0)
    

    The parameters for this audio unit are as follows

        // Parameters for AUNewTimePitch
    enum {
          // Global, rate, 1/32 -> 32.0, 1.0
      kNewTimePitchParam_Rate                         = 0,
          // Global, Cents, -2400 -> 2400, 1.0
      kNewTimePitchParam_Pitch                        = 1,
          // Global, generic, 3.0 -> 32.0, 8.0
      kNewTimePitchParam_Overlap                      = 4,
          // Global, Boolean, 0->1, 1
      kNewTimePitchParam_EnablePeakLocking            = 6
    };
    

    but you'll only need to change the pitch parameter for your purposes. For a guide on how to implement this refer to Justin's answer

提交回复
热议问题