ios – 停止AUGraph的口吃

ios – 停止AUGraph的口吃,第1张

概述当我第一次启动AUGraph并播放带有kAudioUnitSubType_AudioFilePlayer组件的歌曲时,我收到了一个断断续续的声音.口吃约3秒,但它足以打扰我加上我注意到音乐在播放时有时会停止一瞬间(我猜缓冲?).我已经尝试将kAudioUnitProperty_ScheduledFilePrime更改为随机值但注意没有更改. 我应该改变哪些变量或值来摆脱这个缺陷?这是流格式的问题吗 当我第一次启动AUGraph并播放带有kAudioUnitSubType_AudiofilePlayer组件的歌曲时,我收到了一个断断续续的声音.口吃约3秒,但它足以打扰我加上我注意到音乐在播放时有时会停止一瞬间(我猜缓冲?).我已经尝试将kAudioUnitProperty_ScheduledfilePrime更改为随机值但注意没有更改.

我应该改变哪些变量或值来摆脱这个缺陷?这是流格式的问题吗?

我正在使用https://github.com/ronaldmannak/YBAudioFramework/tree/master/YBAudioUnit的YBAudioUnit

码:

YBAudiofilePlayer:

- (voID)setfileURL:(NSURL *)fileURL typeHint:(AudiofileTypeID)typeHint {    if (_fileURL) {        // Release old file:        AudiofileClose(_audiofileID);    }    _fileURL = fileURL;    if (_fileURL) {        YBAudioThrowIfErr(AudiofileOpenURL((__brIDge CFURLRef)fileURL,kAudiofileReadPermission,typeHint,&_audiofileID));        YBAudioThrowIfErr(AudioUnitSetProperty(_auAudioUnit,kAudioUnitProperty_ScheduledfileIDs,kAudioUnitScope_Global,&_audiofileID,sizeof(AudiofileID)));        // Get number of audio packets in the file:        UInt32 propsize = sizeof(_filePacketsCount);        YBAudioThrowIfErr(AudiofileGetProperty(_audiofileID,kAudiofilePropertyAudioDataPacketCount,&propsize,&_filePacketsCount));        // Get file's asbd:        propsize = sizeof(_fileASBD);        YBAudioThrowIfErr(AudiofileGetProperty(_audiofileID,kAudiofilePropertyDataFormat,&_fileASBD));        // Get unit's asbd:        propsize = sizeof(_fileASBD);        AudioUnitGetProperty(_auAudioUnit,kAudioUnitProperty_StreamFormat,kAudioUnitScope_Output,&_unitASBD,&propsize);        if (_fileASBD.mSampleRate > 0 && _unitASBD.mSampleRate > 0) {            _sampleRateratio = _unitASBD.mSampleRate / _fileASBD.mSampleRate;        } else {            _sampleRateratio = 1.;        }    }}

要玩,我在YBAudiofilePlayer上调用这些方法:

[player1 setfileURL:item.url typeHint:0];[player1 scheduleEntirefilePrimeAndStartImmediately];[graph start];//On a YBAudioUnitGraph which is really just a basic AUGraph
解决方法 不仅仅是一个答案,这是一个评论,但它相当大,所以我会在这里发布.

我没有时间和耐心来研究YB .. API中的代码.但是我想到了几个问题.

首先,我记得尝试使用音频单元(使用Apple的API)并且我有很多口吃.我解决了在回调中删除所有Objective-C调用的问题,这些调用将数据提供给我的AUGraph(好吧,除了一个我无法删除的内容之外,我删除了所有内容).我用纯C和C调用替换了所有Objective-c调用.例:

... this is the render callbackint i = [myClass someProperty];  // obj-cint i = myClass->someVarialbe;  // c,c++

这只是一个例子,但它得到了显着改善,我摆脱了口吃.也许您可以看一下YBXX API的实现,看看回调中是否有很多obj-c调用,如果有,我就不会使用API​​.

第二次观察.看起来你只是想播放一个音频文件,因为AudioGraph的开销很大,你可以使用没有Graph的单个IO音频单元.

总结

以上是内存溢出为你收集整理的ios – 停止AUGraph的口吃全部内容,希望文章能够帮你解决ios – 停止AUGraph的口吃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1009173.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存