0

为什么audioData short[]我在下面的代码中创建的缓冲区填充了0每个

samplesIn += mRecordInstance.read(audioData, samplesIn, bufferSize - samplesIn);

?

缓冲区 ( audioData.length) 的大小不是零,这意味着缓冲区不是空的,它只是用零填充。

我尝试将其更改FREQUENCY8000-> 没有更改。

我正在实现 Echoprint 库 -如果您需要,请参阅此以获取更多信息。

audioData来自 LogCat 的缓冲区被零填充的证明:

// ...
public final static int LISTENING_PASS_TIME = 20;
// cap to 30 seconds max, 10 seconds min.
public final static int MAX_LISTENING_PASS_TIME = 30;
public final static int MIN_LISTENING_PASS_TIME = 10;

private final int FREQUENCY = 11025;
private final int CHANNEL = AudioFormat.CHANNEL_IN_MONO;
private final int ENCODING = AudioFormat.ENCODING_PCM_16BIT;    

private Thread thread;
private volatile boolean isRunning = false;
AudioRecord mRecordInstance = null;

private short audioData[];
private int bufferSize; 
private int secondsToRecord;
private volatile boolean continuous;

public void stop() {
    this.continuous = false;
    if (mRecordInstance != null)
        mRecordInstance.stop();     
}

public void run() {
    this.isRunning = true;
    try {
        // create the audio buffer & get the minimum buffer size
        int minBufferSize = AudioRecord.getMinBufferSize(FREQUENCY,
                CHANNEL, ENCODING);
        Log.d("Fingerprinter", "minBufferSize: " + minBufferSize);

        // and the actual buffer size for the audio to record frequency *
        // seconds to record.
        bufferSize = Math.max(minBufferSize, this.FREQUENCY
                * this.secondsToRecord);
        Log.d("Fingerprinter", "bufferSize: " + bufferSize);

        audioData = new short[bufferSize];

        // start recorder
        mRecordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC,
                FREQUENCY, CHANNEL, ENCODING, minBufferSize);

        // start recording
        willStartListening();

        mRecordInstance.startRecording();
        boolean firstRun = true;
        do {
            try {
                willStartListeningPass();

                long time = System.currentTimeMillis();
                // fill audio buffer with mic data.
                int samplesIn = 0;
                do {
                    samplesIn += mRecordInstance.read(audioData, samplesIn,
                            bufferSize - samplesIn);

                    if (mRecordInstance.getRecordingState() == AudioRecord.RECORDSTATE_STOPPED)
                        break;
                } while (samplesIn < bufferSize);
                Log.d("Fingerprinter",
                        "Audio recorded: "
                                + (System.currentTimeMillis() - time)
                                + " millis");

                // see if the process was stopped.
                if (mRecordInstance.getRecordingState() == AudioRecord.RECORDSTATE_STOPPED
                        || (!firstRun && !this.continuous))
                    break;

                // debugging: print audioData short[]
                Log.d("Fingerprinter", "Audio Data Content:");

                // String audioDataContent = "";
                for (int i = 100; i < 110; i++) {
                    // audioDataContent = i + ":" + audioData[i];
                    Log.d("Fingerprinter", i + ":" + audioData[i]);
                }

                Log.d("Fingerprinter", "samplesIn: " + samplesIn);

                firstRun = false;

                didFinishListeningPass();
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("Fingerprinter", e.getLocalizedMessage());

                didFailWithException(e);
            }
        } while (this.continuous);
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("Fingerprinter", e.getLocalizedMessage());

        didFailWithException(e);
    }

    if (mRecordInstance != null) {
        mRecordInstance.stop();
        mRecordInstance.release();
        mRecordInstance = null;
    }
    this.isRunning = false;

    didFinishListening();
}
4

1 回答 1

0

我发现我确实记录了一些数据——只是我选择显示的部分只记录了zerosaudioData我通过汇总数组中的所有条目并将其除以数组中的条目数来证明这一点。结果是-3.455619047619048

于 2013-03-10T19:11:46.687 回答