我在 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 中没有错误,并且