音频数据字节的含义是什么? Android的

时间:2013-10-25 16:59:36

标签: android algorithm audio signal-processing sound-recognition

我尝试在我的Android应用程序中创建一个尖叫和口哨探测器。现在我可以通过使用musicg android库here来检测用户的哨声。我必须自己实施尖叫探测器,因为没有可用的库。

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

音频数据字节如下所示。我用buffer [i] +“”来打印它们

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

所以,任何人都可以告诉我这个输入如何用于检测用户的哨声。

请给我一些想法

谢谢

1 个答案:

答案 0 :(得分:3)

字节流是PCM音频。阵列中的每个字节都是声音在任何特定时刻的响度。音频处理通常以块的形式完成。例如,在你正在使用的lirbary中,WaveTypeDetector类循环遍历字节块并在每个块上执行FFT以确定音高。

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

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

当在一系列声音上重复执行该方法时,该库可以比较音高如何随时间变化以确定正在播放什么类型的声音(吹口哨或鼓掌声),基于这些声音中的已知模式声音的类型。

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

要创建尖叫检测,我认为你需要扩展DetectionApi类来创建一个ScreamApi类,以WhistleApi类为例。然后,您必须提出自己的标准值来替换WhistleApi使用的标准值。

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