質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

解決済

クラス間での配列データの移動の仕方がわからない

yasiko
yasiko

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1回答

0評価

0クリップ

371閲覧

投稿2021/09/30 09:01

メインのアクティビティでAudioRecodoを用いてマイクから一定間隔で音声データ(配列のデータ)を取得して、
それをサーフェスビューで波形を描画して視覚的に音声データを確認したいのですが、
クラス間での配列データの受け渡し?移動?の仕方がわかりません。詳しい方教えてください。

↓MainPage メインのアクティビティ

java

import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.database.sqlite.SQLiteDatabase; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.Window; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; public class MainPage extends Activity { public boolean loop = true;//loop用 public Thread thread; public int co=0;//loop用のカウント private int PERMISSIONS_REQUEST_RECORD_AUDIO = 99; // オーディオレコード定数 public AudioRecord record; public int count=0; public static final int AUDIO_SAMPLE_FREQ = 44100;//サンプリング周波数 public static final int AUDIO_BUFFER_SIZE = AudioRecord.getMinBufferSize(AUDIO_SAMPLE_FREQ, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); //オーディオレコード用バッファのサイズ public static final int FRAME_BUFFER_SIZE = AUDIO_BUFFER_SIZE / 2; public short data[] = new short[FRAME_BUFFER_SIZE]; public short test[] = new short[32];//配列テスト public void onCreate(Bundle bundle) { super.onCreate(bundle); requestWindowFeature(Window.FEATURE_NO_TITLE); for(int i=0; i<32; i++) //格納 { test[i]= (short) i; } Log.d("MainPage", "onCreate起動時"); for(int i=0; i<32; i++) // test { Log.d("MainPage", "" + test[i]);//配列logcat表示 } setContentView(new MySurfaceView(this));//サーフェスビュー thread = new Thread(new Runnable()//ループ { private Handler handler = new Handler(getMainLooper()); @Override public void run() { record = new AudioRecord(MediaRecorder.AudioSource.MIC, AUDIO_SAMPLE_FREQ, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, AUDIO_BUFFER_SIZE); // マルチスレッドにしたい処理 ここから while(loop) { try { co++; thread.sleep(5000); handler.post(new Runnable() { @Override public void run() { Log.d("MainPage", "ループNo." + co); // 録音開始 record.startRecording(); record.read(data, 0, FRAME_BUFFER_SIZE); for(int i=0; i<FRAME_BUFFER_SIZE; i++) { Log.d("MainPage", "data["+ i +"] = " + data[i]);//音声データ配列 logcat表示 } } }); } catch (InterruptedException e) { } }//while末 // マルチスレッドにしたい処理 ここまで }//Run末 });//thread末 int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO); if (permissionCheck == PackageManager.PERMISSION_GRANTED) // すでにユーザーがパーミッションを許可 { thread.start(); } else // ユーザーはパーミッションを許可していない { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, PERMISSIONS_REQUEST_RECORD_AUDIO); } }//onCreate末 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_RECORD_AUDIO) { if (grantResults[0] != android.content.pm.PackageManager.PERMISSION_GRANTED) // ユーザが許可しなかったらアプリを終了する { finish(); } else { thread.start(); } } } }//MainPage末

↓MySurfaceView 波形描画用のサーフェスビュー

java

import android.content.Context; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.view.SurfaceHolder; import android.view.SurfaceView; import java.util.Calendar; import java.util.Random; public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable { private Thread thread; private SurfaceHolder holder; public int count = 0; private float screenWidth, screenHeight; public short frn[] = new short[32];//配列 public MySurfaceView(Context context) { super(context); holder = getHolder(); holder.addCallback(this); holder.setFixedSize(getWidth(), getHeight()); } @Override public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) { screenWidth = w; screenHeight = h; thread = new Thread(this); thread.start(); } @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void run() { while (thread != null) { long nextTime = System.currentTimeMillis()+250;//250msec try { Thread.sleep(nextTime - System.currentTimeMillis()); } catch (Exception e) { } for (int i=0; i<32; i++)//とりあえずは乱数を入れてそれっぽく ここに音声データを置き換えたい { Random r = new Random(); // https://kazukii777.blogspot.com/2013/05/android_6460.html 乱数生成 frn[i] = (short) r.nextInt(255); } doDraw(holder); } } private void doDraw(SurfaceHolder holder) { Canvas canvas = holder.lockCanvas(); if (canvas != null) { count++; Paint paint = new Paint(); paint.setAntiAlias(true); canvas.drawColor(Color.BLACK); paint.setStrokeWidth(2);//線幅 paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED); Path path =new Path(); for (int i=0; i<32; i++) { if (i==0) { path.moveTo((screenWidth/32)*i,screenHeight/2 +frn[i]);//開始座標 } else { path.lineTo((screenWidth/32)*i,screenHeight/2 + frn[i]); } } canvas.drawPath(path,paint); paint.setAntiAlias(true); paint.setTextSize(120); paint.setColor(Color.WHITE); canvas.drawText("Surface_View_Count",0,400,paint); paint.setAntiAlias(true); paint.setTextSize(120); paint.setColor(Color.WHITE); canvas.drawText("-"+count+"-",0,600,paint); holder.unlockCanvasAndPost(canvas); } } }

とりあえずは乱数で波形を動かしているのですが、これを音声データに置き換えたいです。

イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。