2011-05-11 31 views
15

मैं रिंगटोन खेलने के लिए एक ऐप बना रहा हूं और मैं हर बार खेले गए रिंगटोन के मिलीसेकंड में वर्तमान समय जानना चाहता हूं।ऑब्जेक्टसी/सीएमटाइम - AVPlayer.duration को मिलीसेकंड में परिवर्तित करें

सीएमटाइम cTime = player_.currentTime; फ्लोट वर्तमान समय = cTime.value/cTime.timescale;

कि वर्तमान समय यहां सेकंड में मान प्राप्त करता है। मैं सटीक वर्तमान समय मान कैसे प्राप्त कर सकता हूं लेकिन मिलीसेकंड में?

उत्तर

52

, एक तरह से सेकंड में वर्तमान समय प्राप्त करना नहीं है आप 1000 बार ले जा सकते हैं कि और वहाँ आप अपने मिलीसेकंड है:

Float64 dur = CMTimeGetSeconds([player currentTime]); 
Float64 durInMiliSec = 1000*dur; 

दुर्भाग्य से आप एक float के रूप में उपयोग करना होगा या Float64 आप कर सकते हैं ' टी CMTime

+0

लेकिन हम इस फ़्लोट मान को निम्न कार्य में कैसे पारित कर सकते हैं? - (बूल) insertTimeRange: (CMTimeRange) timeRange ofTrack: (AVAssetTrack *) ट्रैक atTime: (CMTime) स्टार्टटाइम त्रुटि: (NSError **) त्रुटि; क्योंकि यह पैरामीटर के रूप में सीएमटाइम लेता है। – Developer

+0

आप मूल समय (सेकेंड में) का उपयोग कर सकते हैं और CMTimeMake फ़ंक्शन का उपयोग करके उस मान के साथ एक सीएमटाइम बना सकते हैं। – Samssonart

2

सीएमटीम.वल्यू और सीएमटाइम। टाइम्सकेल दोनों पूर्णांक हैं, इसलिए आपके कोड द्वारा निर्णय लेना, परिणाम गोल हो जाता है और आपको सटीक टाइमस्टैम्प नहीं मिलता है। इसके बजाय CMTimeGetSeconds आज़माएं।

4

के रूप में परिणाम का उपयोग करें मुझे लगता है कि स्वीकृत उत्तर विस्तार खो देता है। एक अधिक सटीक तरीका मिलीसेकेंड पाने के लिए निम्न होगा:

let seconds : Double = Float64(time.value * 1000)/Float64(time.timescale) 

आप सेकंड में बदलने का है, तो पहले आप परिशुद्धता खो देंगे।

+0

यह गलत है। सीएमटाइम गेटसेकंड्स पर ऐप्पल के दस्तावेज से "विभाजन फ़्लोट 64 में किया जाता है, इसलिए लौटा परिणाम में अंश खो नहीं जाता है।" – amergin