首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时音频处理Android

实时音频处理Android
EN

Stack Overflow用户
提问于 2014-06-13 16:47:28
回答 1查看 1.5K关注 0票数 2

我试图在Android上实时做一些音频处理。

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

这很好,但是,由于我只是对记录冲动响应感兴趣,我想让我的应用程序自动检测到什么时候出现了冲动,并且只保留脉冲之前的0,5 seg的样本,直到1,5秒之后(总共2秒),这可能是很酷的。

到目前为止,我是如何处理wav文件的字节数组的:

代码语言:javascript
复制
double audioSample = (double) (array[i+1] << 8 | array[i] & 0xff)/ 32767.0;

这给了我介于-1,1之间的值,所以让我说,我的想法是考虑任何超过0,3或更少的声音。我认为解决方案是将样本存储在缓冲区中并实时检查其值,但我不太确定如何实现它。

你们知道什么代码样本或者什么我可以看的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-13 21:09:26

你走在正确的轨道上。您将希望将样本存储在一个循环缓冲区中,该缓冲区非常大,足以处理所需的预触发样本数。您可以很容易地在web上找到循环缓冲区代码。一旦满足触发条件,将循环缓冲区的内容转储到磁盘上,设置一个条件,然后从那里记录到磁盘。这里有一些伪代码可以让你开始。

代码语言:javascript
复制
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);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24210226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档