gpt4 book ai didi

audio - 以xamarin形式播放下载的mp3

转载 作者:行者123 更新时间:2023-12-03 00:33:37 26 4
gpt4 key购买 nike

我可以通过调用以下文件来播放文件“test.mp3”作为资源添加到我的pcl项目的“Resources \ Sounds \”文件夹中
AudioManager.Audio.Manager.PlaySound("test.mp3");
现在,我正在尝试播放从webapi服务下载的音频文件。我正在使用RestSharp库下载文件,并使用PCLStorage库存储文件:

try
{
var fileId = new Guid("test2");
IFolder rootFolder = FileSystem.Current.LocalStorage;
IFolder resources = await rootFolder.CreateFolderAsync("Resources", CreationCollisionOption.OpenIfExists);
IFolder soundsFolder = await rootFolder.CreateFolderAsync("Sounds", CreationCollisionOption.OpenIfExists);
IFile myFile = await soundsFolder.CreateFileAsync($"{fileId}.mp3", CreationCollisionOption.ReplaceExisting);
using (var stream = await myFile.OpenAsync(fileAccess: FileAccess.ReadAndWrite))
{

var request = new RestRequest($"{fileId}");
var client = new RestClient();
client.BaseUrl = new System.Uri("http://10.0.2.2/MyApp.WebApi/api/");
var bytes = client.DownloadData(request);
foreach (var myByte in bytes)
{
stream.WriteByte(myByte);
}
}
}
catch (Exception e)
{

}

我也尝试将文件保存到根目录,但这也不起作用。

据我所知,该文件似乎下载得很好(没有错误)。但是我还没有找到一种方法来通过在android模拟器上定位文件来验证这一点。我想我首先需要以某种方式安装Play商店,然后下载ES File Explorer,以查看android模拟器上的文件结构。

问题是,当我尝试以与嵌入资源相同的方式播放声音文件时,它将无法正常工作。
AudioManager.Audio.Manager.PlaySound("test2.mp3");
我猜这是由于在编译期间发生的魔术将嵌入式资源迁移到android仿真器上的“某处”。
我的主要问题是我不知道该使用哪种路径
  • 写入文件(尝试过的资源/声音和根目录)
  • 读取文件(尝试
    资源/声音和根)

  • 为了能够播放文件

    最佳答案

    事实证明,AudioManager库假定声音始终是素材资源。
    NewSound method in the android code中,它尝试使用以下行来构建AssetFileDescriptor:

    Forms.Context.Assets.OpenFd(filePath);



    我猜想此方法需要相对于Assets文件夹的文件路径(用于已编译资源),否则抛出FileNotFoundException。但是,抛出此异常并没有到达我的pcl代码中的catch语句。 (看起来它被吞没在android-> pcl层中的某个地方了?)

    现在,我将SoundPool.LoadAsync与文件路径而不是AssetFileDescriptor一起使用,这可以解决我的问题。

    好极了!

    关于audio - 以xamarin形式播放下载的mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44749741/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com