1

Я пытаюсь создать детектор крика и свистка в приложении для Android. Теперь я могу обнаружить свисток пользователя, используя musicg android library here. Я должен сам реализовать детектор крика, потому что библиотеки нет.Каковы значения байтов аудиоданных? Android

В musicgt он считывает аудиоданные и сохраняет их в буфере байтов. Он использует буфер в качестве входного сигнала в своем детекторе свистка. Я пытаюсь понять и понять, как выглядят эти байты, напечатав их в LogCat. Тем не менее, я понятия не имею, что это такое и как музыкальная библиотека может использовать этот вход для обнаружения, когда пользователь свистнет.

Байты аудиоданных выглядят следующим образом. Я использую буфер [я] + «», чтобы напечатать их

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. Каждый байт в массиве - насколько громкий звук в любой конкретный момент времени. Обработка звука обычно выполняется в кусках. Например, в используемом вами лирбаре класс WaveTypeDetector выполняет цикл с байтами байтов и выполняет БПФ на каждом куске для определения полей.

Один момент времени в аудио не говорит вам ничего о частоте звука (высота). Чтобы сделать полезный анализ звука, требуется кусок аудио, подобный этому массиву.

FFT выводит функцию уровня звука в зависимости от частоты для части времени, представленной массивом байтов. Это может быть использовано для определения того, какие тона в звуке являются самыми громкими, например.

И когда метод выполняется несколько раз в серии кусков звука, библиотека может сравнивать, как смолы меняются со временем, чтобы определить, какой звук (свист или хлопание) воспроизводится, основываясь на известных паттернах в смолах, которые эти типы звуков делают.

Эта библиотека проводит анализ серии кусков звука. Для каждого блока он определяет, соответствует ли звук определенному набору критериев (например, он находится в пределах определенного диапазона частот и определенного диапазона интенсивности). Затем он повторяет это для всей длины звукового файла и делит логические ответы класса WhistleApi, чтобы вывести вероятность того, что весь звуковой файл в целом является свистком.

Чтобы создать обнаружение крика, я думаю, вам нужно расширить класс DetectionApi, чтобы создать класс ScreamApi, рассматривая класс WhistleApi в качестве примера. Затем вам придется придумать свои собственные значения критериев, чтобы заменить те, которые используются WhistleApi.

Чтобы придумать свои критерии крика, вы можете сделать несколько десятков записей разных типов криков, которые, по вашему мнению, должны быть приемлемыми. Я бы обрезал начало и конец файлов, чтобы в них не было тишины. Затем временно измените класс DetectionApi, чтобы записать максимальные и минимальные значения, которые он читает для каждого из этих критериев. Вы получите длинную серию значений для каждого файла, поэтому вы можете поместить их в Excel, чтобы получить среднее и стандартное отклонение. Для каждого критерия я использовал бы что-то вроде средних +/- 3 стандартных отклонений для минимальных и максимальных значений этого критерия. Сравните эти значения во всех ваших звуковых файлах, чтобы настроить их, возможно, выкинув файлы outlier.

+0

. Кстати, класс FFT в этой библиотеке лицензирован GPL, поэтому, хотя автор музыки не опубликовал лицензию на нее, она юридически должна иметь лицензию GPL, что означает ваше приложение также должно иметь лицензию GPL. Но вы, вероятно, можете найти менее ограничивающий класс библиотеки FFT, чтобы заменить эту часть библиотеки, если вам нужно. – Tenfour04

+0

Большое спасибо @ Tenfour04. Ваше сообщение действительно полезно! Можете ли вы дать мне несколько ссылок о том, где вы узнали всю эту информацию в библиотеке musicg. Я не могу найти какой-либо документ о каждом пакете и библиотеке musicg. Итак, я даже не могу догадаться, как я могу использовать эти пакеты – user2503808

+0

Как получить доступ к коду в этой библиотеке? Ты можешь? Я не могу получить доступ к коду в DetectionAPI. Он предоставляет метод isSpecificSound и принимает байт [] в качестве входа. Однако, как я могу установить свои собственные критерии, если я не могу получить доступ к коду? – user2503808