Я пытаюсь восстановить частоту дискретизации и количество каналов из аудиофайла. У меня во время исполнения "EXC_BREAKPOINT (код = EXC_ARM_BREAKPOINT)" ошибка в этой строке:Swift. EXC_BREAKPOINT при получении CMAudioFormatDescription
let audioFormstDesc = descriptions[0] as CMAudioFormatDescription
Это самый простой вариант кода я использую:
import AVFoundation
import CoreMedia
import MediaPlayer
class ViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
let query = MPMediaQuery.songsQuery()
let song = query.items[0] as MPMediaItem
let url = song.valueForProperty(MPMediaItemPropertyAssetURL) as NSURL
let songAsset = AVURLAsset.URLAssetWithURL(url, options: nil)
let trackAsset = songAsset.tracks[0] as AVAssetTrack
if let descriptions = trackAsset.formatDescriptions
{
let audioFormstDesc = descriptions[0] as CMAudioFormatDescription
let streamBasicDescription = CMAudioFormatDescriptionGetStreamBasicDescription(audioFormstDesc)
}
}
}
В Objective-C этот код работает только право:
MPMediaQuery *query = [MPMediaQuery songsQuery];
MPMediaItem *song = [[query items] objectAtIndex:0];
NSURL *url = [song valueForProperty: MPMediaItemPropertyAssetURL];
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:url options:nil];
AVAssetTrack *trackAsset = songAsset.tracks[0];
UInt32 sampleRate = 0, channelCount = 0;
NSArray* descriptions = trackAsset.formatDescriptions;
CMAudioFormatDescriptionRef audioFormstDesc = (__bridge CMAudioFormatDescriptionRef)descriptions[0];
const AudioStreamBasicDescription* audioStreamDesc = CMAudioFormatDescriptionGetStreamBasicDescription(audioFormstDesc);
if(audioStreamDesc)
{
sampleRate = audioStreamDesc->mSampleRate;
channelCount = audioStreamDesc->mChannelsPerFrame;
}
println(descriptions[0])
печатает в консоли:
<CMAudioFormatDescription 0x15d3b690 [0x387e5ad0]>
Как бороться с этой ошибкой?
Выглядит странно и для меня. Не вижу ничего плохого в вашем коде. Лично я бы, скорее всего, использовал массив в целом, а не отдельные элементы, но это приводит к той же ошибке (ловушка в dynamicCastUnknownClass, которая, как представляется, указывает, что CMAudioFormatDescription не является известным типом). Odd, при проверке formatDescriptions говорит, что он * является массивом CMAudioFormatDescription. –
У той же проблемы. Вы решили? –
Эрик Айгнер, на данный момент я запрограммировал частоту дискретизации, количество каналов и другую работу. Надеюсь, проблема будет исправлена в следующей бета-версии/GM. В противном случае я вернусь к этой ошибке. – 5hrp