实时音频处理Android

时间:2014-06-13 16:47:28

标签: android audio buffer real-time audio-processing

我正在尝试在Android上实时进行一些音频处理。

到目前为止,我是一个应用程序,它会在预定义的时间内记录声音并将其保存在WAV文件中,然后进行处理。

这非常好用但是,因为我只对记录脉冲响应感兴趣,所以我认为让我的应用程序自动检测何时发生冲动并且只保留0,5 seg之前的样本可能会非常酷冲动后直到1.5秒(总共2秒)。

到目前为止,我正在处理wav文件的字节数组:

double audioSample = (double) (array[i+1] << 8 | array[i] & 0xff)/ 32767.0;

这给了我[-1,1]之间的值,所以让我说我的想法是关于考虑任何高于0.3或更低的声音的冲动。 我认为解决方案是将样本存储在缓冲区中并实时检查其值,但我不太清楚如何实现它。

你们是否知道我可以看一下的任何示例代码?

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您希望将样本存储在一个足够大的循环缓冲区中,以便处理所需的预触发样本数。您可以在Web或SO上轻松找到循环缓冲区代码。一旦满足您的触发条件,将循环缓冲区的内容转储到磁盘上,设置条件并从那里记录到磁盘。这里有一些伪代码可以帮助你入门。

void ProcessSamples(double[] samples)
{
    if (!triggered)
    {
        // write your level test here. Return -1 if you don't find anything
        // otherwise return the index of the sample.
        int triggerPos = SearchForTrigger(samples);
        if (triggerPos >= 0)
        {
            circularBuffer.Add(samples, triggerPos); // add up to the trigger pos
            WriteSamplesToFile(circularBuffer.GetSamples());
            triggered = true;
        }
        else
        {
            circularBuffer.Add(samples, samples.Length); // add all of the samples.
        }
    }
    else
    {
        WriteSamplesToFile(samples);
    }
}
相关问题