AVAsset读者寻求

2023-11-21

我需要寻找音频文件并提取块。我正在尝试使用 AVAssetReader。我看到的错误是,如果我在一段时间内从不同的偏移量读取音频,我得到的平均值(块)是不同的。

例如,如果我从 0.1 秒到 0.5 秒读取音频,我会得到不同的结果,如果我从 0.2 秒到 0.5 秒读取音频,我收到的块会有所不同

以下是演示它的代码示例

#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
#import <MediaPlayer/MediaPlayer.h>

+ (void) test
{
    NSURL* path = [[NSBundle mainBundle] URLForResource:@"music" withExtension:@"mp3"];

    [self test:path sample:1 showChunks:5];
    [self test:path sample:2 showChunks:4];
    [self test:path sample:3 showChunks:3];
}

+(void) test:(NSURL*) url sample:(NSInteger) sample showChunks:(NSInteger) chunkCount
{
#define CHUNK 800
#define SAMPLE_RATE 8000
    AVURLAsset* asset = [AVURLAsset URLAssetWithURL:url options:nil];
    NSError *assetError = nil;
    AVAssetReader* assetReader = [AVAssetReader assetReaderWithAsset:asset error:&assetError];

    CMTime startTime = CMTimeMake(sample*CHUNK, SAMPLE_RATE);
    CMTimeShow(startTime);

    CMTimeRange timeRange = CMTimeRangeMake(startTime, kCMTimePositiveInfinity);
    assetReader.timeRange = timeRange;

    NSDictionary* dict = nil;
    dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInteger:SAMPLE_RATE], AVSampleRateKey, [NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey, nil];


    AVAssetReaderAudioMixOutput* assetReaderOutput = [AVAssetReaderAudioMixOutput assetReaderAudioMixOutputWithAudioTracks:asset.tracks audioSettings: dict];
    if (! [assetReader canAddOutput: assetReaderOutput]) {
        NSLog (@"error: Cannot add output reader");
        assetReader = nil;
        return;
    }

    [assetReader addOutput: assetReaderOutput];

    [assetReader startReading];

    CMSampleBufferRef nextBuffer;

    if (!(nextBuffer = [assetReaderOutput copyNextSampleBuffer]))
    {
        return;
    }
    CMSampleBufferGetTotalSampleSize (nextBuffer);
    // Extract bytes from buffer
    CMBlockBufferRef dataBuffer = CMSampleBufferGetDataBuffer(nextBuffer);

    NSInteger len = CMBlockBufferGetDataLength(dataBuffer);
    if (len < chunkCount*CHUNK)
    {
        printf("CHUNK is to big");
        return;
    }
    UInt8* buf = malloc(len);
    CMBlockBufferCopyDataBytes(dataBuffer, 0, len, buf);

    for (int ii = 0; ii < chunkCount*CHUNK; ii+=CHUNK)
    {
        CGFloat av = 0;
        for (int jj = 0; jj < CHUNK; jj++)
        {
            av += (CGFloat) buf[jj+ii];
        }
        printf("Time: %f av: %f\n", (CGFloat)(ii+CHUNK*sample)/(CGFloat)SAMPLE_RATE,  av/(CGFloat)CHUNK);
    }
    printf("\n");

    free(buf);


}

这是输出

{800/8000 = 0.100}
Time: 0.100000 av: 149.013748
Time: 0.200000 av: 100.323753
Time: 0.300000 av: 146.991257
Time: 0.400000 av: 106.763748
Time: 0.500000 av: 145.020004

{1600/8000 = 0.200}
Time: 0.200000 av: 145.011246
Time: 0.300000 av: 110.718750
Time: 0.400000 av: 154.543747
Time: 0.500000 av: 112.025002

{2400/8000 = 0.300}
Time: 0.300000 av: 149.278748
Time: 0.400000 av: 104.477501
Time: 0.500000 av: 158.162506

请帮助


在我看来,您的问题在于假设以下代码准确地寻求 startTime:

CMTimeRange timeRange = CMTimeRangeMake(startTime, kCMTimePositiveInfinity);
assetReader.timeRange = timeRange;

您可以通过调用来测试这一点

CMSampleBufferGetOutputPresentationTimeStamp(nextBuffer);

由此您将能够看到缓冲区启动的确切时间(以秒为单位)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVAsset读者寻求 的相关文章

  • iPhone SDK - orkut API

    我曾使用 gData 库从 iPhone 中的 Google 联系人中检索联系人信息 同样 我将与 Orkut 合作 有没有像 gData 这样适用于 Orkut 的库 如果是这样 请给我链接 提前致谢 对于 orkut 我们有 orkut
  • 如何通过填充 NSDictionary 以 JSON 格式发送 UIImage

    我正在尝试使用 JSON 将数据发送到服务器 我可以使用我的对象和关键参数创建 NSDictionary 但我想发送我的图片 图片是UIImage NSDictionary mainJSON NSDictionary dictionaryW
  • rightBarButtonItem 信息按钮,右侧没有空格

    我有一个UIViewController设置为在其右侧显示一个信息按钮UINavigationItem像这样 UIButton infoButton UIButton buttonWithType UIButtonTypeInfoLight
  • 如何将图像放入此 UIPickerView 中?

    我不知道如何创建一个在文本一侧带有图像的自定义 UIPickerView 我一直在寻找一种方法 我刚刚发现了这个 UIView pickerView UIPickerView pickerView viewForRow NSInteger
  • 如何以编程方式更改 iPhone APN(接入点名称)?

    如何以编程方式更改 iPhone APN 接入点名称 或者强制 3G GPRS 连接以编程方式使用特定的 APN 无法通过 SDK 完成 第三方应用程序无法对硬件进行这种级别的控制 尤其是蜂窝调制解调器
  • 如何使用 iPhone 将照片上传到服务器?

    我正在编写一个 iPhone 应用程序 它可以拍摄照片然后将其上传到服务器 如何使用 Cocoa 将照片上传到服务器 我想我在某处使用 NSUrl Thanks Header interface EPUploader NSObject NS
  • 将 NSData 转换回音频文件

    我已经转换了我的 caf音频文件到NSData使用以下代码行对象 NSData audioData NSData dataWithContentsOfFile MyRecorderFilePathURL path options 0 err
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 编码时捕获 NS_AVAILABLE_IOS

    我知道如何更改支持的最低操作系统IPHONEOS DEPLOYMENT TARGET 我目前正在 Xcode 4 5 下进行开发并使用 iOS 6 0 SDK 我想做的是找到一种方法 每当我使用标记的代码时在编译中抛出警告 NS AVAIL
  • 从应用程序启动 iPhone 设置屏幕?

    我正在开发一个应用程序 我希望按下按钮时 iPhone 设置屏幕应该打开 苹果有访问限制吗 到底能不能 如果能的话怎么办 不 你不能那样做 但是 作为替代方案 您可以使用这个框架 http www inappsettingskit com
  • 是否可以跨 2 个不同的 iOS 应用程序访问数据?

    假设我在 App1 中存储了一些 ID 数据 并希望在同一设备上的 App2 中访问它 平台上可以这样吗 如果没有的话有什么解决方法吗 您可以使用iOS 钥匙扣 http developer apple com library ios do
  • NSMutableArray writeToFile:atomically 在设备上总是返回 NO,但在模拟器上工作正常

    我在 xcode 项目的资源中有一个 plist 文件 其根类型为 Array 单击按钮 我需要访问此 plist 并查找 plist 是否已包含特定项目 如果未将新项目 NSString 写入 plist 我这样做如下 NSMutable
  • UIWebView:在 Safari 中打开一些链接,一些在视图中打开

    我的应用程序具有在 UIWebView 中呈现的内容 出于文本格式原因 内容中有一些链接 其中一些链接应在移动 Safari 中打开其目标 而其他链接则应在内容中导航 到目前为止 我已经使用 UIWebView 委托捕获了链接请求 在我的实
  • PhoneGap 上的 SQLite 数据库

    我想使用 PhoneGap 为 iPhone 实现 SQLite 数据库 我了解 iPhone 本机应用程序中 SQLite 数据库的一些基础知识 但是如何在 PhoneGap 中实现 SQLite 数据库呢 我们最终使用了PhoneGap
  • 我的 iPhone 6 获取 iPhone 5 媒体查询

    我不明白这里发生了什么事 我在 CSS 媒体查询中专门针对 iphone 5 media only screen and min device width 320px and max device width 568px some div
  • 我可以安全地将 UInt32 存储到 NSUInteger 吗?

    在标头中 它的定义如下 if LP64 TARGET OS EMBEDDED TARGET OS IPHONE TARGET OS WIN32 NS BUILD 32 LIKE 64 typedef long NSInteger typed
  • 在 Pickerview 中创建复选标记[重复]

    这个问题在这里已经有答案了 我正在开发一个应用程序 我想在用户选定的行上创建复选标记 For Ex 在UITableView中有 UITableViewCellAccessoryCheckmark 但我想知道是否有类似的东西可用于 UIPi
  • Textview 中心文本对齐 IOS 7

    void observeValueForKeyPath NSString keyPath ofObject id object change NSDictionary change context void context NSLog He
  • 测试 NSMutableArray 是否包含字符串对象

    我有一个NSMutableArray其中包含一些NSString对象 如何测试数组是否包含特定的字符串文字 I tried array containsObject teststring 但这行不通 你所做的应该很好 例如 NSArray
  • Objective-C 中 NSURL 为 null 而 NSString 是正确的

    我有一个NSString包含一个 url 以及当我分配时NSURL与NSString NSURL 输出 空 这是因为url中有一些非法字符 导致NSURL不编码就无法读取NSString包含网址 NSString u incomingUrl

随机推荐

  • 根据高度保持div长宽比

    我需要维护width元素占其元素的百分比height 因此 随着高度的变化 宽度也会更新 相反 可以通过使用 padding top 的 值来实现 但 padding left 作为百分比将是对象宽度的百分比 而不是其高度 因此 使用这样的
  • 高效附加到可变长度字符串容器(Golang)

    问题 我需要将多个正则表达式应用于大日志文件的每一行 例如几GB长 收集非空匹配并将它们全部放入一个数组中 用于序列化并通过网络发送 如果回答以下问题 切片没有多大帮助这个问题 holds 如果切片没有足够的容量 append 将需要分配新
  • 在 SQL Server 查询中将 NULL 替换为 0

    我开发了一个查询 在前三列的结果中我得到NULL 我怎样才能替换它0 Select c rundate sum case when c runstatus Succeeded then 1 end as Succeeded sum case
  • Java SSL:如何禁用主机名验证

    标准 java SSL 套接字是否可以通过属性禁用 ssl 连接的主机名验证 到目前为止我发现的唯一方法是编写一个始终返回 true 的主机名验证器 Weblogic 提供了这种可能性 可以使用以下属性禁用主机名验证 Dweblogic s
  • 仅允许使用“sudo su - user”的 Capistrano

    我正在尝试对远程服务器进行简单的 Rails Capistrano 部署 不幸的是我无法得到sudo开箱即可正确运行 我需要在这里部署 drwxr xr x 2 user www 4096 Sep 28 15 05 my app dir 并
  • 空闲 PostgreSQL 连接是否有超时?

    1 S postgres 5038 876 0 80 0 11962 sk wai 09 57 00 00 00 postgres postgres my app 1 45035 idle 1 S postgres 9796 876 0 8
  • Python 中的模块有标准别名吗?

    遵循中提出的指南这个帖子 我正在改变所有 from module import function function agt by import module as mdl mdl function agt 在我的代码中 我尝试使用常用的别名
  • 有没有办法在不支持的浏览器中渲染 SVG 图标?

    截至目前 似乎唯一支持它们的浏览器是 Firefox 显然 Opera 曾经支持它 但后来放弃了它 也许是 JavaScript 垫片 重用过程中与序列化无关的部分如何将 SVG 元素设置到页面的图标 创建一个
  • 不区分大小写的字符串比较

    我想比较两个变量以查看它们是否相同 但我希望此比较不区分大小写 例如 这将区分大小写 if var1 var2 但我希望它不区分大小写 我该如何处理呢 这相当简单 你只需要打电话strtolower 在两个变量上 如果需要处理 Unicod
  • Mono 缺少 System.Numerics.BigInteger.Parse(string,IFormatProvider)

    我目前使用以下错误Json NET Newtonsoft JSON图书馆 Missing method System Numerics BigInteger Parse string IFormatProvider in assembly
  • 名称中包含破折号的自定义 AngularJS 指令不起作用

    我编写了以下 Angular 指令 它将向所有子项添加 required 属性 directive requireall function compile return restrict A only want it triggered f
  • 将点连接到图中的回归线

    考虑以下数据ISLR 书 Income lt structure list X 1 30 Education c 10 10 4013377926421 10 8428093645485 11 2441471571906 11 645484
  • 如何在PHP中从PDF表单中提取字段值[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我们正在开发基于 PHP 和 MySQL 的应用程序 我们分发 PDF 格式的注册表 填写表格后 用户将 PDF 表格上传到我们的应用程序进行注册
  • 如何防止useQuery在状态改变时运行?

    我正在使用 React Apollo 从我的服务器获取数据 当我的页面加载时 我使用 useQuery 来检索数据 这很好用 问题是当我对搜索表单进行更改时 这会更新状态 从而导致不必要的重新渲染 从而再次调用服务器 我只想在页面加载和单击
  • 如何打印lda主题模型和每个主题的词云

    from nltk tokenize import RegexpTokenizer from stop words import get stop words from gensim import corpora models import
  • 如何提前停止处理 JSP?

    我有一个 JSP 页面 它调用一个函数并检查其返回值 如果返回值不为空 JSP 页面将继续使用它 如果返回值是null 我希望JSP页面的处理停止 这是因为该函数将在返回null对象之前执行重定向 而且 其余的JSP代码显然使用了这个对象
  • django 2无法将环境变量从.env文件加载到setting.py文件

    我尝试将环境变量从名为 env 的文件加载到 settings py 文件 在这里 我创建了 env 文件和设置文件同一文件夹 这是我的 env 文件 DEBUG on SECRET KEY ksmdfw3324 jefm DATABASE
  • Android:如何从 tabhost 调用选项卡内 Activity 的函数

    我有一个带有三个选项卡的选项卡主机 每一项都是一项活动 我希望在操作栏中有一个按钮 顶部的栏上有常用按钮 调用活动选项卡的功能 例如 添加函数可以根据单击按钮时出现的选项卡向每个选项卡添加不同的内容 因此 我询问如何从 tabHost 调用
  • 从Python文本文件中的一行中提取随机单词/字符串

    我有一个文本文件 一行有六个单词 我需要从该行随机生成一个单词 文本文件名为 WordsForGames txt 我正在制作一个刽子手游戏 这是我到目前为止所拥有的 我有点迷失请帮助 import random import os prin
  • AVAsset读者寻求

    我需要寻找音频文件并提取块 我正在尝试使用 AVAssetReader 我看到的错误是 如果我在一段时间内从不同的偏移量读取音频 我得到的平均值 块 是不同的 例如 如果我从 0 1 秒到 0 5 秒读取音频 我会得到不同的结果 如果我从