package com.honghe.drawwav; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Path; import android.util.AttributeSet; import android.util.Log; import android.view.View; import com.honghe.record.AudioFileFunc; import com.sin.java.waveaccess.WaveFileReader; import com.sixin.speex.SpeexTool; public class WaveView extends View { private Paint paint = new Paint(); public WaveView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.BLACK); drawWave(canvas, AudioFileFunc.getFilePathByName(SpeexTool.dstName)); } public void drawWave(Canvas canvas, String filePath) { // 去锯齿 paint.setAntiAlias(true); paint.setColor(Color.WHITE); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(2); paint.setTextSize(20); WaveFileReader waveFileReader = new WaveFileReader(filePath); if (waveFileReader.isSuccess()) { String title = String.format("%s %dHZ %dBit %dCH", filePath, waveFileReader.getSampleRate(), waveFileReader.getBitPerSample(), waveFileReader.getNumChannels()); paint.setColor(Color.RED); canvas.drawText(title, 100, 400, paint); int[] color = { Color.GREEN, Color.BLUE, Color.RED }; canvas.translate(0, 200); for (int i = 0; i < waveFileReader.getNumChannels(); ++i) { // 获取i声道数据 int[] data = waveFileReader.getData()[i]; // 绘图 drawData2(canvas, data, color[i % color.length]); } } else { System.err.println(filePath + "不是一个正常的wav文件"); } } public void drawData(Canvas canvas, int[] data, int color) { paint.setColor(color); paint.setStrokeWidth(2); paint.setStyle(Style.STROKE); int scale = 720; int length = data.length / scale; Path path = new Path(); for (int i = 0; i < scale; i++) { Log.e("test", i + " value" + data[i] + " length" + data.length); if (i == 0) { path.moveTo(i, data[length * i]); } else { path.lineTo(i, data[length * i]); } } canvas.drawPath(path, paint); } public void drawData2(Canvas canvas, int[] data, int color) { paint.setColor(color); paint.setStrokeWidth(2); paint.setStyle(Style.STROKE); int scalex = 720; int length = data.length / scalex; int scaley = 200; float lengthy = (float)200 / (float)32768; for (int i = 0; i < scalex; i++) { Log.e("test", i + " value" + data[length * i] + " length" + data.length + " lengthy" + lengthy); if (i == 0) { canvas.translate(i, data[length * i] * lengthy); } else { canvas.drawLine(i - 1, data[length * (i - 1)] * lengthy, i, data[length * i] * lengthy, paint); } } } }