使用 iPhone SDK 播放 MP3 文件 [关闭]

Posted

技术标签:

【中文标题】使用 iPhone SDK 播放 MP3 文件 [关闭]【英文标题】:Play MP3 Files with iPhone SDK [closed] 【发布时间】:2009-12-29 10:19:10 【问题描述】:

用暂停按钮播放音乐文件(如 Mp3)最简单的方法是什么? 非常非常简单,一个按钮播放,另一个按钮暂停音乐

【问题讨论】:

【参考方案1】:

这些是请求操作的代码, appSoundPlayer 是在 h 文件中声明的 AVAudioPlayer 的一个属性。此示例还播放资源文件夹中的歌曲。

#pragma mark -
    #pragma mark *play*
    - (IBAction) playaction 

        NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"songname" ofType:@"mp3"];
        NSURL *newURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
        self.soundFileURL = newURL;
        [newURL release];
        [[AVAudiosession sharedInstance] setDelegate: self];
        [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];

    // Registers the audio route change listener callback function
    AudioSessionAddPropertyListener (
                                     kAudioSessionProperty_AudioRouteChange,
                                     audioRouteChangeListenerCallback,
                                     self
                                     );

    // Activates the audio session.

    NSError *activationError = nil;
    [[AVAudioSession sharedInstance] setActive: YES error: &activationError];

    AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: soundFileURL error: nil];
    self.appSoundPlayer = newPlayer;
    [newPlayer release];
    [appSoundPlayer prepareToPlay];
    [appSoundPlayer setVolume: 1.0];
    [appSoundPlayer setDelegate: self];
    [appSoundPlayer play];


    [stopbutton setEnabled:YES];
    [playbutton setEnabled: NO];
    playbutton.hidden=YES;
    pausebutton.hidden =NO;
//playbutton touch up inside

#pragma mark -
#pragma mark *pause*
-(IBAction)pauseaction 
    [appSoundPlayer pause];
    pausebutton.hidden = YES;
    resumebutton.hidden = NO;

//pausebutton touch up inside

#pragma mark -
#pragma mark *resume*
-(IBAction)resumeaction
    [appSoundPlayer prepareToPlay];
    [appSoundPlayer setVolume:1.0];
    [appSoundPlayer setDelegate: self];
    [appSoundPlayer play];
    playbutton.hidden=YES;
    resumebutton.hidden =YES;
    pausebutton.hidden = NO;

//resumebutton touch up inside

#pragma mark -
#pragma mark *stop*
-(IBAction)stopaction

    [appSoundPlayer stop];
    [playbutton setEnabled:YES];
    [stopbutton setEnabled:NO];
    playbutton.hidden=NO;
    resumebutton.hidden =YES;
    pausebutton.hidden = YES;

//stopbutton touch up inside

【讨论】:

你有本教程的示例代码吗? 这些错误是因为您没有在 h 文件中声明它们。 此代码是否适用于 NSURL ...从服务器播放音频缓冲?【参考方案2】:

对于短声音或 MP3 在建议的代码上播放不佳时,您可以随时使用:

SystemSoundID soundID; 
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/sound.mp3", [[NSBundle mainBundle] resourcePath]]];

AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID); 
AudioServicesPlaySystemSound (soundID);

别忘了补充:

#import <AudioToolbox/AudioToolbox.h>

【讨论】:

谢谢,为我工作。使用 ARC:AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);【参考方案3】:

here 是一个很好的教程。

主题是

NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3", [[NSBundle mainBundle] resourcePath]]];

    NSError *error;
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = -1;

[audioPlayer play];

当你想暂停时;

[audioPlayer pause];

希望这会有所帮助。

【讨论】:

非常感谢我喜欢***.com,当然还有你:D 好的,我又有问题了。当我多次点击播放按钮时,音乐会不断播放......!怎么可以播放音乐1次?关于暂停按钮,谁在工作?对不起,我是业余爱好者:【参考方案4】:

恐怕上述答案在 iOS 7 及更高版本中不再适用。您将需要使用以下代码:

在头文件(.h)中

为了处理像音频播放结束时这样的委托方法 audioPlayerDidFinishPlaying:,继承自 AVAudioPlayerDelegate 。

@property (nonatomic, strong) AVAudioPlayer *player;

在实施文件 (.m) 中

 NSString *soundFilePath = [[NSBundle mainBundle] pathForResource: resourceName
                                                          ofType: @"mp3"];
 NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];

 AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
                                                                  error: nil];
_player = newPlayer;
[_player prepareToPlay];
[_player setDelegate: self];
[_player play];

【讨论】:

【参考方案5】:

我喜欢简单的代码,这是我的解决方案:(记得添加切换按钮来播放音乐。玩得开心)

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()

    NSURL*                  bgURL;
    AVAudioPlayer*          bgPlayer;

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    bgURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp3"]];
    bgPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:bgURL error:nil];


#pragma mark AVAudioPlayer
- (IBAction)toggleMusic:(UISwitch*)sender 
    NSLog(@"togging music %s", sender.on ? "on" : "off");

    if (bgPlayer) 

        if (sender.on) 
            [bgPlayer play];
        
        else 
            [bgPlayer stop];
        
       

【讨论】:

【参考方案6】:

The Apple documentation here 应该有你需要知道的一切。

【讨论】:

【参考方案7】:

DIRAC API 是免费的并且非常易于使用。 我们在我的会说话的机器人应用程序http://itunes.apple.com/us/app/daidai/id484833168 中使用了它,它如何设法改变声音的速度和音调让我感到惊讶

http://www.dspdimension.com/download/

【讨论】:

【参考方案8】:

Apple iOS 开发者网站上的oalTouch 示例代码可以满足您的需求,并且可以运行。

它还展示了如何测试另一个应用程序(例如 ipod)是否已经在播放文件,如果您想让您的用户听他们自己的音乐而不是您的音乐,这很方便。

【讨论】:

以上是关于使用 iPhone SDK 播放 MP3 文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone sdk 上播放 mp3?

如何在iphone sdk的Touch down事件中设置增加声音的速率并重复这个声音

可以在 iphone sdk 中录制 mp3 吗?

在 iPhone 上同时播放多首 MP3 歌曲

使用 iPhone SDK 播放音频

在 iphone 上通过 http 套接字播放 mp3 音频