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

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

Восстановить пароль Регистрация
 
Nachinka
11 / 11 / 0
Регистрация: 19.02.2014
Сообщений: 95
28.03.2014, 23:52     Ошибка передачи параметров в класс #1
Всем привет снова!

Все же, наверно, лучше будет создать темку под этот вопрос)
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 минут
Ни у кого все еще нет никаких задумок?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 23:52     Ошибка передачи параметров в класс
Посмотрите здесь:

Отправка параметров WebView Android
Android Комбинирование программных параметров текста и параметров из layout
Передача параметров по ссылке Android
Приложение под Android для фильтра передачи данных Android
Android Какие есть форматы данных для передачи?
Android Вывести значения неизвестных параметров данного треугольника
Алгоритмы сжатия картинок для передачи по сети в Android Android
Android Изменения параметров layout-файла java-классом
Передача параметров с Activity в Fragment Android
Android Модель передачи не отправленных сообщений из сервиса
Android Ошибка передачи данных из одного класса в другой
Android Передача параметров внутрь apk

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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