Доброе утро.
Прежде всего, я изучаю 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, но я не знаю точную проблему, когда я прочитал официальный документ.
Как решить проблему и получить результаты, описанные выше?
Заранее спасибо.