我将从REST服务接收非常短的音频数据。它们将以WAV格式到达。然后我需要在Android设备上播放它们。我想在不将数据保存到文件的情况下完成这项工作——这只会让它变得比需要的更复杂。然而,我无法从内存流让它工作。下面是我正在使用的测试代码(使用assets文件夹中的.wav文件):
public void PlayAudioFile(string fileName)
{
bool useMemoryStream = true;
if (useMemoryStream)
{
//this doesn't work
MemoryStream ms = GetMS(fileName);
byte[] msData = new byte[ms.Length];
ms.Position = 0;
ms.Read(msData, 0, (int)ms.Length);
String base64EncodedString = Base64.EncodeToString(msData, Base64Flags.Default);
String url = "data:audio/wav;base64," + base64EncodedString;
MediaPlayer player = new MediaPlayer();
player.Prepared += (s, e) =>
{
player.Start();
};
player.SetDataSource(url);
player.Prepare();
}
else
{
//this works
MediaPlayer player = new MediaPlayer();
var fd = global::Android.App.Application.Context.Assets.OpenFd(fileName);
player.Prepared += (s, e) =>
{
player.Start();
};
player.SetDataSource(fd.FileDescriptor, fd.StartOffset, fd.Length);
player.Prepare();
}
}
private MemoryStream GetMS(string fileName)
{
MemoryStream ms = new MemoryStream();
Context context = Android.App.Application.Context;
using (System.IO.Stream stream = context.Assets.Open(fileName))
{
stream.CopyTo(ms);
}
return ms;
}
当我从文件中播放它时,它是好的,但是内存流方法给了我一个IO异常准备失败错误。我怀疑问题可能是音频/wav值。我找不到任何支持值的留档。当我用MP3文件尝试并将其更改为音频/mp3时,它从内存流中工作正常。任何想法!
你应该使用AudioTrack。
在这种情况下,您可以为wav文件指定音频参数:
然后设置缓冲区大小和传输模式。调用播放。
例子:
int minBufferSize = AudioTrack.getMinBufferSize(16000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
track = new AudioTrack.Builder().setAudioFormat(new AudioFormat.Builder()
.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(44100)
.build())
.setTransferMode(AudioTrack.MODE_STREAM)
.setBufferSizeInBytes(minBufferSize)
.build();
track.play();
如果一切正常。您可以开始将数据写入缓冲区(使用后台线程)。
int size = 512;//(for example)
byte[] veryShortPiecesOfAudioAataFromRESTService = new byte[size];
track.write(veryShortPiecesOfAudioAataFromRESTService, 0, size);
我无法从sd卡播放wav音频文件: 这是我的代码: 文件名路径的格式为:/storage/emulated/0/MyApp/name。wav 这是我得到的错误代码: 我希望你能帮我? 谢谢
我正在读一本书。wav文件在C中,然后我尝试使用一些QT函数播放音频文件。以下是我如何阅读该文件: 所以我的音频文件在里面。的每个元素都是无符号的16位整数。 为了播放声音,我将每个16位无符号整数分成两个字符,然后每隔3毫秒(使用计时器)向音频卡发送256个字符。假设是256个字符的字符数组,我这样做(每隔3毫秒)来播放声音: 此外,定义为: 并且定义为: 并且音频格式设置正确为: 然而,当我试
我想使用android<code>MediaPlayer</code>将文件中的音频播放到手机的耳机(或已连接的耳机)中。我尝试使用本文中建议的MODE_IN_CALL hack-Android-通过耳机播放音频,但没有帮助。该应用程序还具有android.com权限。MODIFY_AUDIO_SETTINGS权限,但对<code>m_amAudioManager的任何调用。无线电话(假) 被忽略
问题内容: 如何在Java应用程序中播放和文件?我正在使用。我尝试在互联网上查找类似以下示例的内容: 但是,这只会播放文件。 问题答案: 如何在Java应用程序中播放和文件?我正在使用。我尝试在互联网上查找类似以下示例的内容: 但是,这只会播放文件。
音乐播放器在没有外置存储器的智能手机上运行,应用程序会崩溃,而在有外置存储器的智能手机上运行。你能告诉我为什么。 Java类 activity XML listitem.xml 错误日志 谢谢你的帮助