2010-07-18 16 views
13

क्या कोको से एमपी 3 फ़ाइल लोड करने, चलाने और नियंत्रित करने का कोई आसान तरीका है? इसे गुगल करने का प्रयास किया, लेकिन, सब कुछ सेब के रूप में, मुझे गन्दा परिणाम मिलते हैं और पता नहीं है कि कहां से शुरू करना है। जैसा कि मैं समझता हूं, वहां और एनएसएसएंड है, लेकिन इसमें बहुत सी सीमाएं हैं और फिर कोरऑडियो है, लेकिन यह बहुत मुश्किल है। तो क्या कोई मुझे इस के साथ सही दिशा में इंगित कर सकता है? धन्यवाद।कोको एक एमपी 3 खेल रहा है

+0

क्षमा करें, क्या आप आईओएस या मैक के लिए विकास कर रहे हैं? – shosti

+1

हां, क्षमा करें, स्पष्टीकरण भूल गए: AVAudioPlayer काम नहीं करेगा: मैं ओएसएक्स – Marius

+1

के लिए विकास कर रहा हूं मैक ओएस एक्स 10.7 शेर (संभवतः यहां तक ​​कि 10.6.8?) AVFoundation काम करता है! इसलिए, AVAudioPlayer .. नीचे उत्तर देखें .. – Mazyod

उत्तर

39

जी उठने:

क्यों इस सवाल को फिर से शुरू? क्योंकि गुगलिंग "कोको एमपी 3 खेल रहा है" मुझे यहां ले जाता है, और कोई शानदार 2012 जवाब नहीं है। तो, यहां शानदार 2012 का जवाब है;)

AVFoundation का उपयोग करें! सेब के मुताबिक, इसे मैक ओएस एक्स शेर (मुझे लगता है) के साथ एकीकृत किया गया है, इसलिए .. एमपी 3 को दर्द रहित तरीके से कैसे खेलें:

1- AVFoundation फ्रेमवर्क को लिंक करें।

2- आयात यह भी आप अपने भयानक एमपी 3 खेलने के लिए

#import <AVFoundation/AVFoundation.h> 

3- (मैं इसे कैसे करना पसंद ऐसा इसलिए है, कम से कम) ध्वनि चलाने के लिए एक Audioplayer उदाहरण चर जोड़ें चाहते

@interface WCMainWindow : ... { 
    ... 
    AVAudioPlayer* audioPlayer; 
} 

4- आप init में, सुनिश्चित करें कि आप अपने Audioplayer प्रारंभ करना:

NSString* path = [[NSBundle mainBundle] pathForResource:@"myFile" ofType:@"mp3"]; 
NSURL* file = [NSURL fileURLWithPath:path]; 
// thanks @gebirgsbaerbel 

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil]; 
[audioPlayer prepareToPlay]; 

5- खेलते हैं अपने भयानक Mp3 !!

if ([audioPlayer isPlaying]) { 
    [audioPlayer pause]; 
} else { 
    [audioPlayer play]; 
} 

अंत में, क्रेडिट this guy पर जाता है।

+0

आप यह जानने के लिए कैसे परीक्षण करते हैं कि आप इसका उपयोग कर सकते हैं या नहीं? – Mark

+0

आपका क्या मतलब है? समझाए गए चरणों के माध्यम से जाएं, और सुनिश्चित करें कि आप अपने संसाधनों में एमपी 3 फ़ाइल जोड़ते हैं। फिर, एक बटन (एक्शन) जोड़ें जो '[ऑडियोप्लेयर प्ले]' – Mazyod

+2

पर कॉल करेगा विधि URLWithString हमेशा मेरे लिए शून्य लौटाता है। '[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource का उपयोग करके: @" myFile "टाइप: @" एमपी 3 "]]; 'इसके बजाय समस्या को ठीक किया गया। –

5

मैं सी में एक रूपरेखा ++ कि मदद कर सकता है लिखा है: http://github.com/sbooth/SFBAudioEngine

यह कई ऑडियो स्वरूपों का समर्थन करता है और एक काफी सौम्य एपीआई है और एक कोको नमूना के साथ आता है।

यदि आप तीसरे पक्ष के ढांचे में रुचि नहीं रखते हैं, तो संभवतः प्लेबैक की देखभाल करने के लिए आपकी शर्त ऑडियोक्यूयू का उपयोग करना होगा। ऐसा करने के लिए, आप प्लेबैक के लिए एमपी 3 और ऑडियोक्यूयू को डीकोड करने के लिए शायद ऑडियोफाइल का उपयोग करेंगे। ऐप्पल का उदाहरण http://developer.apple.com/mac/library/samplecode/AudioQueueTools/Introduction/Intro.html

0

NSSound के अलावा, आप QTMovieView पर विचार कर सकते हैं। यह अजीब लगता है, लेकिन आप अपनी खिड़की में QTMovieView छुपा सकते हैं और एमपी 3 चलाने के लिए इसका इस्तेमाल कर सकते हैं।

जोड़ा गया: QTMovieView ओएस 10.9 के रूप में बहिष्कृत है। इसलिए जब तक आपको 10.7 से पहले ओएस संस्करणों का समर्थन करने की आवश्यकता नहीं है (जब AVFoundation मैक में आया था), तो शायद आपको इसका उपयोग नहीं करना चाहिए।

+0

मैंने बिना किसी विचार के QTKit के उदाहरण भी देखे हैं, लेकिन मुझे यकीन नहीं है कि यह करने का यह एक अच्छा तरीका है, क्योंकि मुझे फ़ाइल नहीं मिली है या शायद बाद में कुछ प्रभाव भी जोड़ सकते हैं। – Marius

+0

मुझे यकीन नहीं है कि "फ़ाइल ढूंढना" से आपका क्या मतलब है। – JWWalker

+0

ठीक है, सरल शब्दों में, कुछ विशिष्ट स्थिति पर जाएं और वहां से खेलना जारी रखें। – Marius

1

NSSound का उपयोग करें।

आपने "सीमाओं की बहुत सी" से आपका मतलब निर्दिष्ट नहीं किया है, इसलिए मुझे नहीं पता कि यह आपके लिए क्यों काम नहीं करेगा। ध्यान दें कि तेंदुए के बाद इसकी बहुत कम सीमाएं हैं; अब आप किसी भी डिवाइस पर खेल सकते हैं, उदाहरण के लिए। प्रगति में

1
#import <Cocoa/Cocoa.h> 
#import <QTKit/QTKit.h> 

@interface SoundPlayer : NSObject { 
    NSSound *sound; 
    IBOutlet NSWindow *window; 
    IBOutlet NSSlider *progress; 
    BOOL loop; 
} 
- (IBAction)open: (id)sender; 
- (IBAction)setLoop: (id)sender; 
- (IBAction)play: (id)sender; 
- (IBAction)stop: (id)sender; 
- (IBAction)takeCurrentTimeFrom: (id)sender; 
@end 

#import "SoundPlayer.h" 

@implementation SoundPlayer 
- (IBAction)open: (id)sender 
{ 
    NSOpenPanel *openPanel = [NSOpenPanel openPanel]; 
    [openPanel runModalForTypes: [NSArray arrayWithObjects: @"aiff", @"mp3", @"m4a", nil]]; 
    [sound release]; 
    sound = [[QTMovie movieWithFile: [openPanel filename] 
           error: NULL] retain]; 
    [sound setAttribute: [NSNumber numberWithBool: loop] 
       forKey: QTMovieLoopsAttribute]; 
    [window setTitle: [[openPanel filename] lastPathComponent]]; 
} 
- (IBAction)setLoop: (id)sender 
{ 
    loop = ([sender state] == NSOnState); 
    [sound setAttribute: [NSNumber numberWithBool: loop] 
       forKey: QTMovieLoopsAttribute]; 
} 
- (IBAction)play: (id)sender 
{ 
    NSTimeInterval duration; 
    QTGetTimeInterval([sound duration], &duration); 
    [progress setMaxValue: duration]; 
    [NSTimer scheduledTimerWithTimeInterval: 0.1 
            target: self 
            selector: @selector(updateIndicator:) 
            userInfo: sound 
            repeats: YES]; 
    [sound play]; 
} 
- (void)updateIndicator: (NSTimer*)aTimer 
{ 
    QTMovie *playingSound = [aTimer userInfo]; 
    if (!(sound == playingSound && ([sound rate] != 0))) 
    { 
     [aTimer invalidate]; 
     return; 
    } 
    NSTimeInterval currentTime; 
    QTGetTimeInterval([sound currentTime], &currentTime); 
    [progress setDoubleValue: currentTime]; 
} 
- (IBAction)stop: (id)sender 
{ 
    [sound stop]; 
} 
- (IBAction)takeCurrentTimeFrom: (id)sender 
{ 
    [sound setCurrentTime: QTMakeTimeWithTimeInterval([sender doubleValue])]; 
} 
@end 
संबंधित मुद्दे