0

我在 Xamarins 论坛上问过这个问题,但没有人回答,我希望这个论坛可以为我提供答案。

我的问题是如何在 android 上播放共享项目中的 mp3 文件。

我正在制作一个 Xamarin Forms 项目并使用接口来制作特定于平台的代码来播放 mp3 文件。

我在我的共享项目中嵌入了 360 mp3 文件,并将文件传递到界面以使 mp3 播放。

AudioHelper 类通过根据其名称获取正确的 mp3 文件来返回流

var assembly = typeof(StaveApp_v2.App).GetTypeInfo().Assembly;
var stream = assembly.GetManifestResourceStream
(resourcePrefix + $"Audio.{name}.mp3");
return stream;

然后我将流传递给接口

var audioStream = AudioHelper.AudioFile("aften");
DependencyService.Get<IPlayWord>().Play(audioStream);

在 Windows 上,文件按预期播放,但我无法让文件在 android 上播放。我正在使用 AudioTrack 播放声音(声音应该播放 2 次)。该应用程序播放 2 次沙哑的声音,持续时间与文件长度匹配,但我无法正确播放。

这是我使用的代码

 var memoryStream = new MemoryStream();
                audio.CopyTo(memoryStream);
                var audioBytes = memoryStream.ToArray();
                var byteLenght = audioBytes.Length * sizeof(short);
 var audioTrack = new AudioTrack(Android.Media.Stream.Music,
                                                16000,
                                                ChannelOut.Mono,
                                                Encoding.Pcm16bit,
                                                byteLenght,
                                                AudioTrackMode.Static);

                for (int i = 0; i < 2; i++)
                {
                    try
                    {
                        audioTrack.Write(audioBytes, 0, audioBytes.Length);
                        audioTrack.Play();

                    }
                    catch (IllegalStateException illEx)
                    {
                        Log.Debug("StaveApp", $"Unable to initialize audio exception {illEx.Message}");
                    }

                    await Task.Delay(2000);
                    audioTrack.Stop();
                    audioTrack.ReloadStaticData();
                }

                audioTrack.Release();
                audioTrack.Dispose();

我在 logcat 中没有错误,并且

4

0 回答 0