音量が特別なレベルに達すると、すでに「音声録音の開始」があります。ただし、欠点が 1 つあります。録音を開始すると、すでに 1/2 秒ほど逃しています。文章を話すと、最初の単語が失われます。
任意のアイデア (例が最適)。
最初にリスニングを開始し、ピークパワー、平均、ローパスを取得するとしましょう
[recorder updateMeters]; ALPHA = 0.05;
peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
averagePowerForChannel = pow(10, (0.05 * [recorder averagePowerForChannel:0]));
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;
averagePassResults = ALPHA * averagePowerForChannel + (1.0 - ALPHA) * averagePassResults;
録音するのに十分な大きさかどうか
if (peakPowerForChannel > 0.08f) ) -> start recording
値未満の場合は停止します
(peakPowerForChannel < 0.01f) -> stop record, start listening again
今のところ、平均ではなく、ピークパワーを聞くのが最善だとわかりました。しかし、それでも大丈夫ではありません。また、常に一時的な録音を行い、ピークが十分に高くなったら、今から 2 秒から開始することも考えました。そのようなものですが、ここでは実現する方法がわかりません。したがって、実用的な提案は大歓迎です。
ありがとうクリス