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

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

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

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

Android Studio

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

Q&A

0回答

947閲覧

visualizerでエラーが出る

ryu-sei

総合スコア12

Java

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

Android Studio

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

0グッド

0クリップ

投稿2021/04/24 06:06

前提・実現したいこと

https://github.com/felixpalmer/android-visualizer
を参考にwav音源のアナログデータを折れ線グラフに直そうとしています。
VisualizerViewの下の方の「ここ」と書いてある行のrenderでエラーが出ています。

発生している問題・エラーメッセージ

Cannot resolve method 'render' in 'Renderer'

該当のソースコード

VisualizerView

1public class VisualizerView extends View { 2 3 private byte[] mBytes; 4 private byte[] mFFTBytes; 5 private final Rect mRect = new Rect(); 6 private Visualizer mVisualizer; 7 8 private Set<GLSurfaceView.Renderer> mRenderers; 9 10 private final Paint mFlashPaint = new Paint(); 11 private final Paint mFadePaint = new Paint(); 12 13 public VisualizerView(Context context, AttributeSet attrs, int defStyle) 14 { 15 super(context, attrs); 16 init(); 17 } 18 19 public VisualizerView(Context context, AttributeSet attrs) 20 { 21 this(context, attrs, 0); 22 } 23 24 public VisualizerView(Context context) 25 { 26 this(context, null, 0); 27 } 28 29 private void init() { 30 mBytes = null; 31 mFFTBytes = null; 32 33 mFlashPaint.setColor(Color.argb(122, 255, 255, 255)); 34 mFadePaint.setColor(Color.argb(238, 255, 255, 255)); // Adjust alpha to change how quickly the image fades 35 mFadePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); 36 37 38 public void link(MediaPlayer player) 39 { 40 if(player == null) 41 { 42 throw new NullPointerException("Cannot link to null MediaPlayer"); 43 } 44 45 // Create the Visualizer object and attach it to our media player. 46 mVisualizer = new Visualizer(player.getAudioSessionId()); 47 mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); 48 49 // Pass through Visualizer data to VisualizerView 50 Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() 51 { 52 @Override 53 public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, 54 int samplingRate) 55 { 56 updateVisualizer(bytes); 57 } 58 59 @Override 60 public void onFftDataCapture(Visualizer visualizer, byte[] bytes, 61 int samplingRate) 62 { 63 updateVisualizerFFT(bytes); 64 } 65 }; 66 67 mVisualizer.setDataCaptureListener(captureListener, 68 Visualizer.getMaxCaptureRate() / 2, true, true); 69 70 // Enabled Visualizer and disable when we're done with the stream 71 mVisualizer.setEnabled(true); 72 player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 73 { 74 @Override 75 public void onCompletion(MediaPlayer mediaPlayer) 76 { 77 mVisualizer.setEnabled(false); 78 } 79 }); 80 } 81 82 public void addRenderer(GLSurfaceView.Renderer renderer) 83 { 84 if(renderer != null) 85 { 86 mRenderers.add(renderer); 87 } 88 } 89 90 public void clearRenderers() 91 { 92 mRenderers.clear(); 93 } 94 95 /** 96 * Call to release the resources used by VisualizerView. Like with the 97 * MediaPlayer it is good practice to call this method 98 */ 99 public void release() 100 { 101 mVisualizer.release(); 102 } 103 104 /** 105 * Pass data to the visualizer. Typically this will be obtained from the 106 * Android Visualizer.OnDataCaptureListener call back. See 107 * {@link Visualizer.OnDataCaptureListener#onWaveFormDataCapture } 108 * @param bytes 109 */ 110 public void updateVisualizer(byte[] bytes) { 111 mBytes = bytes; 112 invalidate(); 113 } 114 115 /** 116 * Pass FFT data to the visualizer. Typically this will be obtained from the 117 * Android Visualizer.OnDataCaptureListener call back. See 118 * {@link Visualizer.OnDataCaptureListener#onFftDataCapture } 119 * @param bytes 120 */ 121 public void updateVisualizerFFT(byte[] bytes) { 122 mFFTBytes = bytes; 123 invalidate(); 124 } 125 126 boolean mFlash = false; 127 128 /** 129 * Call this to make the visualizer flash. Useful for flashing at the start 130 * of a song/loop etc... 131 */ 132 public void flash() { 133 mFlash = true; 134 invalidate(); 135 } 136 137 Bitmap mCanvasBitmap; 138 Canvas mCanvas; 139 140 141 @Override 142 protected void onDraw(Canvas canvas) { 143 super.onDraw(canvas); 144 145 // Create canvas once we're ready to draw 146 mRect.set(0, 0, getWidth(), getHeight()); 147 148 if(mCanvasBitmap == null) 149 { 150 mCanvasBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); 151 } 152 if(mCanvas == null) 153 { 154 mCanvas = new Canvas(mCanvasBitmap); 155 } 156 157 if (mBytes != null) { 158 // Render all audio renderers 159 AudioData audioData = new AudioData(mBytes); 160 for(GLSurfaceView.Renderer r : mRenderers) 161 { 162 r.render(mCanvas, audioData, mRect);//ここ 163 } 164 } 165 166 if (mFFTBytes != null) { 167 // Render all FFT renderers 168 FFTData fftData = new FFTData(mFFTBytes); 169 for(GLSurfaceView.Renderer r : mRenderers) 170 { 171 r.render(mCanvas, fftData, mRect);//ここ 172 } 173 } 174 175 // Fade out old contents 176 mCanvas.drawPaint(mFadePaint); 177 178 if(mFlash) 179 { 180 mFlash = false; 181 mCanvas.drawPaint(mFlashPaint); 182 } 183 184 canvas.drawBitmap(mCanvasBitmap, new Matrix(), null); 185 } 186}

Renderer

1public abstract class Renderer { 2 protected float[] mPoints; 3 protected float[] mFFTPoints; 4 public Renderer() 5 { 6 } 7 8 abstract public void onRender(Canvas canvas, AudioData data, Rect rect); 9 10 abstract public void onRender(Canvas canvas, FFTData data, Rect rect); 11 12 final public void render(Canvas canvas, AudioData data, Rect rect) 13 { 14 if (mPoints == null || mPoints.length < data.bytes.length * 4) { 15 mPoints = new float[data.bytes.length * 4]; 16 } 17 18 onRender(canvas, data, rect); 19 } 20 21 22 final public void render(Canvas canvas, FFTData data, Rect rect) 23 { 24 if (mFFTPoints == null || mFFTPoints.length < data.bytes.length * 4) { 25 mFFTPoints = new float[data.bytes.length * 4]; 26 } 27 28 onRender(canvas, data, rect); 29 } 30}

試したこと

該当箇所の2行上のGLSurfaceView.Renderer r : mRenderersをRenderer r : mRenderersに変換したところrenderの部分はエラーが出なくなるのですが
Required type:
android.opengl.GLSurfaceView.Renderer
Provided:
com.example.myapplication.Renderer
と新たにエラーが出ます。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問