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

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

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

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

Android Studio

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

Q&A

0回答

2954閲覧

androidでリアルタイムで録音した音声にリバーブをかける

riku0307

総合スコア7

Java

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

Android Studio

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

0グッド

0クリップ

投稿2017/11/28 11:49

編集2022/01/12 10:55

androidでaudiorecord、audiotrackを用いてリアルタイムで録音した音声にリバーブをかけたいと考えています。なので、EnvironmentalReverbクラスを用いようと考えているのですが、後述のプログラムでも効果が現れません。どなたか、詳しい方、アドバイスいただけると幸いです。
また、私自身、やることを断念しましたが、直接音声データにリバーブをかける方法がもしありましたらお願いします。

Java

1package com.example.audioplayer; 2 3import android.app.Activity; 4import android.media.AudioFormat; 5import android.media.AudioManager; 6import android.media.AudioRecord; 7import android.media.AudioTrack; 8import android.media.MediaRecorder.AudioSource; 9import android.os.Bundle; 10import android.util.Log; 11import android.view.View; 12import android.view.View.OnClickListener; 13import android.widget.Button; 14import android.media.AudioTrack.Builder; 15import android.media.audiofx.PresetReverb; 16import android.media.audiofx.EnvironmentalReverb; 17 18import android.widget.SeekBar; 19import android.widget.TextView; 20import android.widget.SeekBar.OnSeekBarChangeListener; 21 22 23import java.nio.ByteBuffer; 24 25 26public class MainActivity extends Activity { 27 AudioRecord audioRec = null; 28 Button btn = null; 29 boolean bIsRecording = false; 30 int bufSize ; 31 int samplingRate ; 32 private AudioTrack audioTrack; 33 private void recodingAndPlay() { 34 if (bIsRecording) { 35 bIsRecording = false; 36 } else { 37 // 録音開始 38 Log.v("AudioRecord", "startRecording"); 39 audioRec.startRecording(); 40 bIsRecording = true; 41 // 録音スレッド 42 43 new Thread(new Runnable() { 44 @Override 45 public void run() { 46 EnvironmentalReverb mReverb = new EnvironmentalReverb(0,0); 47 mReverb.setDecayHFRatio((short) 1000); 48 mReverb.setDecayTime(10000); 49 mReverb.setDensity((short) 1000); 50 mReverb.setDiffusion((short) 1000); 51 mReverb.setReverbLevel((short) -1000); 52 audioTrack.setAuxEffectSendLevel(1.0f); 53 54 mReverb.setEnabled(true); 55 audioTrack.attachAuxEffect(mReverb.getId()); 56 Log.e("DEBUG","sessionId : " + audioTrack.getAudioSessionId()); 57 58 while (bIsRecording) { 59 60 audioRec.read(buf,0,buf.length,AudioRecord.READ_NON_BLOCKING); 61 audioTrack.write(buf, 0, buf.length, AudioTrack.WRITE_NON_BLOCKING); 62 offset += buf.length; 63 if(offset >= bufSize){ 64 offset = 0; 65 } 66 67 Log.d("AudioRecord", "read " + buf2.length + 68 " bytes"); 69 } 70 // 録音停止 71 Log.v("AudioRecord", "stop"); 72 audioRec.stop(); 73 } 74}).start(); 75 76 } 77 } 78 79 80 public AudioRecord findAudioRecord() { 81 int rate = 44100; 82 83 84 short audioFormat = AudioFormat.ENCODING_PCM_FLOAT; 85 short channelConfig = AudioFormat.CHANNEL_IN_MONO; 86 87 try { 88 Log.d("TAG", "Attempting rate " + rate + "Hz, bits: " 89 + audioFormat + ", channel: " + channelConfig); 90 int bufferSize = AudioRecord.getMinBufferSize(rate, 91 channelConfig, audioFormat); 92 93 94 95 96 if (bufferSize != AudioRecord.ERROR_BAD_VALUE) { 97 // check if we can instantiate and have a success 98 AudioRecord recorder = new AudioRecord( 99 AudioSource.DEFAULT, rate, channelConfig, 100 audioFormat, bufferSize ); 101 102 if (recorder.getState() == AudioRecord.STATE_INITIALIZED) 103 bufSize = bufferSize ; 104 samplingRate = rate; 105 106 107 108 Log.d("TAG2", "buffersize " + bufSize); 109 return recorder; 110 } 111 } catch (Exception e) { 112 Log.e("TAG", rate + "Exception, keep trying.", e); 113 } 114 115 116 return null; 117 } 118 119 @Override 120 protected void onCreate (Bundle savedInstanceState){ 121 super.onCreate(savedInstanceState); 122 setContentView(R.layout.activity_main); 123 124// AudioRecordの作成 125 audioRec = findAudioRecord(); 126 audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, samplingRate, 127 AudioFormat.CHANNEL_OUT_MONO, 128 AudioFormat.ENCODING_PCM_FLOAT, bufSize, AudioTrack.MODE_STREAM); 129 audioTrack.play(); 130 131 findViewById(R.id.button).setOnClickListener(new OnClickListener() { 132 @Override 133 public void onClick(View v) { 134 recodingAndPlay(); 135 } 136 }); 137 } 138 139 } 140

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問