iOS 语音循环播放设置

ops/2024/12/12 6:50:46/

本地文件、网络文件,区别就是URL创建方式

1、使用AVPlayerItem与AVPlayer(这个简单,只需要设置回调),而不是AVAudioPlayer(这个麻烦,需要设置代理、计时器等等)

2、设置AVPlayerItem的url,然后AVPlayer播放这个AVPlayerItem,在AVPlayer播放AVPlayerItem回调读取播放完毕后,重新设置进度,具体如图

NSString *document=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    NSString *audioPath = [document stringByAppendingPathComponent:@"voice"];
    NSString *toUrl =  [audioPath stringByAppendingPathComponent:self.filepatch];
    
    NSURL *musicURL = [NSURL fileURLWithPath:toUrl];
    NSError *error;
    self.player = [[AVPlayer alloc] initWithPlayerItem:nil];
    AVPlayerItem * songItem = [[AVPlayerItem alloc]initWithURL:musicURL];
    __weak typeof(songItem) weakSong =songItem;
    [self.player replaceCurrentItemWithPlayerItem:songItem];
    self.player.volume = 1.0;
    weakify(self)
    [_player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1, 1) queue:NULL usingBlock:^(CMTime time) {
                //进度 当前时间/总时间
        wSelf.progress.progress =CMTimeGetSeconds(wSelf.player.currentItem.currentTime)/CMTimeGetSeconds(wSelf.player.currentItem.duration);
        NSLog(@"per:%f-%f",CMTimeGetSeconds(wSelf.player.currentItem.currentTime),CMTimeGetSeconds(wSelf.player.currentItem.duration));
        if ( wSelf.progress.progress==1) {
            [weakSong seekToTime:kCMTimeZero];
            [wSelf.player play];
        }
        wSelf.label.text = [NSString stringWithFormat:@"%.2f秒|%.2f秒",CMTimeGetSeconds(wSelf.player.currentItem.currentTime),CMTimeGetSeconds(wSelf.player.currentItem.duration)];
        
    }];
    
    [self.player play];


http://www.ppmy.cn/ops/141183.html

相关文章

【青牛科技】D2068是一块单卡收录机用前置放大电路,内含卡拉0K混合放大电路,内置源选择功能开关。可以用于收录机等产品中

概述: D2068是一块单卡收录机用前置放大电路,内含卡拉0K混合放大电路,内置源选择功能开关。 主要特点: ● 双通道 ● 内置EQ放大器、REC放大器、监控放大器、MC(混频)放大器 ● MC放大器同时适用于内部MIC和混频MIC ● 内置源选…

力扣-图论-8【算法学习day.58】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

ansible学习笔记之02command模块与shell模块

目录 1、概述 2、模块介绍 2.1 command模块 2.2 shell模块 2.3 小结 3、实验 3.1 测试ls命令 3.2 测试环境变量 3.3 测试操作符">" 1、概述 本文介绍ansible的command模块与shell模块,并通过实验比对两个模块的异同。 2、模块介绍 2.1…

golang——Gin框架及路由介绍

一. 框架介绍 Gin是一个轻量级的Go语言Web框架,它具有高性能和简洁的设计。由于其快速的路由匹配和处理性能,Gin成为Go语言中最受欢迎的Web框架之一。 特点: 快速和轻量:Gin框架的设计注重性能和效率,采用了一些优化…

http网络服务-swift-Alamofire

依赖库的github地址 http网络库 Alamofire 解json SwiftyJSON Swift Package Manager集成依赖库 https://github.com/Alamofire/Alamofire.githttps://github.com/emqx/CocoaMQTT.git使用 import Alamofire import SwiftyJSONvar http "http://xxxxxxxx" var p…

信息系统项目管理-里程碑范例

序号里程碑名称计划完成时间实际完成时间是否完成备注1项目计划确定2023.8.302023.8.25完成2需求说明书完成2023.10.302023.10.29完成3软件详细设计方案完成2023.11.132023.11.10完成4硬件详细设计方案完成2023.12.102023.12.12完成5提交系统测试报告2024.4.302024.4.28完成6提…

sql server 事务日志 大小

事务日志物理体系结构 数据库事务日志映射在一个或多个物理文件上。 从概念上讲,日志文件是一系列日志记录。 从物理上讲,日志记录序列被有效地存储在实现事务日志的物理文件集中。 每个数据库必须至少有一个日志文件。 虚拟日志文件 (VLF) SQL Serve…

XMOS将在CES 2025上展出多款由边缘AI驱动的创新音效、音频、识别和处理解决方案

全球智能物联网技术领导者暨匠心独到的半导体科技企业XMOS宣布:该公司将再次参加2025年国际消费电子展(CES 2025),并将在本届CES上展出一系列由人工智能(AI)驱动的全新空间音效、语音捕获与降噪、音视频多模…