使用Out噪声更改AudioPitch的最佳方法是什么?

时间:2016-12-30 09:54:22

标签: objective-c avaudioengine avaudioplayernode

我对语音转换器应用程序非常新。可以任何一个请建议我改变音调的方式,如女声。

这是我使用的代码。

audioPlayerNode=[[AVAudioPlayerNode alloc]init];

    [audioEngine attachNode:audioPlayerNode];

    changePitchEffect=[[AVAudioUnitTimePitch alloc]init];
      changePitchEffect.pitch=pitch;
 [audioEngine attachNode:changePitchEffect];


[audioEngine connect:audioPlayerNode to:changePitchEffect format:audioFile.processingFormat ];

[audioEngine connect:changePitchEffect to:audioEngine.outputNode format:processingFormat];

[audioPlayerNode scheduleFile:audioFile atTime:nil completionHandler:nil ];

    AVAudioInputNode *input = [audioEngine inputNode];
    AVAudioFormat *format = [input outputFormatForBus: 0];

    [audioEngine prepare];

    [audioEngine startAndReturnError:nil];

更改audioFile的音高后我错过了清晰度并且受到更多干扰。任何人都建议解决此问题

1 个答案:

答案 0 :(得分:2)

这不是一项微不足道的任务。基本上你必须改变声音formants而不是整体音高。

想象一个男人和一个女人唱着同样的音符。尽管他们唱的是相同的音符(意思是他们的声音实际上是在相同的音高),你仍然可以认识到男人和女人之间的差异。因此原因是不同的formants。您可以将formants视为频谱范围内的预定范围。

我不知道Obj-C / Swift框架提供共振峰移位。我假设你会找到基本的C ++解决方案。

如果您想/必须自己实现它,您很可能必须使用Core Audio并自行执行DSP。在这种情况下,我建议在开始在Obj-C / Swift中实现之前,在Matlab / Octave或图形DSP编程软件(如Native Instrument的“Reaktor”)中创建一个工作原型。

如上所述,这是一项非常重要的任务。

根据您的要求,您当然可以尝试不同的音高变化和均衡器组合和设置,但结果将始终是“玩具般的”。