2013-10-25 129 views
1

我尝试在我的android应用程序中创建一个尖叫和哨子检测器。现在我可以通过使用musicg android库here来检测用户的哨声。我必须自己实施尖叫探测器,因为没有可用的库。音频数据字节的含义是什么? Android

在musicg中,它读取音频数据并将其存储在字节缓冲区中。它使用缓冲区作为其哨子检测器的输入。我试图通过在LogCat中打印这些字节来了解和了解这些字节的样子。但是,我不知道它们是什么以及音乐库如何使用此输入来检测用户何时吹哨。

音频数据字节看起来像这样。我用缓冲[1] +“”打印他们

10-25 23:43:54.412: E/1115(7542): 71 
10-25 23:43:54.412: E/1116(7542): 22 
10-25 23:43:54.412: E/1117(7542): 58 
10-25 23:43:54.412: E/1118(7542): -14 
10-25 23:43:54.412: E/1119(7542): 36 
10-25 23:43:54.412: E/1120(7542): 88 
10-25 23:43:54.412: E/1121(7542): 8 
10-25 23:43:54.413: E/1122(7542): -98 
10-25 23:43:54.413: E/1123(7542): -24 
10-25 23:43:54.413: E/1124(7542): 66 
10-25 23:43:54.413: E/1125(7542): -51 
10-25 23:43:54.413: E/1126(7542): 111 
10-25 23:43:54.413: E/1127(7542): -67 
10-25 23:43:54.413: E/1128(7542): 43 
10-25 23:43:54.413: E/1129(7542): -68 
10-25 23:43:54.413: E/1130(7542): 36 
10-25 23:43:54.415: E/1131(7542): -58 
10-25 23:43:54.415: E/1132(7542): -85 
10-25 23:43:54.415: E/1133(7542): -46 
10-25 23:43:54.415: E/1134(7542): 78 
10-25 23:43:54.415: E/1135(7542): -40 

那么,谁能告诉我该如何输入可用于检测用户的哨子。

请给我一些想法

谢谢

+0

这些是原始的声音级别。 – njzk2

+0

那么,正数和负数的含义是什么? @ njzk2 – user2503808

+0

负数是因为字节被认为是在java中签名的。 – njzk2

回答

3

的字节流是PCM音频。阵列中的每个字节是声音在任何特定时刻的响亮程度。音频处理通常以块为单位完成。例如,在您使用的lirbary中,WaveTypeDetector类正在遍历字节块,并对每个块执行FFT以确定间距。

音频中的单个瞬间并不会告诉您有关声音频率(音高)的任何信息。为了对声音进行有用的分析,需要像这个数组这样的音频块。

FFT为由字节数组表示的时间块输出声级对频率的函数。例如,这可以用来检测声音中哪些音高最响。

当对一系列声音重复执行该方法时,库可以比较音高随时间变化的变化,以确定播放哪种声音(吹哨或鼓掌),基于已知的音调模式这些类型的声音。

此库正在对一系列声音进行分析。对于每个组块,它确定声音是否符合一定的标准(例如,它是否在一定的频率范围内以及某个强度范围内)。然后它重复这个过程,将声音文件的整个长度重复,并将WhistleApi类的布尔响应分配为输出整个声音文件作为整体声音的概率。

要创建尖叫检测,我认为您需要扩展DetectionApi类以创建ScreamApi类,并以WhistleApi类为例。那么你将不得不拿出你自己的标准值来取代WhistleApi使用的标准值。

要想出你自己的尖叫标准,你可以做几十个你认为应该可以接受的不同类型尖叫的录音。我会剪掉文件的开头和结尾,因此它们没有沉默。然后临时修改DetectionApi类以记录它为每个这些条件读取的最大值和最小值。您将为每个文件获得很长的一系列值,因此您可以将它们放入Excel以获得平均值和标准偏差。对于每个标准,我会使用类似于该标准的最小值和最大值的平均值+/- 3标准偏差。比较所有声音文件中的这些值以调整它们,可能会丢弃异常文件。

+0

顺便提一下,该库中的FFT类是GPL许可的,因此尽管musicg的作者没有在其上发布许可证,但它合法地应该具有GPL许可证,这意味着你的应用也应该有GPL许可证。但是如果需要的话,你可能会找到一个限制较少的FFT库类来替换该库的那部分。 – Tenfour04

+0

非常感谢@ Tenfour04。你的文章真的很有帮助!你可以给我一些关于你在哪里学习音乐库的所有信息的链接。我找不到任何有关musicg库的每个包和类别的文档。所以,我甚至无法猜测如何使用这些软件包 – user2503808

+0

如何访问此库中的代码?你可以吗?我无法访问DetectionAPI中的代码。它提供了isSpecificSound方法并接收byte []作为输入。但是,如果我无法访问代码,如何设置我自己的标准? – user2503808