diff --git a/README.OPENRESOURCE.md b/README.OPENRESOURCE.md index 7da1d3126d1a0e21e4eda383200e88d29646aa26..ca54369e44f1932ba498cb94067c4267fcc89512 100644 --- a/README.OPENRESOURCE.md +++ b/README.OPENRESOURCE.md @@ -2,11 +2,11 @@ ```txt { - "Name": "AudioVisualizerOhos", + "Name": "audio-visualizer-ohos", "License": "Apache License", "License File": "LICENSE", "Version Number": "0.9.1", - "Upstream URL": "[](https://github.com/gauravk95/audio-visualizer-android)", + "Upstream URL": "https://github.com/gauravk95/audio-visualizer-android", "Description": "A light-weight and easy-to-use Audio Visualizer for Android using the Android Canvas." } ``` diff --git a/README.md b/README.md index d5e595f5de0e8a26acca937dddcc6d88cf153f2f..435aa82d2b582bbbfe544954dfcbd9c00be9c560 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,13 @@ #### 效果演示 - +![](https://images.gitee.com/uploads/images/2021/0531/144816_81aaac1e_7648707.gif "audio.gif") #### 安装教程 1.在项目根目录下的build.gradle文件中 -```java +```txt allprojects { repositories { maven { @@ -30,10 +30,10 @@ allprojects { 2.在entry模块下的build.gradle文件中 -```java +```text dependencies { implementation('com.gitee.chinasoft_ohos:audio-visualizer-ohos:0.0.1-SNAPSHOT') - ...... + ...... } ``` @@ -43,7 +43,7 @@ dependencies { 在布局中引入对应的自定义控件用于绘制频率,例如: -```xml +```txt ``` -用户可自定义播放器,在类中调用setAudioSessionId,背景即可跟随频率联动 +播放完毕后,想要定格背景在最后一帧可调用 + +```txt +mVisualizer.setVisualizationEnabled(false); +``` + +从Java类中获取此视图引用 + +```txt +mVisualizer = (HiFiVisualizer) findComponentById(ResourceTable.Id_hifi); +if(playSoundUtil.getAudioRenderer().getRendererSessionId() != -1) { + mVisualizer.setAudioSessionId(sessionId()); +} +``` #### 测试信息 @@ -73,7 +86,7 @@ CloudTest代码测试无异常 #### 版权和许可信息 -```java +```txt Copyright 2018 Gaurav Kumar Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java index 533443e3d6c866aec8225e49825c2383b458bb82..856f95b73b1e1680c9d6ac8b8bbf9a0d3c72c654 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/base/BaseVisualizer.java @@ -28,6 +28,8 @@ import ohos.agp.utils.Color; import ohos.app.Context; import ohos.media.audio.AudioWaver; +import java.util.Arrays; + /** * Base class for the visualizers *

@@ -195,7 +197,6 @@ public abstract class BaseVisualizer extends ComponentContainer { @Override public void onWaveData(byte[] mBytes, int i) { BaseVisualizer.this.mRawAudioBytes = mBytes; - // 刷新 getContext().getUITaskDispatcher().syncDispatch(new Runnable() { @Override diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java index 21e32d97d6f514820c39ee2a367576417ceac81f..ce844f9d69b8e74f1653e2a0349c4d49960d3db4 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlastVisualizer.java @@ -93,7 +93,7 @@ public class BlastVisualizer extends BaseVisualizer implements Component.DrawTas int t = 0; if (x < 1024) { t = ((byte) (-Math.abs(mRawAudioBytes[x]) + 128)) * (component.getHeight() / 4) / 128; - System.out.println("zyf--------------- "+component.getHeight()); + } float posX = (float) (getWidth() / 2 diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java index 444c79d6327335d398c57a14a30de6f0842d95c5..dc7c77d8a95310b8b717649e98ebf2655712a9ea 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/BlobVisualizer.java @@ -23,11 +23,12 @@ import com.gauravk.audiovisualizer.utils.BezierSpline; import ohos.agp.components.AttrSet; import ohos.agp.components.Component; -import ohos.agp.components.element.ShapeElement; import ohos.agp.render.Canvas; import ohos.agp.render.Path; import ohos.agp.utils.Point; import ohos.app.Context; +import ohos.media.audio.AudioManager; +import ohos.media.audio.AudioRemoteException; /** * Custom view to create blob visualizer @@ -45,9 +46,10 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask private Point[] mBezierPoints; private BezierSpline mBezierSpline; - + private boolean isFirstPlay = true; private float mAngleOffset; private float mChangeFactor; + private AudioManager audioManager; /** * 使用java代码实例化调用 @@ -79,11 +81,10 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask super(context, attrSet, styleName); } - - @Override protected void init() { addDrawTask(this::onDraw); + audioManager = new AudioManager(getContext()); mRadius = -1; nPoints = (int) (mDensity * BLOB_MAX_POINTS); if (nPoints < BLOB_MIN_POINTS) { @@ -128,7 +129,6 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask @Override public void onDraw(Component component, Canvas canvas) { - double angle = 0; // first time initialization if (mRadius == -1) { @@ -164,7 +164,6 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask // find the destination bezier point for a batch for (int i = 0; i < nPoints; i++, angle += mAngleOffset) { - Point mBezierPoint = mBezierPoints[i]; // 1=1 X=34 i=2 X=68 int x = (int) Math.ceil((i + 1) * (mRawAudioBytes.length / nPoints)); @@ -182,17 +181,17 @@ public class BlobVisualizer extends BaseVisualizer implements Component.DrawTask * Math.sin(Math.toRadians(angle))); // calculate the new x based on change - if (posX - mBezierPoint.getPointXToInt() > 0) { - mBezierPoint.modify(mBezierPoint.getPointX() + mChangeFactor, mBezierPoint.getPointY()); + if (posX - mBezierPoints[i].getPointX() > 0) { + mBezierPoints[i].modify(mBezierPoints[i].getPointX() + mChangeFactor, mBezierPoints[i].getPointY()); } else { - mBezierPoint.modify(mBezierPoint.getPointX() - mChangeFactor, mBezierPoint.getPointY()); + mBezierPoints[i].modify(mBezierPoints[i].getPointX() - mChangeFactor, mBezierPoints[i].getPointY()); } // calculate the new y based on change - if (posY - mBezierPoint.getPointY() > 0) { - mBezierPoint.modify(mBezierPoint.getPointX(), mBezierPoint.getPointY() + mChangeFactor); + if (posY - mBezierPoints[i].getPointY() > 0) { + mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY() + mChangeFactor); } else { - mBezierPoint.modify(mBezierPoint.getPointX(), mBezierPoint.getPointY() - mChangeFactor); + mBezierPoints[i].modify(mBezierPoints[i].getPointX(), mBezierPoints[i].getPointY() - mChangeFactor); } } diff --git a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java index 6fd2c2e00c58cceb01351d6e11426787a2c2f416..1115c6a0fd2ca241365adc62f2c91cd1967a4acb 100644 --- a/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java +++ b/audiovisualizer/src/main/java/com/gauravk/audiovisualizer/visualizer/CircleLineVisualizer.java @@ -182,4 +182,4 @@ public class CircleLineVisualizer extends BaseVisualizer implements Component.Dr public void setVisualizationEnabled(boolean b) { isVisualizationEnabled = b; } -} +} \ No newline at end of file diff --git a/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java b/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java index 561415292ff73d26c67c562fa0322895265af0c6..d8e6bfa6f7a9b153082b7d172bd2c6343a9d3f9e 100644 --- a/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java +++ b/entry/src/main/java/com/gauravk/audiovisualizersample/slice/MainAbilitySlice.java @@ -94,6 +94,7 @@ public class MainAbilitySlice extends AbilitySlice implements Component.ClickedL || verifySelfPermission(PermissionUtils.READ_MEDIA) != IBundleManager.PERMISSION_GRANTED || verifySelfPermission(PermissionUtils.WRITE_MEDIA) != IBundleManager.PERMISSION_GRANTED || verifySelfPermission(PermissionUtils.RECORD_AUDIO) != IBundleManager.PERMISSION_GRANTED + || verifySelfPermission(PermissionUtils.INTERNET) != IBundleManager.PERMISSION_GRANTED ) { if (canRequestPermission(PermissionUtils.MICROPHONE) || canRequestPermission(PermissionUtils.READ_MEDIA) diff --git a/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java b/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java index 292611d216844626f8f5974ffbaaba1b0a99066b..c7d58042226f686751f44c7f76e35810e9ac333b 100644 --- a/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java +++ b/entry/src/main/java/com/gauravk/audiovisualizersample/ui/MusicStreamAbility.java @@ -107,7 +107,9 @@ public class MusicStreamAbility extends Ability { e.printStackTrace(); } finally { try { - inputStream.close(); + if (inputStream != null) { + inputStream.close(); + } } catch (IOException e) { e.printStackTrace(); } diff --git a/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java b/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java index 9c9c091bda0d40f86578cb1a90ab89ef152f56f6..716b5217742c15d717e999b79003f492cd734342 100644 --- a/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java +++ b/entry/src/main/java/com/gauravk/audiovisualizersample/util/PermissionUtils.java @@ -38,7 +38,10 @@ public class PermissionUtils { * 重置权限 */ public static final String RECORD_AUDIO = "ohos.permission.RECORD_AUDIO"; - + /** + * 网络权限 + */ + public static final String INTERNET = "ohos.permission.INTERNET"; /** * 权限号 */ @@ -46,5 +49,5 @@ public class PermissionUtils { /** * 权限数组 */ - public static String[] permission = {MICROPHONE, READ_MEDIA, WRITE_MEDIA,RECORD_AUDIO}; + public static String[] permission = {MICROPHONE, READ_MEDIA, WRITE_MEDIA,RECORD_AUDIO, INTERNET}; } \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/activity_blob.xml b/entry/src/main/resources/base/layout/activity_blob.xml index 3d5f2364b958a314221f92b55d40b0c1d70eb415..4e521329a2df26af14faff33aa4960ad2c320de1 100644 --- a/entry/src/main/resources/base/layout/activity_blob.xml +++ b/entry/src/main/resources/base/layout/activity_blob.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file