我对语音转换器应用程序非常新。可以任何一个请建议我改变音调的方式,如女声。
这是我使用的代码。
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的音高后我错过了清晰度并且受到更多干扰。任何人都建议解决此问题
答案 0 :(得分:2)
这不是一项微不足道的任务。基本上你必须改变声音formants而不是整体音高。
想象一个男人和一个女人唱着同样的音符。尽管他们唱的是相同的音符(意思是他们的声音实际上是在相同的音高),你仍然可以认识到男人和女人之间的差异。因此原因是不同的formants。您可以将formants视为频谱范围内的预定范围。
我不知道Obj-C / Swift框架提供共振峰移位。我假设你会找到基本的C ++解决方案。
如果您想/必须自己实现它,您很可能必须使用Core Audio并自行执行DSP。在这种情况下,我建议在开始在Obj-C / Swift中实现之前,在Matlab / Octave或图形DSP编程软件(如Native Instrument的“Reaktor”)中创建一个工作原型。
如上所述,这是一项非常重要的任务。
根据您的要求,您当然可以尝试不同的音高变化和均衡器组合和设置,但结果将始终是“玩具般的”。