从 AVAsset 中查找通道数

Posted

技术标签:

【中文标题】从 AVAsset 中查找通道数【英文标题】:Finding the number of Channels from an AVAsset 【发布时间】:2011-08-03 17:49:52 【问题描述】:

我正在通过 AVAssets 加载音频资产。我想弄清楚资产中有多少通道(基本上是单声道或立体声)。最好的方法是什么?

【问题讨论】:

【参考方案1】:

这似乎是我要找的。​​p>

AVAssetTrack* songTrack = [mAssetToLoad.tracks objectAtIndex:0];
NSArray* formatDesc = songTrack.formatDescriptions;
for(unsigned int i = 0; i < [formatDesc count]; ++i) 
    CMAudioFormatDescriptionRef item = (CMAudioFormatDescriptionRef)[formatDesc objectAtIndex:i];
    const AudiostreamBasicDescription* bobTheDesc = CMAudioFormatDescriptionGetStreamBasicDescription (item);
    if(bobTheDesc && bobTheDesc->mChannelsPerFrame == 1) 
        mIsMono = true;
    

【讨论】:

【参考方案2】:

TurqMage 答案的 Swift 5 实现

//
//  AVAssetTrack+IsStereo.swift
//

import AVFoundation

extension AVAssetTrack 
    
    var isStereo: Bool 
        
        for item in (formatDescriptions as? [CMAudioFormatDescription]) ?? [] 
            
            let basic = CMAudioFormatDescriptionGetStreamBasicDescription(item)
            let numberOfChannels = basic?.pointee.mChannelsPerFrame ?? 0
            
            if numberOfChannels == 2 
                return true
            
        
        return false
    

【讨论】:

以上是关于从 AVAsset 中查找通道数的主要内容,如果未能解决你的问题,请参考以下文章

在 AVPlayer 中播放慢动作 AVAsset 的问题

请求 AVAsset 时维护顺序

目标c从NSFileManager文件路径加载AVAsset

无法正确反转 AVAsset 音频。唯一的结果是白噪声

MPMediaItem 到 AVAsset 到 .MP3

Cocoa:来自原始数据的 AVAsset(即 NSData)