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

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

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

Ошибка передачи параметров в класс - Программирование Android

28.03.2014, 23:52. Просмотров 514. Ответов 0
Метки нет (Все метки)

Всем привет снова!

Все же, наверно, лучше будет создать темку под этот вопрос)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected void AudioData() {
        audioRecord.startRecording();
        byte data[] = new byte[myBufferSize];
        byte[] myBuffer = new byte[myBufferSize];
        int[] retcof;
        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);
        }
        retcof = Testc.cof(data);
    }
Вопрос возник из этой темы: Записать массив байтов с микрофона

Интересует именно вот эта строчка:
Java
1
retcof = Testc.cof(data);
Собс-но, отсылаем массивчик в класс и ждем результат)

Класс имеет такую структуру:
Java
1
2
3
4
5
6
7
8
public class Testc {
  public static byte[] datas;   
   public static int[] mfc(byte[] data) {
      datas = data;
      // Код.....
      return datas; //Возвращяем int массив
   }
}
Массив retcof будет равен равен - null
Почему?)
Наверно это главный вопрос, хотя вот так вот записывать массив байтов с микрофона в основной активити тоже нехорошо...

Помогите, пожалуйста, решить эти проблемки!)

Добавлено через 17 часов 39 минут
Ни у кого нет каких-нибудь идей?)

В принципе можно было бы написать:
this.datas = data;
Хотя я думал что это только для такого this.data = data;

Добавлено через 3 часа 5 минут
Ну и проблема....
Java
1
03-28 14:03:09.377: E/AndroidRuntime(1312): java.lang.ArrayIndexOutOfBoundsException: length=8193; index=8193
Вот основная проблема^

Java
1
retcof = Testc.cof(data); // data.length = 8192;
Java
1
2
3
4
5
6
7
8
public class Testc {
  public static byte[] data;   //datas.length = 8192;
   public static int[] mfc(byte[] data) {
      this.data = data;
      // Код..... После которого у нас появляется массив datas
      return datas; //Возвращяем int массив  datas.length = 16;
   }
}
Где вот он успевает превысить размер массива, выложу весь код чтения:

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
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 = 8193;
    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() {
        // reading = true;
        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);
        }
        int[] retcof = Testc.mfc(data);
        Log.d(TAG, "mfcc test: " + retcof[0]);
        Log.d(TAG, "mfcc test: " + retcof[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;
    }
}
Добавлено через 5 часов 38 минут
Ни у кого все еще нет никаких задумок?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка передачи параметров в класс (Программирование Android):

Ошибка передачи данных из одного класса в другой - Программирование Android
В приложении в первом окне пользователь вводит логин (email) и пароль. Я почту пытаюсь передать в другой метод, что бы по логину...

Комбинирование программных параметров текста и параметров из layout - Программирование Android
Есть класс, отображающий layout на котором есть элемент TextView. В layout textView имеет вид: <TextView ...

Ошибка при передачи параметров в процедуру - Pascal
здравствуйте не могу понять почему выдает ошибку при передачи массивов в процедуру unit Ugauss; interface uses Windows,...

Ошибка преобразования типов при попытке передачи параметров в конструктор - C++/CLI
В общем ситуация следующая есть некая основная форма, в которой объявлен пользовательский класс: namespace MyNamespace{ ref class...

способ передачи параметров-значений в п\п - Pascal
Организовать способ передачи параметров-значений в п\п на примере вычисление минимального элемента в массиве? кто знает , как написать эту...

Реализация передачи параметров по ссылкам - C#
Добрый день, не могу что-то понять реализацию передачи параметров по ссылкам, есть класс А, он работает допустим с MySQL соответственно у...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2014, 23:52
Привет! Вот еще темы с ответами:

Способы передачи параметров в функцию - C++
#include<iostream> using namespace std; void swap1(int x, int y) { int z; z=x; x=y; y=z; ...

Оригинальный метод передачи параметров - C++
Функция-фабрика создаёт временный объект, operator<< набивает его данными, после чего строка заканчивается. Вызывается деструктор...

Аналог передачи параметров по ссылке - Java SE
Здравствуйте. Мне нужно переписать метод, написанный на Delphi, на Java. procedure faindUpak(Var...

Способы передачи параметров в процедуры - Assembler
Доброго времени суток! Уже который день пытаюсь разобраться с ранее неизвестным мне языком программирования ассемблером. Что-то, вроде,...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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