iPhone/iPad开发札记 2012/03/10 音频:录音与混音

iOS学习笔记2-使用Audio Queues录音,取得实时PCM数据 提供了利用Audio Queues实时录音得到PCM音频数据的代码以及分析,希望能帮到大家 阅读详情


1. reading my code for recording 


* MyInputBufferHandler 

Q: 这里有Enqueue Buffer动作,这样,这个buffer有机会重新fill

   A: YES!. callback中总会有enqueue动作的,无论recording还是playback. 


Q: 参数含义

voidAQRecorder::MyInputBufferHandler(

void *inUserData,

AudioQueueRefinAQ,

AudioQueueBufferRefinBuffer,

constAudioTimeStamp *inStartTime,

UInt32 inNumPackets,

constAudioStreamPacketDescription* inPacketDesc)

关于inNumPackets,在文档中的描述如下:

inNumberPacketDescriptions is the number of packet descriptions in the inPacketDescs parameter. If you are recording to a VBR (variable bitrate) format, the audio queue supplies a value for this parameter to your callback, which in turn passes it on to the AudioFileWritePackets function. CBR (constant bitrate) formats don’t use packet descriptions. For a CBR recording, the audio queue sets this and the inPacketDescs parameter to NULL.


所以,似乎在这里这个值应该为NULL,但实际并非如此,why ?



* InitNewPlaybackQueue

Q: CFRunLoopGet?Current()等东东到底在干嘛? 似乎和thread的runloop有关 ? 2012/03/12


XThrowIfError(AudioQueueNewOutput(&mDataFormat,AQPlayer::AQBufferCallback,this, 

 CFRunLoopGetCurrent(),kCFRunLoopCommonModes, 0, &mQueue), "AudioQueueNew failed");


2. reading " Audio Queue Service Programming Guide " + "Audio Queue Service Reference" 


* multi queues

Audio Queue Services also supports scheduled playback and synchronization of multiple audio queues and synchronization of audio with video.

Q: could be used to do "mixing" ?


Q: 是否在我们这种类似voip的应用中,不应该使用Audio Queue Service,而应该使用Audio Unit ???


* callback invoking 

During recording or playback, an audio queue callback is invoked repeatedly by the audio queue that owns it. The time between calls depends on the capacity of the audio queue’s buffers and will typically range from half a secondto several seconds.

                                                           ^ too slow ???


enqueue buffer: always done by call back function.


* call back的作用

# 对于recording,

负责将Audio Queue从input device采集的放在buffer中的audio data发送给应用程序,如写入disk或放向network

将buffer入queue,等待Audio Queue再次fill

注:call back拿到的buffer是有audio data的,等待后续处理,如发送到network


# playback

负责将向audio buffer中fill audio data

将audio buffer推入audio queue,等待playback

注:call back拿到的buffer是空,等待被fill


3. reading "Audio Unit Hosting Guide for iOS"

Audio Units Provide Fast, Modular Audio Processing

The two greatest advantages of using audio units directly are:

  • Excellent responsiveness. Because you have access to a realtime priority thread in an audio unit render callback function, your audio code is as close as possible to the metal. Synthetic musical instruments and realtime simultaneous voice I/O benefit the most from using audio units directly.

  • Dynamic reconfiguration. The audio processing graph API, built around the AUGraph opaque type, lets you dynamically assemble, reconfigure, and rearrange complex audio processing chains in a thread-safe manner, all while processing audio. This is the only audio API in iOS offering this capability

Q: Does this mean for VOIP application, we can only use Audio Unit rather than Audio Queue Service ?




iOS 实时录音和播放 需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之后,实时的展示视频数据(手机可以接听,挂断,手机接听之后,室内机不展示视频,只是进行转发。) 简单点说就是手机客户端需要做一个类似于直播平台的软件,可以实时的展示视频,实时的播放接收到的声音数据 阅读详情

相关推荐

iOS音频混合技术

项目中需要将原视频的音频和视频添加新的音频进行重新合成,最终生成一个视频 目前采用方案是先将两个音频混合成一个音频后再跟视频合成,音频混合功能代码如下 +(void)audioMixture:(AVAsset *)firstAsset secondAsset:(AVAsset *)secondAsset outputPath:(NSString *)outputPath withResult:...

shaokang5532的博客 1163

ios多音频混合

ios上音频文件合成有多种方法,一是使用AVAssetExportSession结合AVMutableComposition,二是使用AVAssetReader和AVAssetWriter. 三是转换成pcm数据后处理pcm数据合成。 方法一和方法二在处理速度上相对来说要慢。一般3分半左右音频需要30s左右,特别是合成不同采样率的音频,速度比较慢。下文提供本人自己写的一个类,采用第三种方法合成音

一样的世界,不一样的时间 1万+

WebRTC系列 -- iOS ADM音频数据流处理流程及源码阅读记录

( Voice Activity Detection),以及完成全部的处理后测量讲话的音频水平;中获取数据,这个方法会把每个音频源的数据添加到一个数组中,然后会排序。由于编码任务将在内部发布到每个流,因此需要复制(原注释翻译);这一步之后,webrtc会判断下该帧数据需不需要。在ADM中音频录制数据从平台采集后最终都会在。,移动端主要实现两个接口,录制数据传递接口。,然后就是发送数据;

HOSTEN的博客 1939

iOS9程序设计(顶级iOS开发视频课程-Objective-C版)

iOS9程序设计(顶级iOS开发视频课程-Objective-C版)本课程主要内容包括:iOS9的基础知识常用控件屏幕适配多窗口导航表视图GPS地图网络数据存储、音频视频本地化等内容,并提供了大量的源代码供学员练习。

在iOS中实现背景音乐及声效的高级播放技术

本文还有配套的精品资源,点击获取 简介:在iOS开发中,通过AVFoundation框架,开发者可以使用AVAudioPlayer播放背景音乐,以及利用AVAudioEngine处理复杂的音频混合和声效。本源码提供了一种可以独立控制背景音乐和声效音量的解决方案,旨在提升用户体验,并详细讲解了AVAudioPlayer、AVAudioEngine、音频节点、编程接口、线程管理...

weixin_26850469的博客 1830

数据中心——Vxlan基本概念1

东西流量指的就是横向流量-------例如:服务器与服务器之间交换流量南北流量指的就是纵向流量-------例如:客户端和服务器之间的流量以下主要是讲解业务平面的网络架构(一般业务平面就需要用到专用的数据中心交换机)

m0_49864110的博客 1万+

iPhone/iPad开发札记 2012/03/29

1. 声音问题处理 * 搞定混音 从12:00 - 13:30,一直没有声音。 其间,对bits-per-packet进行了调整,变成8*4=32,仍然没有声音。 Q:是否音量开关为0了? Q:inBusNumber = 0 or 1 ??? 另,录音的声音有明显断续,估计和采集时使用的bit/sample与发送端要求的的不符有关,或者sendVideoData

printf1998的专栏 446

opencv实践项目-图片拼接之缝合线算法

opencv 图片缝合线算法

wyw0000的博客 2624

webrtc混音混流

webRTC混音流程 https://blog.youkuaiyun.com/u013692429/article/details/100778297 原因:由于目前开始调研混音算法,故在此分析一下webRTC的实现流程,其他实现流程在另外一个博客有记录. 概况:目前调研的混音算法在多路混音时只有webRtc的原理符合基本流程。webRtc充分考虑了人耳在同一时间内最多只能感知3路音频的特性,故在多路混音时选择三路能力值最大的作为主要混音,其余参与者判断是否上一帧参与过混音,如果参与过则当前帧进行淡出特性,.

sun007700的专栏 1618

从零到一:Ubuntu22.04下VSCode与中文输入法的深度整合指南

本文详细介绍了在Ubuntu22.04系统中如何深度整合VSCode与中文输入法,包括环境准备、安装方案对比、输入法配置及常见问题解决方案。通过fcitx框架优化中文输入体验,提供从基础设置到高级调试的全方位指南,帮助开发者提升在Linux环境下的开发效率。

weixin_29158047的博客 477

【OpenClaw从入门到精通】第03篇:吃透Gateway/Skills/ClawHub核心概念(2026实测+避坑)

本文针对OpenClaw新手易混淆的核心概念痛点,以通俗类比+实操演示拆解OpenClaw核心、Gateway、Skills、ClawHub四大组件。通过“数字员工团队”类比明确各组件定位:OpenClaw核心是“老板”(调度中心)、Gateway是“前台+后勤”(后台进程)、Skills是“专业员工”(功能插件)、ClawHub是“人才市场”(技能商店)。补充版本更名史、技能加载优先级、ClawHub与GitHub区别等关键细节,结合“AI融资新闻查询并邮件推送”虚拟案例演示组件协同流程,梳理5个高频认知

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 5037

音频混合的方法

音频混音算法的实现 1、线性叠加后求平均 优点:不会产生溢出,噪音较小; 缺点:衰减过大,影响通话质量; [cpp] view plaincopy short  remix(short buffer1,short buffer2)  {      int value = buffer1 + buffer2;      return (short)(

xuheazx的专栏 5869

Pyhon在振动信号处理中的高级应用(一):振动信号特征(时域、频域)提取

文章目录一、概述二、算法原理2.1 时域统计特征三、python代码实现 一、概述 二、算法原理   这里我们借鉴西安交通大学机械学院雷教授的论文《Fault diagnosis of rotating machinery based on multiple ANFIS combination with GAs》相关研究成果。雷教授在论文中共列举了4类共24种振动信号的时域和频域特征。 2.1 时域统计特征 p1=∑n=1Nx(n)NP2=∑n=1N(x(n)−p1)2N−1p3=(∑n=1N∣x(n)∣N

白银时代的博客 1万+

WebRTC 学习之 Conference 实现混音混屏

混音 混音的意义就是将多个音频流混成一路音频,在Conference 的实现中有分为终端实现和服务器实现。 1. 终端混音实现: 终端接受到多路(一般是多个用户)的音频流之后,在终端本地将多路音频流混成一路音频送给扬声器播放。终端混音方式下服务器只起到数据转发的作用,负担比较轻,这种实现的方式的优点是便于扩充,增加用户数量不会对服务器造成太大的负担。缺点是每个终端都需要混音工作,故每个终端都需要有...

weixin_34292402的博客 704

使用Android Studio调试系统应用之TvSettings(一):移植

对于做ROM的同仁、以及想要深入学习Android同学,必定会去调试Android的系统APK,而 *aosp* 源码中的系统APK源码,无法直接在Android Studio中进行调试,本文将持续更新细节,手把手教你,使用Android Studio调试安卓的系统应用。在每个阶段,提供知识点的梳理、总结,为您答疑解惑!

上周的博客 2054

11、RK3566/3568 Android11切割屏幕 长条屏 显示

在使用 RK3566 平台进行 Android 11 开发时,遇到切割屏(长条屏)显示画面不全。本文将详细介绍如何配置,以及如何修改 HWComposer 来调整显示区域,解决图像缩放问题。我这边屏幕是lvds接口的,分辨率1920 1080实际的屏物理尺寸是1920x463。

qq_39451352的博客 252

iOS音频掌柜-- AVAudioSession

http://www.jianshu.com/p/3e0a399380df 音频输出作为硬件资源,对于iOS系统来说是唯一的,那么要如何协调和各个App之间对这个稀缺的硬件持有关系呢? iOS给出的解决方案是"AVAudioSession" ,通过它可以实现对App当前上下文音频资源的控制,比如 插拔耳机、接电话、是否和其他音频数据混音等。当你遇到: 是进行录音还是播放

jeffasd的专栏 1509

一键开关机电路

一键开关机电路

让你爱上电路设计 4178

OCiOS开发:录音与音效

录音 AVAudioRecorder是AVFoundation中的类,提供了简单的录音功能。 常用方法 初始化方法 - (id)initWithURL:(NSURL *)url settings:(NSDictionary *)settings error:(NSError **)outError; 录音操作 // 1、准备开始录音 - (BOOL)prepareToRecord; // 2、开始录

李鴻耀 4636

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

改进型归一化混音算法

改进型归一化混音算法 linear PCM格式的音频混音 音频混音的原理: 量化的语音信号的叠加等价于空气中声波的叠加。 反应到PCM音频数据上,也就是把同一个声道的数值进行简单的相加,但是这样同时会产生一个问题,那就是相加的结果可能会溢出,当然为了解决这个问题已经有很多方案了. 假设音频文件采样率、通道数、采样精度一样。 另外要注意的是,在源音频数据中是按照little-endia

jeffasd的专栏 7828

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

iOS音频处理技术-TAAE

TAAE(The Amazing Audio Engine)是一个开源的音频应用开发框架,专门针对iOS系统。它能够自动混合多种音频信号,提供复杂的多通道音频输入支持,详细记录系统输出信息,进行应用内会话监控等。TAAE由“Audiobus”的开发者Michael Tyson参与完成。Audiobus是一款音频处理应用,它就像是一根虚拟连接线,将一个个原本独立的音乐应用连接起来,起到很好的串联作用。

拾光Blog 1485

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

EQ的实现

文章产品的配图来自深圳同创音频技术有限公司公开的数字音频处理器产品界面。 前言 EQ,我们常见的就是很多播放器上面带的一个均衡器,可以选择流行、重低、金属等等音乐风格,这个是参量均衡EQ。而广义的EQ包含很多种类型: 1. 参量(PEQ) 2. 低架(LowShelf) 3. 高架(HighShelf) 4. 低通(LowPass) 5. 高通(HighPass) ...

2649

回声消除NLMS算法详解

在视频或电话会议中,本地用户的声音在被本地麦克风采集后,通过系统传到远端,通过远端的扬声器播放,此时远端麦克风不可避免地会采集到扬声器播放的声音,又通过系统传回本地,并通过本地扬声器播放出来,本地用户就通过本地扬声器听到了自己的声音,这明显降低了会议通信质量。 为了提高语音的质量,就必须进行回声消除。当参考信号已知时,归一化最小均方(Normalized Leas...

brandon2015的博客 1万+

iOS 播放音频的几种方式

对于比较短促的声音,比如系统的推送声音和短信声音,官方要求不要超过30s。开始播放NSString *filePath = [[NSBundle mainBundle] pathForResource:@"done" ofType:@"wav"]; NSURL *fileUrl = [NSURL URLWithString:filePath]; SystemSoundID soundID = 0;

Anybody capable of love is capable of being saved. 1万+

音频队列服务编程指南(Audio Queue Services Programming Guide)(三)

音频录制     当你使用音频队列服务进行录制的时候,你可以将音频录制到任何地方——磁盘文件、网络连接或内存对象等等。本章将介绍中最常见的一种情况——将音频录制到磁盘文件中。 注意: 本章介绍了基于ANSI-C的录制的实现,并且使用了MAC OS X中Core Audio SDK中了一些C++类,如果想了解基于Objective-C的例子,请参考iOS Dev

猫+鱼=? 2686

ios 文件写入(pcm, h264)

1: 声明一个文件变量 FILE *_fp; 2: 创建文件保存路径 NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [NSString str...

海阔天空 1809
上一篇: iPhone/iPad开发札记 2012/03/09 音频
下一篇: iPhone/iPad札记2012/03/11 - 1 音频,混音
printf1998
博客等级 码龄16年 14粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值