2014-08-09 4 views
4

Я пытаюсь восстановить частоту дискретизации и количество каналов из аудиофайла. У меня во время исполнения "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]> 

Как бороться с этой ошибкой?

+0

Выглядит странно и для меня. Не вижу ничего плохого в вашем коде. Лично я бы, скорее всего, использовал массив в целом, а не отдельные элементы, но это приводит к той же ошибке (ловушка в dynamicCastUnknownClass, которая, как представляется, указывает, что CMAudioFormatDescription не является известным типом). Odd, при проверке formatDescriptions говорит, что он * является массивом CMAudioFormatDescription. –

+0

У той же проблемы. Вы решили? –

+0

Эрик Айгнер, на данный момент я запрограммировал частоту дискретизации, количество каналов и другую работу. Надеюсь, проблема будет исправлена ​​в следующей бета-версии/GM. В противном случае я вернусь к этой ошибке. – 5hrp

ответ

-1

В Swift и xcode 6 эта ошибка появляется иногда, если вы компилируете «быстрый уровень оптимизации» -O (самый быстрый). Попробуйте установить уровень оптимизации на -Одно в «Настройки сборки».

+1

Я делаю это в режиме отладки с помощью «Только одно», но спасибо за предложение – 5hrp