我在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和
中没有错误