Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过音频曲目类播放声音时仅获得白噪声_Android_Audio - Fatal编程技术网

Android 通过音频曲目类播放声音时仅获得白噪声

Android 通过音频曲目类播放声音时仅获得白噪声,android,audio,Android,Audio,我想播放带有单声道和立体声效果的mp3。目前我正在研究播放立体声效果,我已经阅读了所有的文档,但我只得到了白噪声。 我的代码是: public class AudioTest extends Activity { byte[] b; public void onCreate(Bundle savedInstanceState) { AndroidAudioDevice device = new AndroidAudioDevice( ); super.onCrea

我想播放带有单声道和立体声效果的mp3。目前我正在研究播放立体声效果,我已经阅读了所有的文档,但我只得到了白噪声。 我的代码是:

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中播放,为什么??