gpt4 book ai didi

iphone - AVAudioPlayer - 计量 - 想要构建波形(图)

转载 作者:行者123 更新时间:2023-12-03 18:53:30 30 4
gpt4 key购买 nike

我需要构建一个可视化图表来表示录制文件中的语音级别 (dB)。我尝试这样做:

NSError *error = nil;
AVAudioPlayer *meterPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.recording.fileName] error:&error];

if (error) {
_lcl_logger(lcl_cEditRecording, lcl_vError, @"Cannot initialize AVAudioPlayer with file %@ due to: %@ (%@)", self.recording.fileName, error, error.userInfo);
} else {
[meterPlayer prepareToPlay];
meterPlayer.meteringEnabled = YES;

for (NSTimeInterval i = 0; i <= meterPlayer.duration; ++i) {
meterPlayer.currentTime = i;
[meterPlayer updateMeters];
float averagePower = [meterPlayer averagePowerForChannel:0];
_lcl_logger(lcl_cEditRecording, lcl_vTrace, @"Second: %f, Level: %f dB", i, averagePower);
}
}
[meterPlayer release];

如果能成功那就太好了,但没有成功。我总是得到-160 dB。关于如何实现这一点还有其他想法吗?

UPD:这是我最终得到的:

alt text http://img22.imageshack.us/img22/5778/waveform.png

最佳答案

我只是想帮助其他遇到同样问题并花费大量时间进行搜索的人。为了节省大家的时间,我把我的答案贴出来。我不喜欢这里有人把这当作 secret ......

搜索有关extaudioservice音频队列avfoundation的文章后。

我意识到我应该使用 AVFoundation,原因很简单,它是最新的 bundle ,它是 Objective C 但不是 cpp 风格。

所以步骤并不复杂:

  1. 从音频文件创建 AVAsset
  2. avasset 创建 avassetreader
  3. avasset 创建 avassettrack
  4. avassettrack 创建 avassetreadertrackoutput
  5. avassetreadertrackoutput添加到之前的avassetreader以开始读出音频数据

avassettrackoutput中,您可以copyNextSampleBuffer一项一项地进行(这是一个读取所有数据的循环)。

每个copyNextSampleBuffer都会为您提供一个CMSampleBufferRef,可用于通过CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer获取AudioBufferListAudioBufferListAudioBuffer的数组。 AudioBuffer是一堆音频数据,存储在其mData部分。

您也可以在extAudioService中实现上述内容。但我认为上述 avfoundation 方法更容易。

那么下一个问题是,如何处理mData?请注意,当您获取avassetreadertrackoutput时,您可以指定其输出格式,因此我们指定输出为lpcm

那么你最终得到的mData实际上是一个float格式的幅度值。

简单吧?尽管我花了很多时间来整理这些内容。

两个有用的资源分享:阅读本文以了解基本术语和概念:https://www.mikeash.com/pyblog/friday-qa-2012-10-12-obtaining-and-interpreting-audio-data.html

示例代码:https://github.com/iluvcapra/JHWaveform您可以直接从此示例中复制上述大部分代码并用于您自己的目的。

关于iphone - AVAudioPlayer - 计量 - 想要构建波形(图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767400/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com