Objective-C を使用して、録音したオーディオ ファイルにエコー効果を追加するアプリケーションを開発しています。
私は DIRAC を使用して、男性から女性へ、遅い、速いなど、他の効果を追加しています。
今度は録音した声でロボットの声を作らなければなりません。ロボットの声の場合、エコー効果を追加する必要があります
これを行うのを手伝ってください
Objective-C を使用して、録音したオーディオ ファイルにエコー効果を追加するアプリケーションを開発しています。
私は DIRAC を使用して、男性から女性へ、遅い、速いなど、他の効果を追加しています。
今度は録音した声でロボットの声を作らなければなりません。ロボットの声の場合、エコー効果を追加する必要があります
これを行うのを手伝ってください
エコーはとてもシンプルです。遅延線と少しの乗算が必要です。1 つのチャンネルとオーディオが既に浮動小数点で表現されていると仮定すると、遅延線は次のようになります (C に似た疑似コード):
int LENGTH = samplerate * seconds; //seconds is the desired length of the delay in seconds
float buffer[ LENGTH ];
int readIndex = 0, writeIndex = LENGTH - 1;
float delayLine.readNext( float x ) {
float ret = buffer[readIndex];
++readIndex;
if( readIndex >= LENGTH )
readIndex = 0;
return ret;
}
void delayLine.writeNext( float x ) {
buffer[ writeIndex ] = x;
++writeIndex;
if( writeIndex >= LENGTH )
writeIndex = 0;
}
バッファをすべてゼロに初期化することを忘れないでください。
それがあなたの遅延線です。基本的な使用法は次のとおりです。
float singleDelay( float x ) {
delayLine.writeNext(x);
return delayLine.readNext( x );
}
しかし、大きな違いは聞こえません。後で出てくるだけです。単一のエコーを聞きたい場合は、次のようなものが必要です。
float singleEcho( float x, float g ) {
delayLine.writeNext(x);
return x + g * delayLine.readNext( x );
}
ここで、g は定数で、通常は 0 から 1 の間です。
ここで、エコーのストリームが必要だとします。「HELLO... Hello... hello... h...」のように。もう少し作業を行う必要があります。
float echo( float x, float g ) {
float ret = x + g * delayLine.readNext( x );
delayLine.writeNext( ret );
return ret;
}
今回は、入力ではなく、全体の出力が遅延ラインにフィードバックされていることに注意してください。この場合、|g| が非常に重要です。< 1.
ここで非正規化の問題が発生する可能性があります。それが iOS の問題かどうかは思い出せませんが、そうは思いません。