Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Razangann
11 / 11 / 0
Регистрация: 11.01.2013
Сообщений: 135
#1

Звуковой фильтр с использованием AudioRecord - Программирование Android

28.04.2014, 23:25. Просмотров 945. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Очень нужен звуковой фильтр, который бы реагировал только на резкие звуки.
Вот что есть:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Timer timer1 = new Timer();
timer1.schedule(new TimerTask() {
            @Override
            public void run() {
                detect();
            }
        }, 100, 100);
   public void detect(){
       int minSize = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
        AudioRecord ar = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000,AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,minSize);
        boolean recorder=true;
        short[] buffer = new short[minSize];
            ar.startRecording();
            while(recorder)
            {
 
                ar.read(buffer, 0, minSize);
                for (short s : buffer)
                {
                    if (Math.abs(s) > 20000)   //DETECT VOLUME (IF I BLOW IN THE MIC)
                    {
                        timer1.cancel();
                        ar.stop();
                        recorder=false;
                        goNextStep();
                        return;
                    }
                }
            }
    }
Данная схема каждые 100мс считывает звук с микрофона, и если амплитуда превышает 20000, то он срабатывает и выполняет некую функцию goNextStep().
Проблема в том, что тут упор делается на любой громкий звук, но нужно чтобы и в громком месте срабатывало только по скачку амплитуды.
Каким методом лучше сделать?
1) Сделать динамический порог громкости, вместо 20000? Т.е. каждый раз замерять звук и выставлять это значение?
2) Создать массив, в который складывать предыдущие и следующие значения, чтобы сравнивать и искать резкое возрастание?
В итоге нужно получить что-то вроде зависимость, показанной на графике
Может кто знает/делал такое? Буду очень рад помощи!
P.S Еще немного не понятна работа функции AudioRecord.read(). Как понял она считывает и кладет значения в буфер. Когда дебажил, обнаружил, что в буфере есть отрицательные числа...как так? Вроде громкость величина положительная
Спасибо!
Миниатюры
Звуковой фильтр с использованием AudioRecord  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 23:25     Звуковой фильтр с использованием AudioRecord
Посмотрите здесь:

Сделать звуковой генератор - Программирование Android
Всем привет. Ребят, как выдать в наушник звук импульсами примерно прямоугольной формы? Нужно сделать звуковой генератор от ~10 до...

Как добавить звуковой файл в Android Studio? - Программирование Android
Подскажите пожалуйста как правильно загрузить звуковой файл в Андройд Студио, я его туда вставляю, а студия не распознает.

графический фильтр - Программирование Android
Есть фоновая картинка fon.png Картинка ящика , который рисуется поверх фона. photo_box.png Думаю сделать графический фильтр на ящик....

Как добавить фильтр? - Программирование Android
всем привет! у меня есть приложения которая получить данные с сайта и отображает на таблице. теперь я хотел добавить фильтр. фильтр...

Фильтр ввода в EditText - Программирование Android
Подскажите пожалуйста, как программно ограничить набор символов, которые можно ввести в конкретный EditText? Нужно вводить только "0" и...

Как сделать фильтр на определенные слова в textView - Программирование Android
В textView передается текст, из которого пользователю необходимы определенные слова. Как сделать фильтр чтобы отображались только они ?

Звуковой фильтр с++ - C++
Доброго времени суток. Выдали задания, не могу понять как программа должна работать...я бы уже начал писать, но чисто в голове не...

Выдать звуковой сигнал с использованием командной строки - CMD/BAT
Возможно ли это?

Фильтр на форме с использованием макроса - MS Access
Возникла такая проблема: Есть форма построена на основе запроса, на ней надо установить фильтр на дату, ограничения на фильтра берутся...

Фильтр в DbGrid с использованием 2-х комбобоксов - Delphi БД
Доброго времени суток. Нужна небольшая помощь. Застрял с фильтром для базы данных. Необходимо, чтобы после выбора параметров фильтрации с...

Простой фильтр с использованием MMX. - Visual C++
Всем привет. В общем выкладываю небольшой пример кода. Возможно кому-нибудь пригодится. Простейший фильтр для работы с...

Фильтр с использованием checkbox и radiobutton - C++ WinAPI
Здравствуйте. Помогите плиз решить проблемы с выбором по указанным параметрам. То есть у меня есть табличка с характеристиками...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Razangann
11 / 11 / 0
Регистрация: 11.01.2013
Сообщений: 135
03.05.2014, 20:16  [ТС]     Звуковой фильтр с использованием AudioRecord #2
Ну ктоооо-нибудь......?((
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
04.05.2014, 13:40     Звуковой фильтр с использованием AudioRecord #3
В яве не стыкался, но работал со звуком в Делфи/Windows... насколько знаю, теория должна быть очень похожа...
звук - периодически записывается в таблицу определенного размера. Таблицу можно разбить по 1-2-4 байта (в завиимости от качества записи). В этих байтах хранится значение амплитуды на текущий такт. Амплитуда бывает как положительная, так и отрицательная. Это что-то вроде отклонение от некого нуля. Ноль тоже может слегка смещаться. Поэтому найдите среднее арифметическое для всех амплитуд в таблице. Это будет 0. Потом найдите среднее арифметическое разниц амплитуд и 0, но игнорируя знак(Math.abs(x)). Если буфер достаточно короткий, Вы получите во втором значении пик. Если он выше нужной Вам величины - это пик... Возможно нахождение 0 драйвера андроида берут на себя (стоит проверить)...

удачи...
Отпишитесь, если получится... у меня руки еще не дошли до работы со звуком в Андроиде, но желание есть...
Yandex
Объявления
04.05.2014, 13:40     Звуковой фильтр с использованием AudioRecord
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru