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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Nachinka
11 / 11 / 0
Регистрация: 19.02.2014
Сообщений: 95
#1

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

24.03.2014, 21:28. Просмотров 1214. Ответов 4
Метки нет (Все метки)

Всем привет!

Возникла проблема, никак не могу придумать такую штуку, допустим, имеется небольшое приложение, две кнопки:

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
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Start" />
 
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="Stop" />
 
</RelativeLayout>
Нажимаешь на Start пошла запись в массив байтов, нажимаешь на Stop запись остановилась, массив байтов( с микрофона устройства) получен.

Помогите, пожалуйста, разобраться с проблемой)

Есть небольшая, неработающая заготовка:

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
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.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity implements OnClickListener {
 
    Button start_button;
    Button stop_button;
    boolean reading = false;
    final String TAG = "TAG";
    int myBufferSize = 8192;
    AudioRecord audioRecord;
    private Thread recordingThread = null;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start_button = (Button) findViewById(R.id.button1);
        stop_button = (Button) findViewById(R.id.button2);
        start_button.setOnClickListener(this);
        stop_button.setOnClickListener(this);
        createAudioRecorder();
    }
 
    private void createAudioRecorder() {
        int sampleRate = 16000;
        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);
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:
            Log.d(TAG, "record start");
            reading = true;
            startRecorder();
        case R.id.button2:
            Log.d(TAG, "stop recorder");
            reading = false;
            stopRecorder();
        }
    }
 
    private void startRecorder() {
        reading = true;
        Log.d(TAG, "recording...");
        audioRecord.startRecording();
 
        recordingThread = new Thread(new Runnable() {
 
            @Override
            public void run() {
                AudioData();
            }
        }, "AudioRecorder Thread");
 
        recordingThread.start();
    }
 
    protected void AudioData() {
        byte data[] = new byte[myBufferSize];
        byte[] myBuffer = new byte[myBufferSize];
        int readCount = 0;
        int totalCount = 0;
        while (reading) {
            readCount = audioRecord.read(myBuffer, 0, myBufferSize);
            data = myBuffer;
            totalCount += readCount;
            Log.d(TAG, "readCount = " + readCount + ", totalCount = "
                    + totalCount);
            Log.d(TAG, "lenght: " + data.length);
            Log.d(TAG, "data1: " + data[0]);
            Log.d(TAG, "data2: " + data[1]);
        }
    }
 
    private void stopRecorder() {
        reading = false;
        Log.d(TAG, "record stop!");
        // audioRecord.stop();
        if (null != audioRecord) {
            reading = false;
            audioRecord.stop();
            audioRecord.release();
            audioRecord = null;
            recordingThread = null;
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}
В манифесте добавлены права на запись звука.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 21:28     Записать массив байтов с микрофона
Посмотрите здесь:

Как записать аудио с микрофона и воспроизвести? - Программирование Android
Я хочу записывать с микрофона запись в буфер с помощью AudioRecorder и воспроизвести с помощью AudioTrack, но ничего не воспроизводится. В...

Записать строку в двумерный массив - Программирование Android
Я в одном методе масив чисел записываю в строку. По рядкам делю &quot; &quot;, по столбикам &quot;n&quot;. Но нужно обратно переводить, а для этого надо...

Как записать массив строк в файл? - Программирование Android
Я хочу записать значение listview в файл а потом при загрузке достать оттуда весь масив и заново добавить в ListView через адаптер у меня...

Записать массив String как столбец таблицы базы данных - Программирование Android
Есть класс Product public class Product{ String name; String price; ArrayList&lt;String&gt; urls; ...

Звук не с микрофона? - Программирование Android
Приветствую. Есть ли возможность совершить вызов с телефона передавая звуковой сигнал не с микрофона самого устройства, а потоком через...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
verylazy
Заблокирован
25.03.2014, 11:12     Записать массив байтов с микрофона #2
проблема в чем и ошибка?
Nachinka
11 / 11 / 0
Регистрация: 19.02.2014
Сообщений: 95
26.03.2014, 00:16  [ТС]     Записать массив байтов с микрофона #3
Проблема в том, что если код выше запускать, то можно вот такие странности увидеть:


Bash
1
2
3
4
5
6
7
8
9
10
11
03-25 09:47:01.782: D/TAG(788): minInternalBufferSize = 640, internalBufferSize = 2560, myBufferSize = 8192
03-25 09:47:04.262: D/TAG(788): record start
03-25 09:47:04.262: D/TAG(788): recording...
03-25 09:47:04.312: D/TAG(788): stop recorder
03-25 09:47:04.322: D/TAG(788): record stop!
03-25 09:47:04.372: D/TAG(788): readCount = 160, totalCount = 160
03-25 09:47:04.381: D/TAG(788): lenght: 8192
03-25 09:47:04.381: D/TAG(788): data1: 0
03-25 09:47:04.381: D/TAG(788): data2: 0
03-25 09:47:06.942: D/TAG(788): stop recorder
03-25 09:47:06.942: D/TAG(788): record stop!
То ест нажимаю на старт, он выдает start recorder recorder... и тут же стоп. Следовательно и стопорится запись массива байт.

Вот это выдает после нажатия на Start:
Bash
1
2
3
4
5
6
7
8
03-25 09:47:04.262: D/TAG(788): record start
03-25 09:47:04.262: D/TAG(788): recording...
03-25 09:47:04.312: D/TAG(788): stop recorder
03-25 09:47:04.322: D/TAG(788): record stop!
03-25 09:47:04.372: D/TAG(788): readCount = 160, totalCount = 160
03-25 09:47:04.381: D/TAG(788): lenght: 8192
03-25 09:47:04.381: D/TAG(788): data1: 0
03-25 09:47:04.381: D/TAG(788): data2: 0
А вот это после нажатия на Stop:
Bash
1
2
03-25 09:47:06.942: D/TAG(788): stop recorder
03-25 09:47:06.942: D/TAG(788): record stop!
Что вот за преждевременная остановка..

Добавлено через 10 часов 27 минут
Ну что, ни у кого нет каких-нибудь догадок?
verylazy
Заблокирован
26.03.2014, 11:09     Записать массив байтов с микрофона #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
так как ни у кого нет идей, отпишусь

- в switch-case нет break; в каждой секции case, это врятли относится к делу, но для чего-то же их туда ставят

- мне не понятно, почему в основном потоке делаем audioRecord.startRecording(); а потом запускается отдельный поток для AudioData(); может audioRecord.startRecording(); стоит в тот же поток перенести?

- это точно не по делу, но строки лишние - два раза присваивается reading = true; и reading = false;
первый раз в case, а потом на входе в startRecorder() и stopRecorder()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 13:50     Записать массив байтов с микрофона
Еще ссылки по теме:

Использование микрофона в фоне - Программирование Android
Добрый день, уважаемые программисты. Суть: Есть приложение, пишет фоном с микрофона. Если мне не изменяют мои знания, микрофон в...

Подмена потока с микрофона - Программирование Android
Нужно подменипть поток с микрофона, чтобы отправить его при разговоре. Типа диалер, который вместо звука с микрофона будет пускать другой...

Отправка массива байтов по сети - Программирование Android
Всем привет. Задача у меня простая, нужно отправить по сети массив байт, но... Все мы знаем о знаковых байтах в жабе. вот строка...

Android studio определение громкости микрофона - Программирование Android
Android Studio. Нужно определить когда юзер дует в микрофон, в документации функций определения громкости микрофона не нашел. Как это...

Вычитывание байтов из InputStream сокета Bluetooth - Программирование Android
Создан блютузный сокет, приконнекчен к девайсу, запущен следующий поток: private class ReceiveDataThread extends Thread { ...

Как на java получить с микрофона звук во flac формате? - Программирование Android
Как на java получить с микрофона звук во flac формате?


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

Или воспользуйтесь поиском по форуму:
Nachinka
11 / 11 / 0
Регистрация: 19.02.2014
Сообщений: 95
26.03.2014, 13:50  [ТС]     Записать массив байтов с микрофона #5
Спасибо, verylazy!

Вот такие теперь логи выдает:

Bash
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
03-26 09:46:28.005: D/TAG(798): minInternalBufferSize = 640, internalBufferSize = 2560, myBufferSize = 8192
03-26 09:46:32.335: D/TAG(798): record start
03-26 09:46:32.335: D/TAG(798): recording...
03-26 09:46:32.395: D/TAG(798): readCount = 2560, totalCount = 2560
03-26 09:46:32.395: D/TAG(798): lenght: 8192
03-26 09:46:32.405: D/TAG(798): data1: 0
03-26 09:46:32.405: D/TAG(798): data2: 0
03-26 09:46:32.495: D/TAG(798): readCount = 2560, totalCount = 5120
03-26 09:46:32.495: D/TAG(798): lenght: 8192
03-26 09:46:32.495: D/TAG(798): data1: -4
03-26 09:46:32.495: D/TAG(798): data2: -1
03-26 09:46:32.568: D/TAG(798): readCount = 2560, totalCount = 7680
03-26 09:46:32.568: D/TAG(798): lenght: 8192
03-26 09:46:32.568: D/TAG(798): data1: 102
03-26 09:46:32.568: D/TAG(798): data2: 0
03-26 09:46:32.715: D/TAG(798): readCount = 2560, totalCount = 10240
03-26 09:46:32.715: D/TAG(798): lenght: 8192
03-26 09:46:32.715: D/TAG(798): data1: -113
03-26 09:46:32.715: D/TAG(798): data2: -1
03-26 09:46:32.857: D/TAG(798): readCount = 2560, totalCount = 12800
03-26 09:46:32.857: D/TAG(798): lenght: 8192
03-26 09:46:32.865: D/TAG(798): data1: -22
03-26 09:46:32.865: D/TAG(798): data2: -1
03-26 09:46:32.865: D/TAG(798): readCount = 2560, totalCount = 15360
03-26 09:46:32.865: D/TAG(798): lenght: 8192
03-26 09:46:32.865: D/TAG(798): data1: 21
03-26 09:46:32.865: D/TAG(798): data2: 0
03-26 09:46:33.011: D/TAG(798): readCount = 2560, totalCount = 17920
03-26 09:46:33.011: D/TAG(798): lenght: 8192
03-26 09:46:33.015: D/TAG(798): data1: 100
03-26 09:46:33.015: D/TAG(798): data2: 0
03-26 09:46:33.085: D/TAG(798): readCount = 2560, totalCount = 20480
03-26 09:46:33.085: D/TAG(798): lenght: 8192
03-26 09:46:33.085: D/TAG(798): data1: 45
03-26 09:46:33.085: D/TAG(798): data2: 0
03-26 09:46:33.235: D/TAG(798): readCount = 2560, totalCount = 23040
03-26 09:46:33.235: D/TAG(798): lenght: 8192
03-26 09:46:33.235: D/TAG(798): data1: 7
03-26 09:46:33.235: D/TAG(798): data2: 0
03-26 09:46:33.307: D/TAG(798): readCount = 2560, totalCount = 25600
03-26 09:46:33.307: D/TAG(798): lenght: 8192
03-26 09:46:33.307: D/TAG(798): data1: 22
03-26 09:46:33.315: D/TAG(798): data2: 0
03-26 09:46:33.385: D/TAG(798): readCount = 2560, totalCount = 28160
03-26 09:46:33.385: D/TAG(798): lenght: 8192
03-26 09:46:33.385: D/TAG(798): data1: 2
03-26 09:46:33.395: D/TAG(798): data2: 0
03-26 09:46:33.465: D/TAG(798): readCount = 2560, totalCount = 30720
03-26 09:46:33.465: D/TAG(798): lenght: 8192
03-26 09:46:33.465: D/TAG(798): data1: 2
03-26 09:46:33.465: D/TAG(798): data2: 0
03-26 09:46:33.545: D/TAG(798): readCount = 2560, totalCount = 33280
03-26 09:46:33.545: D/TAG(798): lenght: 8192
03-26 09:46:33.545: D/TAG(798): data1: 1
03-26 09:46:33.545: D/TAG(798): data2: 0
03-26 09:46:33.615: D/TAG(798): readCount = 2560, totalCount = 35840
03-26 09:46:33.615: D/TAG(798): lenght: 8192
03-26 09:46:33.615: D/TAG(798): data1: 1
03-26 09:46:33.615: D/TAG(798): data2: 0
03-26 09:46:33.695: D/TAG(798): readCount = 2560, totalCount = 38400
03-26 09:46:33.695: D/TAG(798): lenght: 8192
03-26 09:46:33.695: D/TAG(798): data1: 4
03-26 09:46:33.695: D/TAG(798): data2: 0
03-26 09:46:33.766: D/TAG(798): readCount = 2560, totalCount = 40960
03-26 09:46:33.766: D/TAG(798): lenght: 8192
03-26 09:46:33.766: D/TAG(798): data1: 0
03-26 09:46:33.766: D/TAG(798): data2: 0
03-26 09:46:33.911: D/TAG(798): readCount = 2560, totalCount = 43520
03-26 09:46:33.911: D/TAG(798): lenght: 8192
03-26 09:46:33.915: D/TAG(798): data1: 0
03-26 09:46:33.915: D/TAG(798): data2: 0
03-26 09:46:33.915: D/TAG(798): readCount = 2560, totalCount = 46080
03-26 09:46:33.915: D/TAG(798): lenght: 8192
03-26 09:46:33.925: D/TAG(798): data1: 0
03-26 09:46:33.925: D/TAG(798): data2: 0
03-26 09:46:34.135: D/TAG(798): readCount = 2560, totalCount = 48640
03-26 09:46:34.135: D/TAG(798): lenght: 8192
03-26 09:46:34.135: D/TAG(798): data1: 0
03-26 09:46:34.135: D/TAG(798): data2: 0
03-26 09:46:34.285: D/TAG(798): readCount = 2560, totalCount = 51200
03-26 09:46:34.285: D/TAG(798): lenght: 8192
03-26 09:46:34.285: D/TAG(798): data1: -5
03-26 09:46:34.285: D/TAG(798): data2: -1
03-26 09:46:34.357: D/TAG(798): readCount = 2560, totalCount = 53760
03-26 09:46:34.357: D/TAG(798): lenght: 8192
03-26 09:46:34.357: D/TAG(798): data1: -81
03-26 09:46:34.357: D/TAG(798): data2: -1
03-26 09:46:34.435: D/TAG(798): readCount = 2560, totalCount = 56320
03-26 09:46:34.435: D/TAG(798): lenght: 8192
03-26 09:46:34.435: D/TAG(798): data1: 45
03-26 09:46:34.435: D/TAG(798): data2: 0
03-26 09:46:34.515: D/TAG(798): readCount = 2560, totalCount = 58880
03-26 09:46:34.515: D/TAG(798): lenght: 8192
03-26 09:46:34.515: D/TAG(798): data1: -2
03-26 09:46:34.515: D/TAG(798): data2: -1
03-26 09:46:34.515: D/TAG(798): readCount = 2560, totalCount = 61440
03-26 09:46:34.515: D/TAG(798): lenght: 8192
03-26 09:46:34.525: D/TAG(798): data1: 2
03-26 09:46:34.525: D/TAG(798): data2: 0
03-26 09:46:34.668: D/TAG(798): readCount = 2560, totalCount = 64000
03-26 09:46:34.668: D/TAG(798): lenght: 8192
03-26 09:46:34.668: D/TAG(798): data1: 2
03-26 09:46:34.668: D/TAG(798): data2: 0
03-26 09:46:34.745: D/TAG(798): readCount = 2560, totalCount = 66560
03-26 09:46:34.745: D/TAG(798): lenght: 8192
03-26 09:46:34.745: D/TAG(798): data1: -1
03-26 09:46:34.745: D/TAG(798): data2: -1
03-26 09:46:34.887: D/TAG(798): readCount = 2560, totalCount = 69120
03-26 09:46:34.887: D/TAG(798): lenght: 8192
03-26 09:46:34.895: D/TAG(798): data1: 1
03-26 09:46:34.895: D/TAG(798): data2: 0
03-26 09:46:34.895: D/TAG(798): readCount = 2560, totalCount = 71680
03-26 09:46:34.895: D/TAG(798): lenght: 8192
03-26 09:46:34.895: D/TAG(798): data1: -2
03-26 09:46:34.895: D/TAG(798): data2: -1
03-26 09:46:35.044: D/TAG(798): readCount = 2560, totalCount = 74240
03-26 09:46:35.044: D/TAG(798): lenght: 8192
03-26 09:46:35.044: D/TAG(798): data1: -1
03-26 09:46:35.044: D/TAG(798): data2: -1
03-26 09:46:35.119: D/TAG(798): readCount = 2560, totalCount = 76800
03-26 09:46:35.119: D/TAG(798): lenght: 8192
03-26 09:46:35.125: D/TAG(798): data1: 1
03-26 09:46:35.125: D/TAG(798): data2: 0
03-26 09:46:35.265: D/TAG(798): readCount = 2560, totalCount = 79360
03-26 09:46:35.265: D/TAG(798): lenght: 8192
03-26 09:46:35.265: D/TAG(798): data1: 1
03-26 09:46:35.265: D/TAG(798): data2: 0
03-26 09:46:35.410: D/TAG(798): readCount = 2560, totalCount = 81920
03-26 09:46:35.410: D/TAG(798): lenght: 8192
03-26 09:46:35.415: D/TAG(798): data1: -7
03-26 09:46:35.415: D/TAG(798): data2: -1
03-26 09:46:35.495: D/TAG(798): readCount = 2560, totalCount = 84480
03-26 09:46:35.495: D/TAG(798): lenght: 8192
03-26 09:46:35.515: D/TAG(798): data1: 24
03-26 09:46:35.515: D/TAG(798): data2: 0
03-26 09:46:35.515: D/TAG(798): readCount = 2560, totalCount = 87040
03-26 09:46:35.515: D/TAG(798): lenght: 8192
03-26 09:46:35.515: D/TAG(798): data1: 35
03-26 09:46:35.515: D/TAG(798): data2: -1
03-26 09:46:35.525: D/TAG(798): stop recorder
03-26 09:46:35.525: D/TAG(798): record stop!
03-26 09:46:35.575: D/TAG(798): readCount = 0, totalCount = 87040
03-26 09:46:35.585: D/TAG(798): lenght: 8192
03-26 09:46:35.585: D/TAG(798): data1: 35
03-26 09:46:35.585: D/TAG(798): data2: -1
Ну и вот такой код:
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
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.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity implements OnClickListener {
 
    Button start_button;
    Button stop_button;
    boolean reading = false;
    final String TAG = "TAG";
    int myBufferSize = 8192;
    AudioRecord audioRecord;
    private Thread recordingThread = null;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start_button = (Button) findViewById(R.id.button1);
        stop_button = (Button) findViewById(R.id.button2);
        start_button.setOnClickListener(this);
        stop_button.setOnClickListener(this);
        createAudioRecorder();
    }
 
    private void createAudioRecorder() {
        int sampleRate = 16000;
        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);
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:
            Log.d(TAG, "record start");
            reading = true;
            startRecorder();
            break;
        case R.id.button2:
            Log.d(TAG, "stop recorder");
            reading = false;
            stopRecorder();
            break;
        }
    }
 
    private void startRecorder() {
        Log.d(TAG, "recording...");
        recordingThread = new Thread(new Runnable() {
 
            @Override
            public void run() {
                AudioData();
            }
        }, "AudioRecorder Thread");
 
        recordingThread.start();
    }
 
    protected void AudioData() {
        audioRecord.startRecording();
        byte data[] = new byte[myBufferSize];
        byte[] myBuffer = new byte[myBufferSize];
        int readCount = 0;
        int totalCount = 0;
        while (reading) {
            readCount = audioRecord.read(myBuffer, 0, myBufferSize);
            data = myBuffer;
            totalCount += readCount;
            Log.d(TAG, "readCount = " + readCount + ", totalCount = "
                    + totalCount);
            Log.d(TAG, "lenght: " + data.length);
            Log.d(TAG, "data1: " + data[0]);
            Log.d(TAG, "data2: " + data[1]);
        }
    }
 
    private void stopRecorder() {
        Log.d(TAG, "record stop!");
        // audioRecord.stop();
        if (null != audioRecord) {
            reading = false;
            audioRecord.stop();
            audioRecord.release();
            audioRecord = null;
            recordingThread = null;
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}
Уху, спасибо!
Yandex
Объявления
26.03.2014, 13:50     Записать массив байтов с микрофона
Ответ Создать тему
Опции темы

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