Xamarin在Android上形成共享播放Mp3文件

时间:2016-02-25 07:00:08

标签: android xamarin audiotrack shared-project

我在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和

中没有错误

0 个答案:

没有答案