映画 (.m4v) を録音しているときにオーディオのピッチを変更しようとしているアプリを書いています。または、後でムービーのオーディオ ピッチを変更します。最終結果は、元の長さ (つまり、元と同じビジュアル) のムービー (.m4v) になりたいのですが、音のピッチが変更されています (たとえば、「シマリスの声」)。可能であれば、リアルタイム変換が優先されます。
私は iOS でのオーディオ ピッチの変更について多くのことを読みましたが、ほとんどの例は再生、つまり異なるピッチでサウンドを再生することに焦点を当てています。
私のアプリでは、ムービー (.m4v / AVFileTypeQuickTimeMovie) を記録し、標準の AVAssetWriter を使用して保存しています。ムービーを保存するときに、オーディオを操作しようとした次の要素にアクセスできます (たとえば、ピッチを変更します)。
- オーディオ バッファ (CMSampleBufferRef)
- オーディオ入力ライター (AVAssetWriterAudioInput)
- オーディオ入力ライター オプション (例: AVNumberOfChannelsKey、AVSampleRateKey、AVChannelLayoutKey)
- アセットライター (AVAssetWriter)
上記のオブジェクトにフックしてオーディオ ピッチを変更しようとしましたが、成功しませんでした。
ここで説明されているように、Dirac でも試してみました: Real Time Pitch Change In iPhone Using Dirac
And OpenAL with AL_PITCH as here: Piping output from OpenAL into a buffer
And the "BASS" library from un4seen: Change Pitch/Tempo In Realtime
上記のライブラリのいずれでも成功していません。おそらく、それらの使用方法と、オーディオ保存コードにフックする場所がよくわからないためです。
同様の効果を持つライブラリがたくさんあるようですが、再生またはカスタム録音コードに焦点を当てています。既に取得しているオーディオ ストリーム (AVAssetWriterAudioInput) を操作したり、保存したムービー クリップ (.m4v) を変更したりしたいと考えています。ビデオを視覚的に変更しないでください。つまり、同じ速度で再生します。しかし、オーディオを速くしたり (シマリスのように) 遅くしたり (... モンスターのように) したいですか?
ピッチをリアルタイムで (ムービーの録画時)、または後でムービー全体 (.m4v ファイル) を変換して変更する方法について何か提案はありますか? Dirac、OpenAL、SoundTouch、BASS、またはその他のライブラリをさらに調べる必要がありますか?
オーディオを変更して他のユーザーとムービーを共有できるようにしたいので、再生のみのピッチ変更に頼ることはできません。