在不使用AVAudioPlayer的情况下在iOS上绘制音频波形
问候每个人,我正在执行一个项目,我需要预处理一些音频源,并根据音频信息形成波浪状的形状(语音级别,更准确)。 由于我真的是这个领域的新手,所以我在这里进行了一些调查。 如果我犯了任何错误,请纠正我。
我开始创建一个音频播放器。 我的选择是使用AVAudioPlayer,我发现实际上有可用于测量语音级别的function,但同步。 我的想法是隐含地让AVAudioPlayer播放,我可以在后台获取一些语音级信息,而不必实际播放音频,但似乎很不幸。 如果有任何可行性,请就此提出建议。
然后,我切换到AVAssetReader进行救援。 现在,通过链接提到一个非常全面的post! 我能够从左右声道获取一些数据,但计算后并没有真正理解结果。
在@unsynchronized的答案的第三个代码片段中,第二个问题是关于在while循环内的AVAssetReader的输出,
while (reader.status == AVAssetReaderStatusReading){ AVAssetReaderTrackOutput * trackOutput = (AVAssetReaderTrackOutput *)[reader.outputs objectAtIndex:0]; CMSampleBufferRef sampleBufferRef = [trackOutput copyNextSampleBuffer]; ...
copyNextSampleBuffer总是被调用并发送到CMSampleBufferRef的一个实例,我的问题是AVAssetReader如何读取音频文件。 我想当trackOutput需要在while循环中读取时,读者已经将文件分成几部分,但是基于什么标准? 时间? 样品数量? 我从iOS开发中心阅读文档,但仍然没有得到它。
第三个问题是他/她打算将所有数据都投入
NSMutableData * fullSongData = [[NSMutableData alloc] init];
和fullSongData最终将连接左右声道数据并传递给图像绘制过程。 经过一些测试后,我从fullSongData得到的东西对我来说并没有多大意义。 我知道它包含导入音乐的某些模式,但实际上无法通过与我知道的任何属性相关联来理解它。 这个算法有没有参考? 以及在歌曲的每个时刻输出如何与语音电平相关联,这正是我所期望的。 而且,我不太清楚变量sampleTally的真正含义。
在陷入先前的解决方案之后,我决定转向一些基本理论并在那里尝试一些东西。 正如一些朋友所建议的那样,我开始考虑应用快速傅里叶变换来从头开始。 我敢打赌,这是一个可行的解决方案,但有一个很大的学习曲线..此时,我也在链接中发现了这篇文章! 非常有用,现在仍在研究它。
我知道我写了很多,如果你到了这里,我非常感谢你的时间。 我是一个非常初级的程序员,只需几个月就可以开始iOS开发。 在一直阅读文档后,我认为与这里的人沟通会好得多。 如果对我的学习过程有任何建议和批评,请不要打扰他们;)