iPhone/iPad开发札记2012/03/12 Audio Unit

CMSampleBufferRef与byte*互相转换(audio) byte*转CMSampleBufferRef -(AudioStreamBasicDescription) getAudioFormat{     AudioStreamBasicDescription format;     format.mSampleRate = 44100;     format.mFormatID = kAudioFormatLinearPCM; 阅读详情


1. MixerHost 


* AudioBufferList 

Declaration: struct AudioBufferList {

   UInt32      mNumberBuffers;

   AudioBuffer mBuffers[1];

};

Q:WHY AudioBuffer[1]? WHY NOT AudioBuffer *? seems the same ?

注:参见此文对指针与数据区别的分析:http://wenku.baidu.com/view/93fc57202f60ddccda38a0b5.html

mBuffers只是标明一个buffer array的起始地址,具体空间大小由mNumberBuffers决定。


另外,在本程序里,mNumberBuffers为1/2,分别表示mono/stereo,而每个buffer本身只有一个channel


* AudioBuffer 

struct AudioBuffer {
   UInt32 mNumberChannels;
   UInt32 mDataByteSize;
   void   *mData;
};
typedef struct AudioBuffer AudioBuffer;

Q:  跟踪发现,mNumberChannels总是1,什么原因?是否因为right channel的data在另一个buffer中?和interleaved及non-interleaved之间有什么关系?

   A: 此struct用于多种场景,某些情况下在一个buffer中会有多个channel的数据,有些情况下只有一个channel的数据。与AudioBufferList配合使用。


* InputRenderCallback()

//    Audio unit input render callbacks are invoked on a realtime priority thread (the highest 

//    priority on the system). To work well, to not make the system unresponsive, and to avoid 

//    audio artifacts, a render callback must not:

//

//        * allocate memory

//        * access the file system or a network connection

//        * take locks

//        * waste time

//

//    In addition, it's usually best to avoid sending Objective-C messages in a render callback.

//


2. My own Audio Unit code in conference project 

* inside InputRenderCallback()


// get audio data from audio engine 

readAudioData(buffer, length)           // length should be 1280=320*4 bytes 

// fill the buffer handed to me 

    // Fill the buffer or buffers pointed at by *ioData with the requested number of samples 

   //    of audio from the sound stored in memory.

    for (UInt32 frameNumber = 0; frameNumber < inNumberFrames; ++frameNumber) {

        outSamplesChannelLeft[frameNumber]                 = dataInLeft[sampleNumber];

    }



3. 调试Conference程序使用G711

* playback 

errors as follows: 


(gdb) continue

2012-03-12 18:03:26.217 test555[1369:207] AQBufferCallback...

2012-03-12 18:03:27.395 test555[1369:207] audio data ready

2012-03-12 18:03:27.395 test555[1369:207] AQBufferCallback...

[Switching to process 1369]

Program received signal:  “EXC_BAD_ACCESS”.


other erros: 


2012-03-12 18:16:03.056 test555[1475:207] AQBufferCallback...

mi_cmd_exec_interrupt: Inferior not executing.

mi_cmd_exec_interrupt: Inferior not executing.

(gdb) continue

(gdb) continue

2012-03-12 18:16:03.976 test555[1475:207] audio data ready

test555(1475,0xb024f000) malloc: *** error for object 0x551bde4: incorrect checksum for freed object - object was probably modified after being freed.

*** set a breakpoint in malloc_error_break to debug

Program received signal:  “SIGABRT”.

(gdb) continue

Program received signal:  “SIGABRT”.


告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置) 本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。 阅读详情

相关推荐

NVIDIA显卡驱动历史版本全攻略:从官网隐藏入口到精准下载

本文详细介绍了如何获取NVIDIA显卡驱动历史版本的完整攻略,包括官网隐藏入口的揭秘、精准筛选驱动版本的技巧以及安装避坑指南。特别针对游戏玩家、创作者和老显卡用户提供了实用建议,帮助用户解决驱动兼容性问题,提升显卡性能。

m2n3o4p5的博客 3723

用AudioBuffer里的数据得到音量

使用AudioQueue录音时,回调方法中可以得到一个AudioBufferList类型的数据,每个frame里有inNumberFrames个数据,有inNumberChannels个channel。inNumberFrames*inNumberChannels的结果,就是AudioBufferList其中一个buffer里的数据量。 AudioBufferList里的buffer里面的数据,...

Glassy_sky1207的博客 6276

全志 T527_Android13 编译 [ 避坑必看 ]

Swap 概念: Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行。当输入编译命令make -j16 的时候,会有如下提示,这是官方建议通过减少编译线程来解决编译时消耗内存过大的问题。Android 13 系统的编译流程,编译一共分为两部分:内核编译与 Android 编译。

公众号:嵌入式分享 2111

基于 CoreAudio 的音频编解码(一):音频解码

系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 Core Audio 是iOS和MAC系统中的关于数字音频处理的基础,它是应用程序用来处理音频的一组软件框架,所有关于iOS音频开发的接口都是由Core Audio来提供或者经过它提供的接口来进行封装的。 下图是 Core Audio 框架结构,其功能可谓是丰富且强大,几乎涵盖了所有与音频处理相关的内容。 这篇文章中,我们关注 Core Audio 中编解码能力,也就

记录学习的过程 1854

c# U盘禁用---守护进程(插入,拔出,卸载等操作)

一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.youkuaiyun.com/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin...

星星之火燃亮码空 2845

微信公众平台 - 微信内置浏览器 WeixinJSBridge.invoke(‘xxx‘) API 报错:system:access_denied(常见于微信支付、分享朋友圈/转发好友等功能)解决方案

微信支付提示System:access_denied,调用微信支付返回:system:access_denied为什么,安卓版微信支付偶尔出现system:access_denied,微信公众号开发分享出现system:access_denied,system:access_denied如何解决?微信WeixinJSBridge.invoke(‘xxx‘)API调用后出现报错,微信内部H5WeixinJSBridge.invokesystem:access_denied,使用微信jssdk时报ac

🏆 前端领域优质创作者 5145

iOS音视频开发五:音频解码

这里是第五篇:iOS 音频解码 Demo。这个 Demo 里包含以下内容: 1)实现一个音频解封装模块; 2)实现一个音频解码模块; 3)实现对 MP4 文件中音频部分的解封装和解码逻辑,并将解封装、解码后的数据存储为 PCM 文件; 4)详尽的代码注释,帮你理解代码逻辑和原理。 前四篇: iOS要开发,采集音频并存储为 PCM 文件 iOS音视频开发二:音频编码,采集 PCM 数据编码为 AAC iOS音视频开发三:音频封装,采集编码并封装为 M4A iOS

m0_60259116的博客 1596

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Ubuntu 系统下安装 OpenClaw(原 Clawdbot)的详细指南

Science prince的博客 3535

iOS 音频采集 AudioBufferList转CMSampleBufferRef

@property (nonatomic, assign) AudioComponent component; @property (nonatomic, assign) AudioComponentInstance componetInstance; static OSStatus handleInputBuffer(void *inRe...

wnnvv的专栏 8106

C# 与蓝牙 BLE 设备通信:基于 Windows.Devices.Bluetooth 实现手环/传感器数据读取

本文介绍了如何利用C#的Windows.Devices.Bluetooth命名空间实现与蓝牙BLE设备的通信。首先概述了BLE技术特性及其在物联网中的应用场景,包括智能穿戴设备和传感器。随后讲解了BLE的GATT协议架构,解析了服务(Service)和特性(Characteristic)的概念。文章重点展示了通过C#实现设备扫描、连接、数据读取的完整代码示例,并详细说明了如何使用通知(Notifications)功能实现实时数据更新。最后提供了订阅心率测量特性变化的实现代码,为开发者提供了完整的BLE设备通

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1322

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

m0_60898338的博客 1118

AudioUnit合并音频文件(七)

前言 上一篇文章初步了解了音频混合的原理及如何使用Mixer Unit混合音频的流程,学习了如何在录制音频时播放背景音乐开启耳返效果。那有人就会提出疑问,我录制时只需要播放背景音乐不想开启耳返,录制结束后再将录制的声音和背景音乐混合,这要如何实现?这是一个很好的问题,也是一个很常用的场景,对于问题的前半部分,我想只要学会了前面几篇文章,很简单实现,对于后半部分问题该如何做呢?离线音频混合,离线与在线是个相对的概念,在线就是音频数据最终会通过扬声器播放出来。离线的意思就是音频数据不发送给扬声器,由APP自己

翻肚鱼儿的博客 1131

ASPICE标准快速掌握「总目录」

欢迎大家来到雪云飞星的《ASPICE标准快速掌握》,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习ASPICE协议知识点的参考。本专栏可以帮助大家快速掌握如何在项目中使用ASPICE,ASPICE的学习通常仅需要半天时间左右,掌握方法后完全就可以结合快查表来指导具体项目的质量提升了。

雪云飞星的博客 3008

iPhone/iPad开发札记2012/03/11 -2 Audio Unit

1. Reading  "Audio Unit Hosting Guide for iOS" /  "Audio Unit Processing Graph Service References" / - for managing the graph ( a collection of units ) "Audio Component Services Reference" / - for

printf1998的专栏 2188

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iPhone/iPad开发札记2012/03/14 Audio Unit into conference project

1. Audio Unit into conference project.  * compile error  Expected ')' before '&' token  in file ConferenceInterface.h     /**      *加会方法      * param:加会的配置参数,和ini中的值一致      */     int

printf1998的专栏 592

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mac os音频采集功能

mac下采集麦克风音频: #include <AudioUnit/AudioUnit.h> #include <CoreFoundation/CFString.h> #include <CoreAudio/CoreAudio.h> #include <unistd.h> #include <errno.h> #include <obs-module.h> #include <util/threading.h> #inc

tong5956的专栏 2738

【iOS笔记】AudioUnit录音异常(听起来类似于丢帧丢数据)

在做语音识别项目时候发现一个问题,识别率奇低无比……所以就把原始音频数据录下来,发现音频丢数据。 实验机器:iPhone6s iOS12 问题代码如下: OSStatus AudioUnitInput::RecordCallback( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const A...

F_season的专栏 2490

audio播放buffer对象资源

使用百度语音合成,返回的结果是buffer对象。使用audio标签播放时,需要将其转成url形式 var blob = new Blob([result.data],{type:'autio/wave'}); var src = URL.createObjectURL(blob); _this.audioVoice = src; ...

令瑞斌 3407

【Minim】音乐加工厂:AudioBuffer 类

AudioBuffer 是神马? AudioBuffer是与单通道流式音频一致的浮点采样缓冲区。注意:**AudioBuffer只可读,可调用toArray方法来获取其副本。**而事实上,在绘制声波形状时,我们一般使用toArray方法,而不是迭代缓冲区本身。这是因为在调用get方法期间,缓冲区中的样本可能会被新的样本所替代,从而导致波形似乎有不连续的地方。 It is readonly, but...

升卿 1371

使用 AudioUnit进行录音

上一篇讲了如果使用 AudioUnit进行播放音频文件,这一篇讲一下如何使用AudioUnit进行录音 这个两个过程其实很类似。只是在回调方法上的使用不同。 1)初始化 AudioUnit的初始化比较啰嗦,而且方法比较多。这里采用一种比较简单的。 AudioComponentDescription outputUinitDesc; //定义AudioUnit描述,下面是设置 ...

河马的BLOG 2891

1小时学会:最简单的iOS直播推流(七)h264/aac 硬编码

最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!! 源代码:https://github.com/hardman/AWLive 群:552660248 前面已经介绍了如何从硬件设备获取到音视频数据(pcm,NV12)。但是我们需要的视频

hard_man的专栏 8406

Ios 实现麦克风捕获和AAC编码

在Ios中,实现打开和捕获麦克风大多是用的AVCaptureSession这个组件来实现的,它可以不仅可以实现音频捕获,还可以实现视频的捕获。本文将主要实现麦克风音频的捕获和编码。 针对打开麦克风和捕获音频的代码,网上也有一些,我就简单的整理了一下: 首先,我们需要定义一个AVCaptureSession类型的变量,它是架起在麦克风设备和数据输出上的一座桥,通过它可以方便的得到麦克风的实时原始

shenyi0106的专栏 1万+

iPhone/iPad开发扎记 2012/02/21

1. playing *.pcm in iOS  * EXC_BAD_ACCESS  http://www.cocoachina.com/macdev/objc/2011/0219/2661.html Q:设置NSZombieEnabled后,仍然没有crash的线索。 * thought:  可能是因为audio queue buffer没有初始化造成的。 see

printf1998的专栏 745

AudioQueue

//========================= 播放 ============================== // 所属类 AudioPlayer AudioQueueRef mQueue; AudioStreamBasicDescription mDataFormat; //创建AudioQueue AudioQueueNewOutput(&mDataFormat, ...

iOSZZZh的博客 362

音频流处理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34167819的博客 751

iphone/iPad 搞定Audio Unit 2012/05/13

1. 研究MixherHost  * render callback呼叫duration = 11 ms  2012-05-13 09:27:32.884 MixerHost[1576:7c03] into render callback: bus no = 0 2012-05-13 09:27:32.884 MixerHost[1576:7c03] into render callba

printf1998的专栏 4056
上一篇: iPhone/iPad开发札记2012/03/11 -2 Audio Unit
下一篇: iPhone/iPad开发札记 2012/03/13
printf1998
博客等级 码龄16年 14粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值