Skip to content

Commit 70f0216

Browse files
committed
measure default WH, play with url or sessionId.
1 parent aefde68 commit 70f0216

File tree

4 files changed

+110
-6
lines changed

4 files changed

+110
-6
lines changed

app/src/main/java/com/zjy/audiovisualizeview/MainActivity.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,12 @@ protected void onCreate(Bundle savedInstanceState) {
1818
vAudioVisualize = findViewById(R.id.audio_visualize_view);
1919
vAudioVisualize.doPlay(R.raw.bell_2);
2020
}
21+
22+
@Override
23+
protected void onDestroy() {
24+
super.onDestroy();
25+
if (vAudioVisualize != null) {
26+
vAudioVisualize.release();
27+
}
28+
}
2129
}

app/src/main/res/layout/activity_main.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@
99

1010
<com.zjy.audiovisualize.view.AudioVisualizeView
1111
android:id="@+id/audio_visualize_view"
12-
android:layout_width="match_parent"
13-
android:layout_height="match_parent"
14-
android:text="Hello World!"
12+
android:layout_width="wrap_content"
13+
android:layout_height="wrap_content"
1514
app:layout_constraintBottom_toBottomOf="parent"
1615
app:layout_constraintLeft_toLeftOf="parent"
1716
app:layout_constraintRight_toRightOf="parent"

audiovisualize/src/main/java/com/zjy/audiovisualize/media/MediaManager.java

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.media.MediaPlayer;
5+
import android.net.Uri;
56

67
import com.zjy.audiovisualize.utils.LogUtils;
78

@@ -16,17 +17,18 @@ public class MediaManager {
1617
private Context mContext;
1718
private MediaManagerListener mListener;
1819

19-
private MediaManager(){}
20+
private MediaManager() {
21+
}
2022

2123
public MediaManager(Context context) {
2224
mContext = context;
2325
}
2426

2527

2628
/**
27-
* 播放音频
29+
* play audio by res id
2830
*
29-
* @param raw 资源文件id
31+
* @param raw res id of audio
3032
*/
3133
public void doPlay(final int raw) {
3234
try {
@@ -51,6 +53,34 @@ public void onPrepared(MediaPlayer mediaPlayer) {
5153
}
5254
}
5355

56+
/**
57+
* play audio by file path
58+
*
59+
* @param filePath file path of audio
60+
*/
61+
public void doPlay(final String filePath) {
62+
try {
63+
mediaPlayer = MediaPlayer.create(mContext, Uri.parse(filePath));
64+
if (mediaPlayer == null) {
65+
LogUtils.d("mediaPlayer is null");
66+
return;
67+
}
68+
69+
mediaPlayer.setOnErrorListener(null);
70+
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
71+
@Override
72+
public void onPrepared(MediaPlayer mediaPlayer) {
73+
if (mListener != null) {
74+
mListener.onPrepare();
75+
}
76+
}
77+
});
78+
mediaPlayer.start();
79+
} catch (Exception e) {
80+
LogUtils.d(e.getMessage());
81+
}
82+
}
83+
5484
public int getMediaPlayerId() {
5585
return mediaPlayer.getAudioSessionId();
5686
}
@@ -59,4 +89,13 @@ public void setMediaManagerListener(MediaManagerListener listener) {
5989
mListener = listener;
6090
}
6191

92+
public void release() {
93+
if (mediaPlayer != null) {
94+
mediaPlayer.stop();
95+
mediaPlayer.reset();
96+
mediaPlayer.release();
97+
mediaPlayer = null;
98+
}
99+
}
100+
62101
}

audiovisualize/src/main/java/com/zjy/audiovisualize/view/AudioVisualizeView.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import android.graphics.Paint;
99
import android.graphics.Path;
1010
import android.graphics.RectF;
11+
import android.media.MediaPlayer;
1112
import android.util.AttributeSet;
1213
import android.view.View;
1314

@@ -142,6 +143,27 @@ public void doPlay(final int raw) {
142143
}
143144
}
144145

146+
/**
147+
* start play url file
148+
*/
149+
public void doPlay(final String filePath) {
150+
if (mediaManager != null) {
151+
mediaManager.doPlay(filePath);
152+
}
153+
}
154+
155+
/**
156+
* play with session Id, which visualize need.
157+
* @param audioSessionId {@link MediaPlayer#getAudioSessionId()}
158+
*/
159+
public void playWithSessionId(int audioSessionId) {
160+
try {
161+
visualizerHelper.setAudioSessionId(audioSessionId);
162+
} catch (Exception e) {
163+
LogUtils.e(e.getMessage());
164+
}
165+
}
166+
145167
@Override
146168
public void onPrepare() {
147169
try {
@@ -161,6 +183,30 @@ public void onFftDataCapture(byte[] parseData) {
161183
invalidate();
162184
}
163185

186+
@Override
187+
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
188+
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
189+
int finallyWidth;
190+
int finallyHeight;
191+
int wSpecMode = MeasureSpec.getMode(widthMeasureSpec);
192+
int wSpecSize = MeasureSpec.getSize(widthMeasureSpec);
193+
int hSpecMode = MeasureSpec.getMode(heightMeasureSpec);
194+
int hSpecSize = MeasureSpec.getSize(heightMeasureSpec);
195+
if (wSpecMode == MeasureSpec.EXACTLY) {
196+
finallyWidth = wSpecSize;
197+
} else {
198+
finallyWidth = 500;
199+
}
200+
201+
if (hSpecMode == MeasureSpec.EXACTLY) {
202+
finallyHeight = hSpecSize;
203+
} else {
204+
finallyHeight = 500;
205+
}
206+
207+
setMeasuredDimension(finallyWidth, finallyHeight);
208+
}
209+
164210
@Override
165211
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
166212
super.onLayout(changed, left, top, right, bottom);
@@ -251,4 +297,16 @@ public void hide() {
251297
this.isVisualizationEnabled = false;
252298
}
253299

300+
/**
301+
* release media player and visualizer
302+
*/
303+
public void release() {
304+
if (visualizerHelper != null) {
305+
visualizerHelper.release();
306+
}
307+
if (mediaManager != null) {
308+
mediaManager.release();
309+
}
310+
}
311+
254312
}

0 commit comments

Comments
 (0)