如何播放音频文件 - .NET MAUI

问题描述 投票:0回答:5

我想在我的移动应用程序(Android 和 IOS)上播放声音 我在某些情况下播放声音。我该怎么办?

c# .net maui
5个回答
5
投票

.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


5
投票

使用 2 个插件即可轻松在 MAUI APP 中播放音频: 在 NuGet 包管理器中安装以下内容并在安装后使用依赖项注入!

  1. Plugin.Maui.Audiohttps://www.nuget.org/packages/Plugin.Maui.Audio/0.1.0-preview1?_src=template
  2. Plugin.MauiAudiohttps://www.nuget.org/packages/Plugin.MauiAudio/1.0.4?_src=template

2
投票

目前,毛伊岛没有任何音频播放框架。并且毛伊岛有一些相对已知的问题,您可以在这里关注:

https://github.com/dotnet/maui/issues/7152.

https://github.com/CommunityToolkit/Maui/issues/113

感谢您对毛伊岛的反馈和支持。


0
投票

应使用“file:///storage/...”而不是“filesystem:///storage/...”来读取 Android 中的本地媒体。


0
投票

这是我添加音频功能的方法,请注意,我测试时在.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

© www.soinside.com 2019 - 2024. All rights reserved.