使用 monotouch 播放 mp3
Posted
技术标签:
【中文标题】使用 monotouch 播放 mp3【英文标题】:play mp3 with monotouch 【发布时间】:2011-10-12 20:13:21 【问题描述】:我正在使用 monotouch 构建一个应用程序。基本上我需要在应用程序加载后立即播放 mp3。 在 main.cs 上,我在推送主控制器之前添加了这个 sn-p:
AVAudioPlayer player = new AVAudioPlayer();
NSUrl mediaFile = NSUrl.FromFilename("Content/Audio/music1.mp3");
player = AVAudioPlayer.FromUrl(mediaFile);
player.Delegate = new PlayerDelegate();
if(player.PrepareToPlay())
player.Play();
但是当我启动应用程序时,我可以听到大约半秒钟的声音,然后什么也听不见。 这段代码是正确的还是有什么问题?
谢谢
【问题讨论】:
【参考方案1】:如果没有更多上下文(例如更多代码),很难提供答案 :-)
我怀疑你的AVAudioPlayer
,如果用作局部变量,当方法(是FinishedLaunching
?)返回时,垃圾收集器(GC)可能会收集它。
如果是这种情况,那么提升您的本地 player
变量到一个字段中将确保对 AVAudioPlayer
实例的引用保持不变,并且应该允许它在不被中断(或崩溃)的情况下播放)。
如果我错了,请编辑您的问题并为我们提供更多背景信息,我们应该能够为您提供进一步的帮助。
【讨论】:
我只是调用了一个函数来从 public override bool FinishedLaunching (UIApplication app, NSDictionary options) PlayAudio();并且 PlayAudio 函数包含我的问题的代码 抱歉,状态不清楚?它有效吗(我假设是这样,因为您接受了答案)?要记住的重要一点是player
继续工作/播放 after FinishedLaunching
返回,因此该对象的实例仍然需要 alive (而不是收集)。
是的,我将变量提升到一个字段中并且它起作用了。我认为问题与 GC 的操作有关。非常感谢 poupou【参考方案2】:
尝试注册 AVAudioPlayerDelegate 并在 audioPlayerEndInterruption 方法中重新开始音乐备份。
【讨论】:
嗨拉方索,感谢您的回复。我试过这样的东西:AVAudioPlayer player = new AVAudioPlayer();
NSUrl mediaFile = NSUrl.FromFilename("Content/Audio/music1.mp3");
player = AVAudioPlayer.FromUrl(mediaFile);
player.Delegate = new AVAudioPlayerDelegate();
player.EndInterruption += delegate(object sender, EventArgs e)
`player.Play();`;
if(player.PrepareToPlay())
`player.Play();`
最坏的。应用程序在开始播放时崩溃
我对MonoTouch不太熟悉,但是我知道在Objective-C中开发的时候,Xcode在项目中添加资源时会默默地做很多事情。确保没有可能的文件格式错误(尝试 .wav),或从主包加载文件。一个例子在这里:[链接]techotopia.com/index.php/…【参考方案3】:
现在真的很容易:
//enable audio
Audiosession.Initialize();
//load the sound
sound = SystemSound.FromFile("Sounds/rev.wav");
sound.PlaySystemSound();
【讨论】:
以上是关于使用 monotouch 播放 mp3的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MonoTouch 在 iPhone 上播放视频?