我想在我的移动应用程序(Android 和 IOS)上播放声音 我在某些情况下播放声音。我该怎么办?
.NET Maui(2023 年 2 月),仍在 VS2022 上预览。
.NET MAUI 中还有另一种播放音频/视频(mp3/mp4)的方法: MediaElement 控制 Communitytoolkit (CommunityToolkit.Maui.MediaElement),支持 Android/iOS/Windows/Tizen/Mac。使用 NUGet 进行安装。
使用 BuildAction=MauiAsset 将本地文件放入“Resources/Raw”中
内容页面内部(xaml/c#)
<toolkit:MediaElement x:Name="correctMediaElement" IsVisible="false"
Source="embed://crrect_answer2.mp3" />
internal static void PlaySound(MediaElement me)
{
var preset = MauiProgram.Preset;
if (me.CurrentState != CommunityToolkit.Maui.Core.Primitives.MediaElementState.Stopped &&
me.CurrentState != CommunityToolkit.Maui.Core.Primitives.MediaElementState.Paused)
{
me.Stop();
}
if (preset != null)
{
switch (preset.BuzzerVolume)
{
case Volume.Off:
me.Volume = 0.0;
break;
case Volume.Low:
me.Volume = 0.2;
break;
case Volume.Medium:
me.Volume = 0.7;
break;
case Volume.High:
me.Volume = 1.0;
break;
default:
break;
}
}
if (me.Position != TimeSpan.Zero)
{
//Will Play sound here
me.SeekTo(TimeSpan.Zero);
}
else if (me.CurrentState != CommunityToolkit.Maui.Core.Primitives.MediaElementState.Playing)
{
me.Play();
}
}
欲了解更多信息:
MediaElement 文档
DevBlogs.Microsoft.com
使用 2 个插件即可轻松在 MAUI APP 中播放音频: 在 NuGet 包管理器中安装以下内容并在安装后使用依赖项注入!
目前,毛伊岛没有任何音频播放框架。并且毛伊岛有一些相对已知的问题,您可以在这里关注:
https://github.com/dotnet/maui/issues/7152.
https://github.com/CommunityToolkit/Maui/issues/113
感谢您对毛伊岛的反馈和支持。
应使用“file:///storage/...”而不是“filesystem:///storage/...”来读取 Android 中的本地媒体。
这是我添加音频功能的方法,请注意,我测试时在.NET 6中使用了MAUI Blazor。
添加 Nuget 包:
<ItemGroup>
<PackageReference Include="Plugin.Maui.Audio" Version="2.0.0" />
</ItemGroup>
在 MauiProgram.cs 内,添加服务
using Plugin.Maui.Audio;
namespace MultiLingual.Translator;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
builder.Services.AddMauiBlazorWebView();
#if DEBUG
builder.Services.AddBlazorWebViewDeveloperTools();
#endif
builder.Services.AddSingleton(AudioManager.Current);
//more code ..
重要一点是-
builder.Services.AddSingleton(AudioManager.Current);
在 MAUI 页面内,接下来只需注入 AudioManager,我将其注入到 razor 文件中。
@inject IAudioManager AudioManager
如果你想通过 DI 注入它,请将其传递到后面代码的构造函数中。
然后按照我的示例中的方式播放音频文件,在我的示例代码中,我编写了一个文本到语音演示,并从 Azure AI 认知服务 - 语音服务下载了一个语音文件。数组 VoiceData 包含一个字节数组,我在首次将文件写入 appdata 文件夹后播放该数组。
var voiceFolder = Path.Combine(FileSystem.Current.AppDataDirectory, "Resources", "Raw");
if (!Directory.Exists(voiceFolder))
{
Directory.CreateDirectory(voiceFolder);
}
string voiceFile = "textToSpeechVoiceOutput_" + Model.TargetLanguage + Guid.NewGuid().ToString("N") + ".mpga";
string voiceRelativeFile = Path.Combine(voiceFile);
string voiceFileFullPath = Path.Combine(voiceFolder, voiceFile);
await File.WriteAllBytesAsync(voiceFileFullPath, textToSpeechResult.VoiceData);
Stream voiceStream = File.OpenRead(voiceFileFullPath);
StateHasChanged();
var player = AudioManager.CreatePlayer(voiceStream);
player.Play();
重要的一点是最后两行,我们创建一个文件流并通过传入流的AudioManager.CreatePlayer方法创建一个播放器实例。 然后我们只需调用 Play 方法来播放音频。如果需要,您可以拥有多个播放器实例,例如一次播放多个声音。
重要一点是-
var player = AudioManager.CreatePlayer(voiceStream);
player.Play();
我测试的音频是这种格式:
audio-24khz-48kbitrate-mono-mp3
换句话说,在 .NET MAUI 中开始使用音频并不复杂。如果您的音频需要某些库/编解码器,则该库可能不支持此功能。
Plugin.Maui.Audio 的网站在这里: https://github.com/jfversluis/Plugin.Maui.Audio