Android 通过音频曲目类播放声音时仅获得白噪声
我想播放带有单声道和立体声效果的mp3。目前我正在研究播放立体声效果,我已经阅读了所有的文档,但我只得到了白噪声。 我的代码是:Android 通过音频曲目类播放声音时仅获得白噪声,android,audio,Android,Audio,我想播放带有单声道和立体声效果的mp3。目前我正在研究播放立体声效果,我已经阅读了所有的文档,但我只得到了白噪声。 我的代码是: public class AudioTest extends Activity { byte[] b; public void onCreate(Bundle savedInstanceState) { AndroidAudioDevice device = new AndroidAudioDevice( ); super.onCrea
public class AudioTest extends Activity
{ byte[] b;
public void onCreate(Bundle savedInstanceState)
{
AndroidAudioDevice device = new AndroidAudioDevice( );
super.onCreate(savedInstanceState);
File f=new File("/sdcard/lepord.mp3");
try {
FileInputStream in=new FileInputStream(f);
int size=in.available();
b=new byte[size];
in.read(b);
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while( true )
{
device.writeSamples(b);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
我的AndroidAudioDevice课程是:
public class AndroidAudioDevice
{
AudioTrack track;
byte[] buffer = new byte[158616];
@SuppressWarnings("deprecation")
public AndroidAudioDevice( )
{
int minSize =AudioTrack.getMinBufferSize( 44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT );
track = new AudioTrack( AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
158616, AudioTrack.MODE_STREAM);
Log.e(""," sizewe are using for track buffer is 158616");
track.setStereoVolume(.6f,.6f);
track.play();
}
public void writeSamples(byte[] b) {
// TODO Auto-generated method stub
Log.e("","bytes to be write in track is "+b.length );
fillBuffer(b);
track.write( buffer, 0, b.length );
}
private void fillBuffer( byte[] samples )
{
Log.e("","track buffer length="+buffer.length+" samle length"+samples.length );
if( buffer.length < samples.length )
buffer = new byte[samples.length];
for( int i = 0; i < samples.length; i++ )
buffer[i] = (byte)(samples[i] * Byte.MAX_VALUE);;
}
}
公共类AndroidAudioDevice
{
音轨;
字节[]缓冲区=新字节[158616];
@抑制警告(“弃用”)
公共场所
{
int minSize=AudioTrack.getMinBufferSize(44100,AudioFormat.CHANNEL\u OUT\u立体声,AudioFormat.ENCODING\u PCM\u 16位);
曲目=新的音频曲目(AudioManager.STREAM_MUSIC,44100,
AudioFormat.CHANNEL\u OUT\u立体声,AudioFormat.ENCODING\u PCM\u 16位,
158616,音轨。模式_流);
Log.e(“,”用于跟踪缓冲区的大小为158616”);
轨道设置立体体积(.6f、.6f);
track.play();
}
public void writeSamples(字节[]b){
//TODO自动生成的方法存根
Log.e(“,”要写入磁道的字节数为“+b.length”);
缓冲区(b);
磁道写入(缓冲区,0,b长度);
}
专用void fillBuffer(字节[]示例)
{
Log.e(“,”track buffer length=“+buffer.length+“samle length”+samples.length”);
if(buffer.length
首先,我没有得到任何声音,而不是白噪音,我只想通过AudioTrack播放声音,然后我将在单声道和立体声音效工作
请帮帮我
提前感谢。*AudioTrack文档“它允许PCM音频流”,mp3不是PCM audioYes。熵编码比特流的特性本质上是一个几乎随机的比特流。然而,
fillBuffer()
看起来也很糟糕。你到底想在这里实现什么?输出格式是立体声16位PCM,但这是Java,您必须一次将其打包到输出缓冲区中一个字节。你认为输入样本是什么类型的?对我来说不像是浮点数。谢谢,我很期待。我正在使用jlayer解码器将mp3解码到pcm,但现在我没有听到任何声音,我是否丢失了什么。请帮助我,我对此感到厌倦。第一:当我将.aiff pcm文件作为输入时(用于检查代码)我找到了声音,但是当我在auditrack中播放一个大的声音文件时,缓冲区之间的声音有一个间隙。请告诉我如何修复这个间隙。第二:在pcm格式的文件变得非常大。你能告诉我如何有效地将文件从mp3转换为pcm吗?我听说过一些本地图书馆,如mpg123,可以实时解码声音。请告诉我如何使用它们。提前谢谢。虽然wave是pcm格式的,但它不在audiotrack中播放,为什么??