小工具      在线工具  汉语词典  css  js  c++  java

头文件h

#import <Foundation/Foundation.h>

/*
 *   关注路线语音播放类,支持MP3文件的播放
 */

@interface LJVoiceManager : NSObject

- (instancetype)initLJVoiceManager;

//播放
- (void)playAudio;

//暂停
- (void)pauseAudio;

//停止
- (void)stopAudio;

@end

源文件M

#import "LJVoiceManager.h"

@interface LJVoiceManager ()<AVAudioPlayerDelegate>

//必须全局声明,否则没声音
@property (nonatomic, strong)AVAudioPlayer *avAudioPlayer;

@end

@implementation LJVoiceManager

#pragma mark -- dealloc
- (void)dealloc
{
    
}

- (instancetype)init
{
    self = [super init];
    if (self)
    {
        NSAssert(NO, @"请调用initLJVoiceManager方法");
    }
    return self;
}

#pragma mark -- 初始化
- (instancetype)initLJVoiceManager
{
    self = [super init];
    if (self)
    {
        [self configPlayAudio];
    }
    return self;
}

- (void)configPlayAudio
{
    //开启后台播放
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    
    //从budle路径下读取音频文件 lj_attention_voice.aac
    NSString *voicePathString = [[NSBundle mainBundle] pathForResource:@"lj_attention_voice" ofType:@"mp3"];
    
    if (voicePathString.length > 0)
    {
        //把音频文件转换成url格式
        NSURL *voiceUrl = [NSURL fileURLWithPath:voicePathString];
        //初始化音频类 并且添加播放文件
        self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:voiceUrl error:nil];
        //设置代理
        self.avAudioPlayer.delegate = self;
        
        //设置初始音量大小
        self.avAudioPlayer.volume = 1;//1:声音最大
        
        //设置音乐播放次数  -1为一直循环
        //self.avAudioPlayer.numberOfLoops = -1;
        
        //预播放
        //[self.avAudioPlayer prepareToPlay];
    }
}

#pragma mark -- 播放设置
//播放
- (void)playAudio
{
    //1. 有时候会出现一直没声音的情况,这里可以打开下configPlayAudio,重新加载一遍资源文件
//    [self configPlayAudio];
    
    //2. 一般情况下,都是有声音的,就按照如下的步骤走既可以
    //如果在播放,先停止,再播放
    if ([self.avAudioPlayer isPlaying])
    {
        [self.avAudioPlayer stop];
    }
    
    if ([self.avAudioPlayer prepareToPlay])
    {
         [self.avAudioPlayer play];
    }
}

//暂停
- (void)pauseAudio
{
    [self.avAudioPlayer pause];
}

//停止
- (void)stopAudio
{
    self.avAudioPlayer.currentTime = 0;  //当前播放时间设置为0
    [self.avAudioPlayer stop];
}

#pragma mark -- AVAudioPlayerDelegate
//播放完成时调用的方法
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    CHDebugLog(@"audioPlayerDidFinishPlaying---%hhd",flag);
    
    //如果播放完毕,则停止播放器
    if (flag)
    {
        if ([self.avAudioPlayer isPlaying])
        {
            [self.avAudioPlayer stop];
        }
    }
}

- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error
{
    CHDebugLog(@"audioPlayerDidFinishPlaying---%@",error);
    
    if ([self.avAudioPlayer isPlaying])
    {   //如果发生错误,也停止播放
        [self.avAudioPlayer stop];
    }
}

//当程序被应用外部打断之后,重新回到应用程序的时候触发。在这里当回到此应用程序的时候,继续播放音乐。
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player
{
    [self.avAudioPlayer play];
}

@end


. . .

相关推荐

额外说明

如何让自己的SpringBoot程序在Windows环境下打包运行?

文章目录 一、前言 二、流程介绍 三、程序打包 四、程序运行 五、注意点 六、总结 一、前言 大家好,我是卷心菜,大二学生一枚。 博主已经在自己的springboot专栏:springboot学习记录,更新了九篇文章,分别涉及:配置文件的初级和高级使用,

额外说明

python 多线程 批量请求 下载视频

import requests import os import re import threading root = "E://movie//" # 根目录 kv = {'user-agent':'Moz

额外说明

MySQL事务

前言 大家在生活中肯定使用过微信或者支付宝转账吧,那么大家有没有想过一个问题呢?就是如果你向商家转账了,但是突然微信或者支付宝服务器出现问题了,商家并没有收到转账该怎么办呢? 今天我将来带大家了解解决这一问题的方法:MySQL事务--- 什么是MySQL

额外说明

产品经理 | 智能视频监控系统软件设计(上)

前言:Hello大家好,我是小哥谈。随着人工智能技术的发展,智能视频监控系统的应用变得越来越广泛,其原理是利用摄像机采集视频信号,并通过相关的AI模型算法实时分析视频内容,提取出有用信息,如人脸、车牌号码、移动物体等,并进行识别及特征提取,最终形成监控报

额外说明

那些面试官口中常常提到b树(MySQL索引底层数据结构)

各种常见树 1.树的基本概念 2.二叉树 3.b树 4.b+树 5.b树与b+树的对比 5.MySQL索引底层数据结构 1.树的基本概念 树的特点:有一个树根,树根上又有很多枝干,枝干上又有很多树枝,树枝上又有很多叶子 树最为一种数据结构也有相似特点 树

额外说明

docker-compose搭建kafka集群

环境准备 服务器提前安装docker以及docker-compose环境 编写docker-compose.yml version: '3' services: zoo1: image: zookeeper:3.4.14 restar

额外说明

Python网络编程自学:如何使用Socket

应用程序通常通过Socket向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 文件:server.py import socket # HOST是电脑的IP地址,你可以在CMD中通过ipconfig指令找到。 HOST = '

额外说明

【第14篇】TextCNN

摘要 我们报告了在预训练词向量之上训练的卷积神经网络 (CNN) 的一系列实验,用于句子级分类任务。 我们表明,具有很少超参数调整和静态向量的简单 CNN 在多个基准测试中取得了出色的结果。 通过微调学习特定于任务的向量可进一步提高性能。 我们还建议对架

额外说明

解决npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)

文章目录 1. 复现问题 2. 分析问题 3. 解决问题 1. 复现问题 今天准备克隆Redis桌面(GUI)管理客户端,故按照官方文档给出的指令运行时,如下图所示: 但在执行指令npm install --platform=win32却报出如下图错误:

额外说明

wordpress表单调用_如何在WordPress中创建文件上传表单

WordPress 表单调用 您是否需要让网站访问者在您的联系表单上上传文件? 您是否需要让网站访问者在您的联系表单上上传文件? 也许您正在招聘员工并想要收集简历,或者您正在举办另一份申请表或摄影比赛,需要申请人附加文件。 也许您正在招聘员工并想要收集简

ads via 小工具