首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用AudioTrack播放循环音频

使用AudioTrack播放循环音频
EN

Stack Overflow用户
提问于 2016-03-24 09:17:43
回答 3查看 5.8K关注 0票数 19

我有一个功能,我想过渡到使用安卓AudioTrack而不是MediaPlayer,由于MediaPlayer的一些众所周知的bug,例如在循环轨迹之间出现的小间隙。

有人推荐我使用AudioTrack,但在使用中并没有找到很多这样的例子。我确实发现了一个关于AudioTrack的问题,并使用了其中的一些代码来破解一些东西:

public class TestActivity extends Activity implements Runnable {

    Button playButton;
    byte[] byteData = null;
    int bufSize;
    AudioTrack myAT = null;
    Thread playThread = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        playButton = (Button) findViewById(R.id.testButton);

        InputStream inputStream = getResources().openRawResource(R.raw.whitenoise_wav);
        try {
            byteData = new byte[ inputStream.available()];
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            inputStream.read(byteData);
            inputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        initialize();

        playButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                playThread.start();
            }
        });
    }

    void initialize() {

        bufSize = android.media.AudioTrack.getMinBufferSize(44100,
                AudioFormat.CHANNEL_CONFIGURATION_STEREO,
                AudioFormat.ENCODING_PCM_16BIT);

        myAT = new AudioTrack(AudioManager.STREAM_MUSIC,
                44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO,
                AudioFormat.ENCODING_PCM_16BIT, bufSize,
                AudioTrack.MODE_STREAM);
        myAT.setVolume(.2f);

        playThread = new Thread(this);
    }

    public void run() {
        if (myAT != null) {
            myAT.play();
            myAT.setLoopPoints(0, byteData.length, 6);
            myAT.write(byteData, 0, byteData.length);
        }
    }
}

因此,这似乎是播放整个音轨(约1:00分钟),然后停止。现在这里的最终目标是两个有两个独立的音轨同时播放和循环。我目前在/res/raw/目录中有音轨,但如果这样更好的话,我可以将它们移到一个简单的assets文件夹中。我当前的AudioTrack实现是否正确?如果是这样,我如何让它循环?

总结:如何使用AudioTrack播放没有间隙的循环音频

欢迎使用其他方法获取循环音频,例如第三方库。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36191636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档