C++程序  |  42行  |  1.89 KB

/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

#ifndef MEASURE_RMS_H
#define MEASURE_RMS_H

/* Measure the rms of the non-silence segment of the signal in pcm, which
   is of numSamples length, and sampled at sampleRate.  pcm is assumed to
   consist of silence - signal - silence, as might be logged during a
   speech recognition attempt.  The stimulus signal in this case should
   be approximately a 3-second burst of pink noise presented at a level
   comparable to normal speaking level.  The RMS is measured using 25ms
   duration non-overlapping windows.  These are averaged over the whole
   non-silence part of pcm, and the result is returned in rms.  The
   standard deviation of this measurement over all frames is returned in
   stdRms, and the estimated duration of the non-silence region, in
   seconds, is returned in duration.  The target signal is taken to be
   that segment that is onsetThresh dB above the background, and is
   expected to be continuous, once the onset has been found.  If
   onsetThresh < 0.0, simply make the measurememt over the entire pcm
   signal.  In both cases, the mean of the entire signal is returned in
   mean. */
void measureRms(short* pcm, int numSamples, float sampleRate,
                float onsetThresh, float* rms, float* stdRms,
                float* mean, float* duration);


#endif /* MEASURE_RMS_H */