Sha*_*onS 20 audio android bytearray pcm audiotrack
我目前有一个字节数组形式的PCM音频.格式是16位小端的签名.我想将它转换为Android上的一些可播放格式,最好是版本3.2或更高版本.有人建议如何做到这一点?我做了一些研究并尝试了下面的内容,但都没有成功.如果有人能提出更好的方法或指出我出错的地方,我们将不胜感激.
我尝试使用正确的音频设置创建AudioFormat,但Android不支持javax.sound.sampled库.
我也尝试将PCM数据写入wave文件,但是我遇到了所有必要的wav头信息.
我也尝试使用Android提供的AudioTrack类来播放PCM数据.但是,我似乎听不到任何声音.这是我的方法:
public void playback(){
try{
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 500000, AudioTrack.MODE_STATIC);
audioTrack.write(audio, 0, 500000);
} catch(Throwable t){
Log.d("Audio","Playback Failed");
}
}
Run Code Online (Sandbox Code Playgroud)
任何建议,将不胜感激.
Jac*_*ano 20
http://developer.android.com/reference/android/media/AudioTrack.html
这堂课看起来就像你需要的一样!
write(byte[] audioData, int offsetInBytes, int sizeInBytes)
Run Code Online (Sandbox Code Playgroud)
将音频数据写入音频硬件以进行播放.
编辑
将您的信息流更改为 AudioManager.STREAM_MUSIC
vit*_*kot 18
问题是您是否想直接在Android应用中播放从某些来源收到的PCM样本,或者您是否需要转换某些外部文件.在第一种情况下,像jack57描述的那样.它非常简单,您甚至可以添加标记以获得精确的计时.
int bufferSize = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioTrack mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
mAudioTrack.play();
Run Code Online (Sandbox Code Playgroud)
然后在一个循环中调用write方法:
mAudioTrack.write(buffer, 0, buffer.length);
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,只需使用一些免费的音频编辑器:http://audacity.sourceforge.net/download/.您可以将PCM样本存储为.txt文件,在编辑器中打开它并以您需要的格式保存...
| 归档时间: |
|
| 查看次数: |
25133 次 |
| 最近记录: |