ionic中的在线mp3播放功能

ionic4之如何让你的app可以播放mp3文件? 目录 功能展示 从头道来 原生js实现播放音乐 js-ts修改之路 收获 功能展示 当点击绿色框播放音乐,当再次点击可以暂停,与此同时喇叭跟着动。当然喇叭动的时候也是有声音的,只有贫僧能听到。 图片很丑别怪我,我只是个小Demo。 从头道来 小僧和同伴今天接到了一个技术研究。那就是如何在ionic上播放音频。很多人在学习js的时候... 阅读详情

前言

需要相关说明的,请参考前文

效果预览

这里写图片描述

github演示地址

Audio模块中的html

关键代码:

<ion-view class="audio" cache-view="false">
    <ion-header-bar class="bar-stable">
        <button ng-click="back()">
            <i class="ion-arrow-left-c"></i> Back
        </button>
        <h1 class="title">音频播放</h1>
    </ion-header-bar>
    <ion-content scroll="false" class="no-scroll-bar" overflow-scroll="true" data-tap-disable="true" 
        scrollbar-y="false" has-bouncing="false">
        <!-- 动画区域 -->
        <div class="animate-zone center-center">
            <div class="animate-zone-inner" ng-class="{cur:renderData.playAnimation}">
                <span class="center-center">music</span>
            </div>
        </div>
    </ion-content>
    <div class="audio-bottom">
        <!-- audio元素 -->
        <mp3-container x-source="renderData.source"></mp3-container>
    </div>
</ion-view>

Audio模块中的播放动画

css3代码作为参考:

.animate-zone-inner {
    position: absolute;
    top: 12px;
    left: 12px;
    right: 12px;
    bottom: 12px;
    border-radius: 50%;
    font-size: 30px;
    background-color: #fdfdfd;
    color: #808080;
    animation: audioRotate 5s linear infinite;
    -webkit-animation: audioRotate 5s linear infinite;
    animation-play-state: paused;
    -webkit-animation-play-state: paused;
}

.animate-zone-inner.cur {
    animation-play-state: running;
    -webkit-animation-play-state: running;
}

@keyframes audioRotate {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}

@-webkit-keyframes audioRotate {
    from {
        -webkit-transform: rotate(0deg);
    }
    to {
        -webkit-transform: rotate(360deg);
    }
}

Audio模块中的controller

关键代码:

.controller('Mp3Ctrl', [
        '$scope',
        '$sce',
        'appUtils',
        function($scope, $sce, appUtils) {
            $scope.back = appUtils.back;
            var renderData = $scope.renderData = {};
            renderData.source = $sce.trustAsResourceUrl('audio/music.mp3');

            // 接收广播事件
            $scope.$on('audio:playState', function(event, data) {
                renderData.playAnimation = data;
            });
        }
    ]);

Audio模块中的指令模板

关键代码:

<div class="mp3-wrap">
    <audio preload="metadata" ng-src="{{source}}"></audio>
    <!-- 音频控制区 -->
    <div class="audio-controll-bar">
        <!-- 播放,暂停 -->
        <div class="play-btn center-center" ng-class="{cur:audioData.playing}" on-tap="play()">
            <span class="playing-btn"></span>
        </div>

        <div class="audio-time clearfix">
            <span class="now-time pull-left">{{audioData.current ? audioData.current : '00:00:00'}}</span>
            <span class="total-time pull-right">{{audioData.duration ? audioData.duration : '00:00:00'}}</span>
        </div>
        <div class="audio-progress-zone range">
            <div class="audio-range-track center-center"></div>
            <input class="audio-range-input center-center" type="range" value="0" min="0"
                   max="{{audioData.durationOrigin}}" ng-model="audioData.currentOrigin" ng-change="seeking()">
        </div>
    </div>
</div>

Audio模块中的指令逻辑

关键代码:

.directive('mp3Container', function($timeout, appUtils) {
            return {
                restrict: 'EA',
                templateUrl: 'components/directives/html/mp3.html',
                scope: {
                    source: '='
                },
                link: function(scope, element) {
                    // 初始化变量和数据成员
                    var audio = element.find('audio')[0]; // 获取视频元素
                    var audioData = scope.audioData = {};
                    audioData.playing = false; // 控制是否播放中
                    audioData.currentOrigin = 0; // 当前播放进度

                    /* 播放与暂停 */
                    scope.play = function() {
                        if (!audioData.playing) {
                            audio.autoplay = audioData.playing = true;
                            audio.play();
                            scope.$emit('audio:playState', true); // 发送广播
                        } else {
                            audio.autoplay = audioData.playing = false;
                            audio.pause();
                            scope.$emit('audio:playState', false); // 发送广播
                        }
                    };

                    // 滑动功能实现
                    scope.seeking = function() {
                        audio.currentTime = audioData.currentOrigin;
                    };

                    // 事件监听: loadstart
                    ionic.EventController.on('loadstart', function() {}, audio);

                    // 事件监听: 元数据加载完成后 此时获取时长
                    ionic.EventController.on('loadedmetadata', function() {
                        appUtils.checkToGetMediaDuration(scope, audio, audioData);
                        this.autoplay = audioData.playing = false; // 为了兼容
                        scope.$apply();
                    }, audio);

                    // 事件监听: durationchange
                    ionic.EventController.on('durationchange', function() {
                        appUtils.checkToGetMediaDuration(scope, audio, audioData);
                        this.autoplay = true; // 为了兼容
                        scope.$apply();
                    }, audio);

                    // 事件监听: onprogress 正在下载中
                    ionic.EventController.on('progress', function() {
                        appUtils.checkToGetMediaDuration(scope, audio, audioData);
                        scope.$apply();
                    }, audio);

                    // 事件监听: waiting
                    ionic.EventController.on('waiting', function() {
                        this.autoplay = audioData.playing = false;
                        scope.$apply();
                    }, audio);

                    // 事件监听: seeking
                    ionic.EventController.on('seeking', function() {
                        audioData.playing = this.autoplay = false; // 为了兼容 = true ; 无法继续播放时loading ; seeking 保持播放状态
                        scope.$emit('audio:playState', false); // 发送广播
                        $timeout(function() {
                            audio.play(); // 强制播放
                            scope.$emit('audio:playState', true); // 发送广播
                        });
                        scope.$apply();
                    }, audio);

                    // 事件监听: 在可播放时 只会触发一次 , 播放按钮状态 : 可播放
                    ionic.EventController.on('playing', function() {
                        appUtils.checkToGetMediaDuration(scope, audio, audioData);
                        this.autoplay = audioData.playing = true; // 为了兼容 此处 loading 应为false,但安卓低端机器存在问题
                        scope.$emit('audio:playState', true); // 发送广播
                        scope.$apply();
                    }, audio);

                    // 事件监听: 监听暂停事件
                    ionic.EventController.on('pause', function() {
                        audioData.playing = false;
                        scope.$apply();
                    }, audio);

                    // 事件监听: 音频播放位置发生改变时触发
                    ionic.EventController.on('timeupdate', function() {
                        appUtils.checkToGetMediaDuration(scope, audio, audioData);
                        audioData.currentOrigin = audio.currentTime; // 获取视频当前时间
                        audioData.current = appUtils.handlePlayingTime(audio.currentTime); // 获取格式转换之后的视频当前时间
                        scope.$apply();
                    }, audio);

                    // 事件监听: 视频可以流畅播放到结束
                    ionic.EventController.on('canplaythrough', function() {}, audio);

                    // 事件监听: 视频可以流畅播放
                    ionic.EventController.on('canplay', function() {}, audio);

                    // 事件监听: 播放完成
                    ionic.EventController.on('ended', function() {
                        this.pause();
                        scope.$emit('audio:playState', false); // 发送广播
                        scope.$apply();
                    }, audio);
                }
            };
        });
基于CORE核心板与音频模块的嵌入式音乐播放与处理实战指南 数字音频处理是嵌入式系统开发中的重要领域,其核心原理在于将模拟音频信号通过模数转换(ADC)和数模转换(DAC)进行数字化处理与传输。在嵌入式场景中,I2S(Inter-IC Sound)总线是实现高质量数字音频数据传输的关键技术标准,它通过分离的数据、时钟和声道选择线,确保了音频流的同步与完整性。这项技术的工程价值在于,它使得资源受限的微控制器也能处理高品质音频,极大地拓展了嵌入式设备在音频应用中的可能性。典型的应用场景包括智能音箱、便携式音乐播放器、蓝牙音频接收器以及各类需要语音交互的物联网终端。本文聚 阅读详情

相关推荐

构建跨平台音乐播放器:Spotify、Apple Music和Sound Cloud的Ionic Angular项目

本文还有配套的精品资源,点击获取 简介:薄雾是一款基于Ionic Angular框架开发的音乐播放器应用,支持Spotify、Apple Music和Sound Cloud等流行音乐平台。该应用通过Angular的力量和Ionic的跨平台特性,提供了一个统一的音乐体验,允许用户浏览、搜索和播放不同服务的音乐内容。本项目强调TypeScript的使用,提高了代码的可维护性和可...

weixin_34064233的博客 978

ionic 实现音乐后台播放

ionic 实现音乐后台播放要实现ionic 音乐后台播放要完成两个步骤。 在xcode中的info.plist开启Required background modes 数值设置为 数组 App plays audio or streams audio/video using AirPlay 修改AppDelegate.m文件为如下: #import "AppDelegate.h" #import "

木雅桑诺的技术备忘录 1568

ionic-audio:适用于Ionic 3和Angular 4的音频播放器。可使用Cordova Media插件处理HTML 5音频或本机音频

离子音频 此仓库适用于Ionic 1,已不再维护。 对于Ionic 3 / Angular 4版本,请访问: :

Ionic 文本转音频播放

Ionic 文本转音频播放 angular 首先安装插件 先贴一下官网,他说的超级简单,有些细节没说 https://ionicframework.com/docs/native/text-to-speech 先安装一个插件 Text To Speech ionic cordova plugin add cordova-plugin-tts npm install @ionic-native/te...

“跟他人学,和自己比” 834

ionic-audio-player:使用Ionic 4+ Angular 8+创建的简单音频播放器(于2019年8月更新)

Ionic音频播放器(已在2019年更新了Ionic v4和Angular v8) 这是一个使用Ionic 4+ / Angular 8+创建的简单音频播放器(于2019年更新) 它具有播放/暂停按钮,后退/前进按钮以及显示音频文件当前位置的进度条。 它还支持使用进度条设置任意位置。 该应用程序将从互联网上自动下载演讲“我有一个梦想” ,并准备播放。 您必须具有实际的Android或iOS设备才能使用此应用程序。 要查看代码,请随时克隆存储库并浏览整个过程。 我认为这非常简单。 要试用,请使用以下命令在实际设备上安装该应用程序: 对于Android设备:确保您的手机与Mac / PC之间建立有线连接,然后在终端中运行ionic cordova run android --prod 。 对于iOS设备:确保您拥有Mac,然后运行ionic cordova prepare ios

【阿里云大模型高级工程师ACP习题集】2.1 用大模型构建新人答疑机器人

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2610

ionic中使用video标签全屏播放视频

ionic 全屏播放视频 ionic 中用 html5 的 video 标签播放视频,但是全屏的时候会黑屏。现在通过旋转手机屏幕和样式调整的方式,来模拟全屏视频播放。 源码地址 扫码下载App 效果演示 依赖 安装 Screen Orientation 插件 ionic cordova plugin add cordova-plugin-screen-orientation ...

weixin_33834137的博客 1855

Tessent IJTAG ICL:从规范到实践的硬件描述语言指南

本文深入解析Tessent IJTAG ICL语言在硬件测试中的应用,从规范到实践提供全面指南。通过模块化设计、网络提取与编辑等实战技巧,帮助工程师高效构建标准化测试网络,显著提升芯片测试效率与覆盖率。特别分享TDR/SIB/TAP的ICL实现方法及调试策略,适用于SoC、车载芯片等复杂场景。

weixin_33606346的博客 306

ionic使用cordovaMedia、cordovaFile和cordovaFileTransfer播放在线音乐

gzgchzc博客最新更新地址:http://blog.gzvtc.cc/ 首先安装cordovaNativeAudio和cordovaFileTransfer插件 cordova plugin add cordova-plugin-media cordova plugin add cordova-plugin-file cordova plugin add cordova-plugin-fi

gzgchzc的博客 3768

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题!

你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。

smart_boy__的博客 2989

从 SAP ABAP 到 S/4HANA,SAML 2.0 单点登录到底是怎么跑起来的

在很多 SAP 项目里,SSO 不是一个锦上添花的功能,而是系统能不能顺利上线的基本门槛。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1051

Ionic-Native 中media插件的使用,录音功能的实现

目前Ionic官方提供了很多native插件,方便调用手机等设备的原生接口。最近在研究在ionic项目中加入录音功能,完成简单录音功能后,并做下笔记,我用到的是Ionic native中的media插件和file插件。 简单介绍下这两个插件:(官方介绍:media,file) media插件:实例化一个音频对象,需要在手机目录中创建一个音频类型文件来存储数据,可以实现对该音频进行录音,

Neokekeke的博客 5377

WPF+MVVM案例实战(二十三)- 阴影效果详解

通过附加属性实现阴影效果,通过改变不同的阴影属性值达到不同阴影效果

lingshuangcanxue 561

Ionic-Audio 项目常见问题解决方案

Ionic-Audio 项目常见问题解决方案 一、项目基础介绍 Ionic-Audio 是一个为 Ionic 3 和 Angular 4 开发的音频播放器。它支持 HTML 5 音频或使用 Cordova Media 插件进行原生音频播放。该项目主要使用的编程语言包括: CSS JavaScript HTML 二、新手常见问题及解决步骤 问题一:如何集成Ionic-Audio到Ionic项目中...

gitblog_00873的博客 937

游戏“中台”的故事——架构演进、团队协同与产品创新的深度剖析

什么是中台?在游戏行业里,中台并不是把所有技术都归口管理、统一“圈养”。更不是简单的工具集合。它代表的,是一种“模块化底座”——把业务的通用能力、基础支撑和数据结合,变成可复用、可扩展、可创新的技术体系。让“前台”专注于创新玩法、极致体验;让“后台”稳健保障数据、安全、性能;让“中台”统合各种资源、流程、工具,形成平台型生产力。游戏中台是团队协同、技术创新、业务增长并行的产物。它让开发从重复劳动解脱,带着创新冲锋;让运营靠数据说话,精准制胜;让产品实现高效迭代,生态爆发。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1950

TMC2240 芯片数据手册解读|第十三篇 StallGuard4负载测量(StallGuard4 Load Measurement)

摘要: TMC2240的StallGuard4技术专为StealthChop2静音模式设计,通过SG4_RESULT实时测量电机负载,实现堵转检测、无传感器回零和CoolStep节能。其核心原理基于负载角检测,通过SG4_THRS阈值调节灵敏度,并支持四通道独立测量(SG4_IND_0~3)优化相位平衡。独特功能包括无抖动模式切换补偿(sg_angle_offset),解决StealthChop2与SpreadCycle切换时的电流突变问题。调优时需结合SG4_THRS设定与DIAG验证,确保堵转精准触发。

BackCatK Chen的博客 308

Ionic - 使用原生组件开发提示震动+音效

官网震动插件地址: https://ionicframework.com/docs/native/vibration/ 安装震动插件 ionic cordova plugin add cordova-plugin-vibration npm install --save @ionic-native/vibration  app.module.ts import { Vibratio...

LucioCN 2066

paddle 43 用onnxruntime实现ppyoloe模型的部署(含python和c++版本)

PP-YOLOE+是PP-YOLOE模型的升级版,PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比。paddle官方只给出了基于paddle框架的部署案例,为了更好的部署,为此实现将paddle模型转换为onnx模型,然后在python下实现onnxruntime部署。后续会补充c++ onnxruntime部署

a486259的博客 1917

ionic3本地通知加震动和原生音频

先附上官网本地通知地址:https://ionicframework.com/docs/native/local-notifications/ 再ionic3上面的本地推送有些内容不能使用,不如说官网提供的声音,查阅了一些资料也没找到原因 第一步:安装本地通知插件 ionic cordova plugin add cordova-plugin-local-notification npm ...

qq_38860424的博客 3279

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Ionic – Playing a media file with ngCordova’s $cordovaMedia

http://atomx.io/2015/01/ionic-playing-a-media-file-with-ngcordovas-cordovamedia/ f you’ve read any of our previous posts, you’ll already have an understanding of how to download a file to

方全的专栏 709

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ionic添加cordova插件-NativeAudio

gzgchzc博客最新更新地址:http://blog.gzvtc.cc/ NativeAudio Cordova / PhoneGap 3.5 +本地音频播放,针对HTML5游戏和音频应用所需的最小延迟,复调和并发。 cordova plugin add cordova-plugin-nativeaudio Examples module.controller('MyCtrl',

gzgchzc的博客 2408

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

iOS音乐后台播放及锁屏信息显示

实现音乐的后台播放。以及播放时,能够控制其暂停,下一首等操作,以及锁屏图片歌曲名等的显示 此实例须要真机调试。效果图例如以下: project下载:githubproject下载 实现步骤: 1、首先改动info.plist 2、其次引入两个须要的框架 #import &lt;AVFoundation/AVFoundation.h&gt; #...

weixin_34117211的博客 238

项目总结(关于audio音频标签的使用和在angular4.0中使用过程中的一些坑)

马上又到月底了,又一波新的需求又要来临了。所以趁此空隙把之前这一个月的心得和遇到的问题写一下 因为项目中有一个资讯转语音的功能,也就是把一篇文章转化为语音播放。至于怎么转化,这个是由后台这边转化好之后,发送了一个url音频地址给前端,由前端直接加载到audio标签的src属性上。 audio标签的使用这个可以直接参考w3c的文档 例如: &amp;amp;amp;amp;amp;lt;audio src=&amp;amp;amp;amp;quot;/i/horse.og...

时清云的博客 4415

android 自定义推送声音,android - 离子推送通知自定义声音无法在Android Oreo及更高版本上播放 - 堆栈内存溢出...

根据推送插件的Ionic文档,我为Android O及更高版本创建了Channel。 参考链接:我实际上想在收到推送通知时播放自定义声音,并且该声音已经在Android 7(牛轧糖)及以下版本上运行,但是我在Android Oreo及更高版本上遇到问题,正在接收推送通知,但没有播放自定义声音。 我引用了许多链接来解决此问题,但没有任何帮助。参考链接:在大多数建议的解决方案中,他们建议在crea...

weixin_34791250的博客 209
上一篇: ionic中的在线视频播放功能
下一篇: 考研英语 - word-list-26
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值