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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
#1

Как андроид может измерять уровень шума? - Программирование Android

29.04.2015, 15:29. Просмотров 1258. Ответов 20
Метки нет (Все метки)

Приложения такие есть, а вот как сделать? Как можно реализовать (хоть бы даже с задержкой по времени)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2015, 15:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как андроид может измерять уровень шума? (Программирование Android):

Микрофон. Оценить уровень шума - Программирование Android
Как можно сделать так чтобы с помощью микрофона была реакция на шум? Например 3 уровня. Первый уровень тихий звук включаем вибратор на 1...

Кто может программу написать на андроид? - Программирование
Если есть умельцы для быстрой связи пишите <cut>

Подскажите пожалуйста компилятор .java файлов на андроид, или то, что может заменить JDK - Программирование Android
Подскажите пожалуйста компилятор .java файлов на андроид, или то, что может заменить JDK. Заранее благодарен. P.S. JavaIDEdroid можете...

Можно ли написать веб сервер на Яве для клиента на Андроид,имея под рукой только телефон на том самом андроид? - Программирование Android
Уважаемые гуру программирования, если можно, пожалуйста, напишите поподробнее- какой программой компилировать код, какой лучше выбрать...

Как получить уровень громкости звука? - Программирование Android
Как получить уровень громкости звука(использую android studio)?

Как получить уровень громкости на Android - Программирование Android
Как определить включен или выключен звук на Android?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
29.04.2015, 16:20 #2
через микрофон.
1
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
29.04.2015, 16:35  [ТС] #3
а потом по проводам, да?
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
29.04.2015, 16:41 #4
Цитата Сообщение от Valakin Посмотреть сообщение
а потом по проводам, да?
а по вашему у андрюши уши что ли есть?
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
29.04.2015, 16:51  [ТС] #5
У андрюши? У андрюши все есть
Я верю в его светлое будущее,
микрофон чем не ухо? а камера-глаз, а динамик-язык.
Вы видели когда нить андрюшу без языка? я нет

нашел какой то метод .getMaxAmplitude();
буду пробовать, сам спросил сам ответил
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
29.04.2015, 16:56 #6
Цитата Сообщение от Valakin Посмотреть сообщение
сам спросил сам ответил
какой вопрос такой и ответ
так то danyasworld на Ваш вопрос и ответил
0
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,686
Записей в блоге: 3
30.04.2015, 08:00 #7
Цитата Сообщение от Valakin Посмотреть сообщение
сам спросил сам ответил
Чем ответ danyasworld не угодил?
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
30.04.2015, 08:46  [ТС] #8
есть такой код
Java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import java.io.IOException;
 
import android.app.Activity;
import android.media.MediaRecorder;
import android.media.MediaRecorder.OnInfoListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Vibrator;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnInfoListener {
    WindowManager.LayoutParams lp;
    Button messe;
    MediaRecorder micro;
    int ampli;
    TextView tv1;
    TextView tv2;
    String amplitext;
    Vibrator vibr;
    Environment e;
    String mFileName;
    int i;
    Boolean recording;
 
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window w = getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        setContentView(R.layout.activity_main);
        micro = null;
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
 
    public void onBtnClicked(View v) {
            startRecording();
        }
 
    protected void startRecording() {
        if (micro == null){
            i ++;
            mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
            mFileName += "/audiorecord"+ i +".3gp";
            micro = new MediaRecorder();
 
            micro.setAudioSource(MediaRecorder.AudioSource.MIC);
            micro.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            micro.setOutputFile(mFileName);
            micro.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            micro.setMaxDuration(2000);
 
              try {
 
                micro.prepare();
            } catch (IllegalStateException e) {
                Toast.makeText(getApplicationContext(), "IllegalStateException called", Toast.LENGTH_LONG).show();
 
 
            } catch (IOException e) {
                Toast.makeText(getApplicationContext(), "prepare() failed", Toast.LENGTH_LONG).show();
 
            }
 
              micro.start();
              micro.getMaxAmplitude();
              ampli = micro.getMaxAmplitude();
              tv1 = (TextView) findViewById(R.id.textView1);
              tv1.setText(Integer.toString(ampli));
 
        }
 
          micro.setOnInfoListener(new OnInfoListener() {
            @Override
            public void onInfo(MediaRecorder mr, int what, int extra) {
                if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
                    micro.stop();
                    recording = false;
                    micro.release();
                    micro = null;
                }
            }
        });
    }
 
    @Override
    public void onInfo(MediaRecorder mr, int what, int extra) {
        // TODO Auto-generated method stub
 
    }
}
спотыкаюсь
на

Java
1
2
3
4
5
micro.setAudioSource(MediaRecorder.AudioSource.MIC);
            micro.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            micro.setOutputFile(mFileName);
            micro.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            micro.setMaxDuration(2000);
логи смогу выложить позже
0
danyasworld
4 / 4 / 1
Регистрация: 12.04.2015
Сообщений: 226
Завершенные тесты: 1
30.04.2015, 15:17 #9
есть одно приложение для разработки под андроид, там есть куча интересных примеров. Там есть пример на запись звука (audio record вроде) и там реализован уровень громкости(показывается в процентах) посмотри, думаю тебе поможет.
0
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
30.04.2015, 16:37 #10
Поделюсь своим аудиорекордером
Кликните здесь для просмотра всего текста
Java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
public class AudioRecordManager {
 
    public interface OnAudioRecordCallback {
        void onComplete(String path);
        void onFailed(int code);
    }
 
    public interface OnAudioRecordListener {
        void changeAmplitude(double value);
    }
    
    public void setOnAudioRecordCallback(OnAudioRecordCallback onAudioRecordCallback) {
        this.onAudioRecordCallback = onAudioRecordCallback;
    }
 
    public void setOnAudioRecordListener(OnAudioRecordListener onAudioRecordListener) {
        this.onAudioRecordListener = onAudioRecordListener;
    }
    
    private OnAudioRecordListener onAudioRecordListener;
 
    private OnAudioRecordCallback onAudioRecordCallback;
 
    private MediaRecorder myRecorder;
    private String outputFile = null;
 
    public AudioRecordManager() {
        handler = new Handler();
        audioRecordThread = new AudioRecordThread();
    }
 
    private Handler handler;
 
    private Runnable runnable;
 
    private AudioRecordThread audioRecordThread;
 
    public void startRecord() {
        if(audioRecordThread == null || !audioRecordThread.isRunning()){
            new Thread(audioRecordThread).start();
        }
    }
 
    public void stopRecord() {
        if(audioRecordThread!=null && audioRecordThread.isRunning()) {
            audioRecordThread.stopRecording();
        }
    }
 
    public double getAmplitude() {
        if (myRecorder != null)
            return (myRecorder.getMaxAmplitude());
        else
            return 0;
    }
 
    class AudioRecordThread implements Runnable {
 
        private boolean isRunning;
 
        private boolean isStop;
 
        private long startTime;
 
        private void startRecord() {
 
            isRunning = true;
            isStop = false;
            File folder = new File(Content.AUDIO_DIR);
            if (!folder.exists()) {
                boolean b = folder.mkdirs();
            }
            startTime = System.currentTimeMillis();
            outputFile = folder.getPath() + "/rec_" + startTime + ".mp3";
 
            myRecorder = new MediaRecorder();
 
            myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
            myRecorder.setOutputFile(outputFile);
            try {
                myRecorder.prepare();
                myRecorder.start();
 
                startTime = System.currentTimeMillis();
 
            } catch (Exception e) {
                e.printStackTrace();
            }
 
            runnable = new Runnable() {
                @Override
                public void run() {
                    if (onAudioRecordListener != null) {
                        onAudioRecordListener.changeAmplitude(getAmplitude());
                    }
                    handler.postDelayed(this, 100);
                }
            };
 
            handler.post(runnable);
        }
 
        private void stopRecord() {
            final long stopTime = System.currentTimeMillis();
            handler.removeCallbacks(runnable);
 
            try {
                if(System.currentTimeMillis() - startTime < 500){
                    try{
                        Thread.sleep(500);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                myRecorder.stop();
                myRecorder.release();
                myRecorder = null;
            } catch (Exception e) {
                myRecorder = null;
                e.printStackTrace();
            }
 
            if (stopTime - startTime > 1000) {
                if (onAudioRecordCallback != null) {
                    onAudioRecordCallback.onComplete(outputFile);
                }
            } else {
                File current = new File(outputFile);
                current.delete();
                if (onAudioRecordCallback != null) {
                    onAudioRecordCallback.onFailed(2);
                }
            }
 
            isRunning = false;
        }
 
        @Override
        public void run() {
            startRecord();
            while (!isStop) {
                try {
                    Thread.sleep(30);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            stopRecord();
        }
 
        public void stopRecording() {
            isStop = true;
        }
 
        public boolean isRunning() {
            return isRunning;
        }
    }
 
}


Можно засетить ему 2 листенера, один будет уведомлять о результате записи аудио, другой во время записи будет непрерывно слать амплитуду (уровень шума).
Лежит на продакшене, вылетов не было.
2
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
18.05.2015, 17:08  [ТС] #11
А можно ли получать getmaxamplitude без записи файла?
(если постоянно это делать карта памяти наверное расплавится)
0
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
18.05.2015, 17:31 #12
Если без записи в файл - пользуйтесь классом AudioRecorder, нужно будет на лету обробатывать входящие данные и извлекать из них инфу, далее можно данные затирать.
http://stackoverflow.com/questions/5...ecording-audio
2
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
02.06.2015, 12:36  [ТС] #13
Подскажите что выдает getSampleRate ()?
0
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
02.06.2015, 12:41 #14
getSampleRate() returns the configured audio data sample rate in Hz
1
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
02.06.2015, 13:30  [ТС] #15
Спасибо, а в какой строчке должна быть Log.d(TAG, ""+audioRecord.getSampleRate());?
чтобы увидеть герцы в логах?

Java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
 
public class MainActivity extends Activity {
 
* final String TAG = "myLogs";
 
* int myBufferSize = 8192;
* AudioRecord audioRecord;
* boolean isReading = false;
 
* @Override
* protected void onCreate(Bundle savedInstanceState) {
*** super.onCreate(savedInstanceState);
*** setContentView(R.layout.main);
 
*** createAudioRecorder();
 
*** Log.d(TAG, "init state = " + audioRecord.getState());
* }
* void createAudioRecorder() {
*** int sampleRate = 8000;
*** int channelConfig = AudioFormat.CHANNEL_IN_MONO;
*** int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
 
*** int minInternalBufferSize = AudioRecord.getMinBufferSize(sampleRate,
******* channelConfig, audioFormat);
*** int internalBufferSize = minInternalBufferSize * 4;
*** Log.d(TAG, "minInternalBufferSize = " + minInternalBufferSize
******* + ", internalBufferSize = " + internalBufferSize
******* + ", myBufferSize = " + myBufferSize);
 
*** audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
******* sampleRate, channelConfig, audioFormat, internalBufferSize);
 
*** audioRecord.setPositionNotificationPeriod(1000);
 
*** audioRecord.setNotificationMarkerPosition(10000);
*** audioRecord
******* .setRecordPositionUpdateListener(new OnRecordPositionUpdateListener() {
********* public void onPeriodicNotification(AudioRecord recorder) {
*********** Log.d(TAG, "onPeriodicNotification");
********* }
 
********* public void onMarkerReached(AudioRecord recorder) {
*********** Log.d(TAG, "onMarkerReached");
*********** isReading = false;
********* }
******* });
* }
public void recordStart(View v) {
*** Log.d(TAG, "record start");
*** audioRecord.startRecording();
*** int recordingState = audioRecord.getRecordingState();
*** Log.d(TAG, "recordingState = " + recordingState);
* }
 
* public void recordStop(View v) {
*** Log.d(TAG, "record stop");
*** audioRecord.stop();
* }
 
* public void readStart(View v) {
*** Log.d(TAG, "read start");
*** isReading = true;
*** new Thread(new Runnable() {
***** @Override
***** public void run() {
******* if (audioRecord == null)
********* return;
 
******* byte[] myBuffer = new byte[myBufferSize];
******* int readCount = 0;
******* int totalCount = 0;
******* while (isReading) {
********* readCount = audioRecord.read(myBuffer, 0, myBufferSize);
********* totalCount += readCount;
********* Log.d(TAG, "readCount = " + readCount + ", totalCount = "
************* + totalCount);
******* }
***** }
*** }).start();
* }
 
* public void readStop(View v) {
*** Log.d(TAG, "read stop");
*** isReading = false;
* }
 
* @Override
* protected void onDestroy() {
*** super.onDestroy();
 
*** isReading = false;
*** if (audioRecord != null) {
***** audioRecord.release();
*** }
* }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 13:30
Привет! Вот еще темы с ответами:

Уровень шума - Unity, Unity3D
Всем привет. Есть ли в Unity какой инструмент определяющий уровень шума? На плеймаркете много программ которые замеряют уровень шума в дб...

Уровень шума на микрофоне - C#
Хочу сделать как на гугл транслейте или дополнения Siri для iOS. Допустим таймер следит за уровнем звука, а при достижении определенного...

Уровень шума Микрофона в ProgressBar - C#
Немогу вывести (ProgresBar.Value = q;) значение переменной, вроди все так но не рабтает, помогите! Испльзую библиотеку NAudio, по идеи...

.NET 4.x Реагирование программы на высокий уровень шума - Visual Basic .NET
Хочу сделать мини утилиту сидящая в трее и которая бы оповещала, звуком или просто надписью когда превышен определённый уровень шума. Может...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.06.2015, 13:30
Ответ Создать тему
Опции темы

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