2013-03-27 156 views
4

加载AVAsset这样后:的iOS:如何从AVAsset或音频采样率AVAssetTrack

AVAsset *asset = [AVAsset assetWithURL:url]; 

我想知道的采样率的音频轨的东西。目前,我得到像这样的音频曲目:

AVAssetTrack *audioTrack = [[asset tracksWithMediaCharacteristic:AVMediaCharacteristicAudible] objectAtIndex:0]; 

哪些工作。但我似乎无法找到任何财产,即使使用谷歌;-),这使我的采样率。这是如何正常工作的?它甚至有可能吗? (我开始怀疑越来越多,因为谷歌搜索没有给我很多信息...)

回答

0

找到它。我用的是MTAudioProcessingTap,所以在准备()函数,我可以只使用:

void prepare(MTAudioProcessingTapRef tap, CMItemCount maxFrames, const AudioStreamBasicDescription *processingFormat) 
{ 
    sampleRate = processingFormat->mSampleRate; 
    NSLog(@"Preparing the Audio Tap Processor"); 
} 
+0

你好,请你解释你是如何从AvAsset获得采样率的。既然我也面临同样的问题,那对我来说会很有帮助。 – kunjus 2014-06-05 13:10:37

+1

就像它在这个答案中所描述的那样,当您使用MTAudioProcessingTap时,采样率将在AudioStreamBasicDescription-> mSampleRate属性中提供给您。 – 2014-06-10 12:53:29

3
let asset = AVAsset(url: URL(fileURLWithPath: "asset/p2a2.aif")) 
let track = asset.tracks[0] 
let desc = track.formatDescriptions[0] as! CMAudioFormatDescription 
let basic = CMAudioFormatDescriptionGetStreamBasicDescription(desc) 
print(basic?.pointee.mSampleRate) 

我用斯威夫特,所以它看起来有点不同,但它仍然应该OBJ - C的工作。

print(track.naturalTimeScale) 

也似乎给出了正确的答案,但我有点担心,因为名称。

+0

你如何获得Struct的属性?例如mSampleRate? – 2017-01-06 18:21:49

+0

杜。我从来没有想到你真的想在程序中使用它。这就是我在上午6点回答问题所得到的结果。请参阅上面的修改。 – Pescolly 2017-01-07 08:17:46