ios 无法初始化AVAudioPlayer

mdfafbf1  于 2023-03-05  发布在  iOS
关注(0)|答案(3)|浏览(159)

在Xamarin.iOS应用程序中,AVAudioPlayer用于录制和播放一些音频文件。
用户录制和保存一些音频文件的速度非常快,当他试图播放其中一个文件时,会抛出一个System.Exception:

NSError error;
_player = new AVAudioPlayer(NSUrl.FromFilename(_audioPlaybackFilePath), "m4a", out error);

System.Exception:无法初始化类型"AVFoundation. AVAudioPlayer"的示例:本机"initWithContentsOfURL:fileTypeHint:error:"方法返回了nil。可以通过将MonoTouch. ObjCRuntime. Class. ThrowOnInitFailure设置为false来忽略此情况。
给定路径中的文件存在。
1.有迹象表明问题出在哪里吗?
1.有什么方法可以将MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure设置为异常堆栈跟踪中所述的false吗?

ljsrvy3e

ljsrvy3e1#

正如@SushilHangover所指出的,使用AVAudioPlayer.FromData并向其提供如下流:

theStream.Position = 0;
    AVAudioPlayer.FromData(NSData.FromStream(theStream));

并且,这一点非常重要,流始终定位为0。

zi8p0yeb

zi8p0yeb2#

我们在使用AVAudioPlayer的软件包Plugin.AudioRecorder中遇到此错误。我们可以通过向FinishedLaunching添加以下代码来修复此错误:

AudioPlayer.OnPrepareAudioSession = audioSession =>
{
    // maybe force audio to route to the speaker?
    var success = audioSession.OverrideOutputAudioPort (AVAudioSessionPortOverride.Speaker, out NSError error);
};
fcy6dtqo

fcy6dtqo3#

在我的情况下,这是因为我忘了指定文件的扩展名。正确的方法是这样做(即:mp3文件)为:

var soundResource = NSUrl.FromFilename("alert.mp3");

而不是

var soundResource = NSUrl.FromFilename("alert");

相关问题