2016-12-12 12 views
0

Доброе утро.
Прежде всего, я изучаю Swift, и я не начал разрабатывать IOS менее чем за 3 недели.
И я хочу реализовать функцию записи музыкального файла текущего пользователя (mp3) и отобразить и воспроизвести осциллограмму.
Мы используем открытый источник SCWaveformView для отображения формы сигнала.Я не знаю, как правильно использовать CMTimeRange и CMTime в Swift или Objc

Это SCWaveformView! Использование упомянутой выше библиотеки выглядит следующим образом.

 

    // Setting the asset 
    AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:@"blabla.mp3"]]; 
    waveformView.asset = asset; 

    // Show only the first second of your asset 
    waveformView.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(1, 1)); 

    // Use it inside a scrollView 
    SCScrollableWaveformView *scrollableWaveformView = [SCScrollableWaveformView new]; 
    scrollableWaveformView.waveformView; // Access the waveformView from there 

Например, у меня есть файл MP3 объемом 3 минуты 25 секунд.
Вы можете отобразить 15-секундную форму волны для этого файла пользователю и прокрутить, чтобы увидеть дополнительные формы сигнала.
Иными словами, максимальная длина видимого пользователем сигнала составляет 15 секунд.
Вы можете прокручивать формы сигналов и просматривать файлы MP3 с шагом 15 секунд.
С помощью прокрутки Если время начала составляет 2 минуты и 15 секунд, вы можете увидеть форму волны до 2 минут и 30 секунд.
Если время начала составляет 2 минуты и 20 секунд, вы можете увидеть форму волны до 2 минут 45 секунд.

Библиотека, похоже, не проблема, но у меня возникли проблемы с пониманием CMTimeRange и CMTime.
Прокрутка медленная и иногда не работает. появляется следующее сообщение об ошибке:

 
2016-12-12 15:29:03.568654 AppName[7765:2094292] CMTimeMakeWithSeconds(0.200 seconds, timescale 1): warning: error of -0.200 introduced due to very low timescale 
2016-12-12 15:29:03.584947 AppName[7765:2094292] CMTimeMakeWithSeconds(0.240 seconds, timescale 1): warning: error of -0.240 introduced due to very low timescale 
2016-12-12 15:29:03.585166 AppName[7765:2094292] CMTimeMakeWithSeconds(0.240 seconds, timescale 1): warning: error of -0.240 introduced due to very low timescale 
2016-12-12 15:29:03.602243 AppName[7765:2094292] CMTimeMakeWithSeconds(0.280 seconds, timescale 1): warning: error of -0.280 introduced due to very low timescale 
2016-12-12 15:29:03.618334 AppName[7765:2094292] CMTimeMakeWithSeconds(0.460 seconds, timescale 1): warning: error of -0.460 introduced due to very low timescale 
2016-12-12 15:29:03.634987 AppName[7765:2094292] CMTimeMakeWithSeconds(0.480 seconds, timescale 1): warning: error of -0.480 introduced due to very low timescale 
2016-12-12 15:29:03.651538 AppName[7765:2094292] CMTimeMakeWithSeconds(0.480 seconds, timescale 1): warning: error of -0.480 introduced due to very low timescale 
2016-12-12 15:29:03.668358 AppName[7765:2094292] CMTimeMakeWithSeconds(0.720 seconds, timescale 1): warning: error of -0.720 introduced due to very low timescale 
2016-12-12 15:29:03.697401 AppName[7765:2094292] CMTimeMakeWithSeconds(0.340 seconds, timescale 1): warning: error of -0.340 introduced due to very low timescale 
2016-12-12 15:29:03.715348 AppName[7765:2094292] CMTimeMakeWithSeconds(0.480 seconds, timescale 1): warning: error of -0.480 introduced due to very low timescale 

Мой проблематичной код ниже.

let musicAsset = AVAsset(url: (item?.assetURL)!) 

    self.scwaveScrollView.waveformView.asset = musicAsset 

    self.scwaveScrollView.waveformView.precision = 0.25 

    self.scwaveScrollView.waveformView.timeRange = CMTimeRangeMake(self.scwaveScrollView.waveformView.timeRange.start, CMTimeMakeWithSeconds(15, 1)); 

Я думаю, что я недопонимание CMTimeRange и CMTime, но я не знаю точную проблему, когда я прочитал официальный документ.
Как решить проблему и получить результаты, описанные выше?
Заранее спасибо.

This is the current state.

ответ

0

я решил вышеуказанную проблему с кодом ниже.

let musicAsset = AVAsset(url: (item?.assetURL)!) 

    self.scwaveScrollView.waveformView.asset = musicAsset 
    self.scwaveScrollView.waveformView.precision = 1 

    var duration = CMTimeMakeWithSeconds(1.0 * CMTimeGetSeconds(self.scwaveScrollView.waveformView.asset.duration), 100000) 

    self.scwaveScrollView.waveformView.timeRange = CMTimeRangeMake(CMTimeMakeWithSeconds(0, 10000), duration); 
    let start = self.scwaveScrollView.waveformView.timeRange.start 
    duration = CMTime(seconds: 15, preferredTimescale: 1) 

    self.scwaveScrollView.waveformView.timeRange = CMTimeRangeMake(start, duration)