音频数据字节的含义是啥?安卓
Posted
技术标签:
【中文标题】音频数据字节的含义是啥?安卓【英文标题】:What are the meanings of audio data bytes? Android音频数据字节的含义是什么?安卓 【发布时间】:2013-10-25 16:59:35 【问题描述】:我尝试在我的 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
那么,谁能告诉我如何使用这个输入来检测用户的口哨声。
请给我一些想法
谢谢
【问题讨论】:
这些是原始声级。 那么,正数和负数的含义是什么? @njzk2 否定是因为字节在java中被认为是有符号的。 负数加256得到实际值 【参考方案1】:字节流是 PCM 音频。数组中的每个字节都是声音在任何特定时刻的响度。音频处理通常分块完成。例如,在您使用的库中,WaveTypeDetector 类循环遍历字节块并对每个块执行 FFT 以确定音高。
音频中的一瞬间并不能告诉您有关声音频率(音高)的任何信息。要对声音进行有用的分析,需要像这样的数组这样的音频块。
FFT 输出由字节数组表示的时间块的声级与频率的函数。例如,这可用于检测声音中的哪些音高最大。
当对一系列声音块重复执行该方法时,库可以比较音高如何随时间变化,以确定正在播放的声音类型(口哨声或鼓掌声),基于这些已知的音高模式发出的声音类型。
这个库正在对一系列声音块进行分析。对于每个块,它确定声音是否符合一组特定的标准(例如,它是否在某个频率范围和某个强度范围内)。然后它对声音文件的整个长度重复此操作,并将 WhistleApi 类的布尔响应除以输出整个声音文件作为一个整体是口哨的概率。
要创建尖叫检测,我认为您需要扩展 DetectionApi 类以创建 ScreamApi 类,以 WhistleApi 类为例。然后,您必须提出自己的标准值来替换 WhistleApi 使用的标准值。
要提出自己的尖叫标准,您可以录制几十个您认为应该可以接受的不同类型的尖叫。我会剪掉文件的开头和结尾,这样它们就不会沉默了。然后临时修改 DetectionApi 类以记录它为每个标准读取的最大值和最小值。您将获得每个文件的一长串值,因此您可以将它们放在 Excel 中以获得平均值和标准差。对于每个标准,我会为该标准的最小值和最大值使用平均值 +/- 3 标准差。比较所有声音文件中的这些值以调整它们,可能会丢弃异常文件。
【讨论】:
顺便说一句,该库中的 FFT 类是 GPL 许可的,因此虽然 musicg 的作者没有在其上发布许可,但它在法律上应该具有 GPL 许可,这意味着您的应用程序也应该拥有 GPL 许可证。但如果需要,您可能可以找到限制较少的 FFT 库类来替换库的该部分。 非常感谢@Tenfour04。你的帖子真的很有帮助!你能给我一些关于你在哪里了解音乐库的所有这些信息的链接吗?我找不到关于音乐库的每个包和类的任何文档。所以,我什至无法猜测如何使用这些包 如何访问本库中的代码?你可以吗?我无法访问 DetectionAPI 中的代码。它提供 isSpecificSound 方法并接收 byte[] 作为输入。但是,如果我无法访问代码,如何设置自己的标准? 您自己链接到该项目。这里有源代码的下载链接:code.google.com/p/musicg/downloads/list 使用这个而不是 apk 库。以上是关于音频数据字节的含义是啥?安卓的主要内容,如果未能解决你的问题,请参考以下文章