2

我对语音转换器应用程序非常陌生。任何人都可以建议我改变音高的方法,比如女孩的声音。

这是我使用的代码。

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的音高后,我失去了清晰度并受到了更多的干扰。任何人都可以提出解决方案

4

1 回答 1

2

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

想象一个男人和一个女人唱同一个音符。尽管他们唱的是同一个音符(这意味着他们的声音实际上是相同的音高),但您仍然可以识别出男人和女人之间的区别。原因是共振峰不同。您可以将共振峰视为频谱内的预定范围。

我不知道提供共振峰转换的 Obj-C/Swift 框架。我假设您会在那里找到基本的 C++ 解决方案。

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

如前所述,这是一项不平凡的任务。


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

于 2016-12-30T11:12:51.960 回答