首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioTrack阻塞函数

AudioTrack阻塞函数
EN

Stack Overflow用户
提问于 2014-07-24 11:58:36
回答 1查看 1K关注 0票数 1

我对Android的AudioTrack功能有一些疑问。我想知道阻塞对AudioTrack到底起到了什么作用。

是写函数阻塞了它正在运行的线程(例如主gui线程),还是它只是阻止AudioTrack播放缓冲区?

什么时候应该调用play函数?在写缓冲区之后还是在它之前?现在我只调用track.play()一次,然后通过代码编写缓冲区,而不调用.

缓冲区大小是否包括左右交错的示例,还是仅表示这两个示例中的任何一个?比如说,我有8192个样本,我的最小缓冲系统大小是15000。那么,我可以将缓冲区大小定义为8192,还是应该是两倍呢?

提前谢谢你的回答。

EN

回答 1

Stack Overflow用户

发布于 2017-01-17 06:00:19

如果您使用的是AudioTrack.MODE_STREAM,您需要首先调用play,然后编写。对于AudioTrack.MODE_STATIC,您可以在播放前调用write (如果您想要再次播放,则重新加载静态数据,或者设置循环的环点)。

至于在编写过程中阻塞,我也遇到了一个问题。写将创建一个单独的线程发送到系统音频,但只要您只是使用一个音频轨道实例应该不会是一个问题。也许在你写作的时候,最好先开门见山。

就缓冲区大小而言,是的,数据包含所有通道,因此,如果您使用的是单一样本/文件,那么样本的长度将被除以2。下面是我为获得缓冲区大小所做的一件事,不过我需要稍后修改它,这取决于我希望示例播放的速度:

代码语言:javascript
复制
int minBufferSize = AudioTrack.getMinBufferSize(sampleRate,
            AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT);

你可能可以把它设置成任何东西,只要它看起来对你来说还行。当我对mp3文件/sample进行编码时(同样,对于MONO),我必须用整个数组/2写入输出PCM数组。

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

https://stackoverflow.com/questions/24933064

复制
相关文章

相似问题

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