2012-12-27 13 views
6

Tworzę aplikację, w której muszę miksować utwory. Osiągnąłem to, ale problem występuje, gdy używam następującej funkcji.Jak przekazywać wartość zmiennoprzecinkową gdzie typem danych jest CMTime?

- (BOOL)insertTimeRange:(CMTimeRange)timeRange ofTrack:(AVAssetTrack *)track atTime:(CMTime)startTime error:(NSError **)error; 

muszę przechodzić CMTime wartość typu w atTime parametru ale nie bierze Float wartości i muszę dodać kolejny utwór w pewnym wartości zmiennoprzecinkowej. Czy to możliwe?

Odpowiedz

14

Możesz użyć jednego z CMTimeMake...()functions. Musisz podać punkt czasowy i wartość czasu. Pierwsza to 64-bitowa liczba całkowita; można po prostu obciąć lub okrągłe swojej float przekonwertować go na liczbę całkowitą, lub użyć koniecznie dużą skalę czasu:

CMTime tm = CMTimeMake(53425, 10000); // @ 5.3425 sec 
+0

Nie potrzeba wartość całkowitą. Oto przykład: Załóżmy, że jest piosenka o czasie trwania 10 sekund i muszę wymieszać jeszcze jedną piosenkę o 5.3425 sekundach. Ale ponieważ parametr "atTime" pobiera tylko wartość CMTime i jest całkowitą oraz gdy używam CMTimeMake (5.3425, 1.0); zwróci mi 5.00000, a utwór zostanie dodany o 5.00000, a nie o 5.3425. – Developer

+0

@Harsh Dlaczego nie możesz po prostu ustawić skali czasu na coś rozsądnego? Na przykład 5.3425 może być reprezentowany jako 'CMTimeMake (53425, 10000)' ... –

+1

To zadziałało! :-) Zaakceptowałeś odpowiedź! Dzięki, ale dlaczego nie działa z CMTimeMake (5.3425, 1.0) ;? – Developer

Powiązane problemy