我正在开发一个Android应用,我想播放一些短声音(〜2s).我尝试了Soundpool,但是它真的不适合我,因为它无法检查声音是否已经在播放.因此,我决定使用AudioTrack.
大多数情况下,它运行良好,但是当它开始播放声音时会发出“喀哒”声.
我检查了我的音频文件,它们很干净.
我在流模式下使用音轨.我看到静态模式更适合短音,但经过多次搜索后,我仍然不知道如何使其工作.
我还读到咔嗒声可能是由wav文件的标头引起的,所以如果我使用setPlaybackheadposition(int positionInFrames)函数跳过该标头,声音可能会消失(应该只在静态模式下起作用)
这是我的代码(所以问题是开头的滴答声)
int minBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONfigURATION_MONO, AudioFormat.ENCoding_PCM_16BIT); audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONfigURATION_MONO, AudioFormat.ENCoding_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); audioTrack.play(); int i = 0; int bufferSize = 2048; //don't really kNow which value to put audioTrack.setPlaybackRate(88200); byte [] buffer = new byte[bufferSize];//there we open the wav @R_419_6852@ > inputStream inputStream = getResources().openRawResource(R.raw.abordage); try { while((i = inputStream.read(buffer)) != -1) audioTrack.write(buffer, 0, i); } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); } try { inputStream.close(); } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); }
有没有人有避免这种噪音的解决方案?我尝试了this,有时可以,但并非每次都可以.有人可以告诉我如何在MODE_STATIC中实现音轨吗?
谢谢
解决方法:
音频“爆裂”的常见原因是由于渲染过程未在零交叉点处开始/停止声音(假设-1到1的最小/最大交叉点为0).扬声器或耳塞等换能器处于静止状态(无声音输入),映射到该零交叉点.如果音频渲染过程无法从该零开始/停止到零,则要求换能器执行不可能的 *** 作,即在其最小/最大运动范围内从静止状态瞬时转到某个非零位置(或签证)反之亦然,如果最后出现“流行”字样的话.
总结以上是内存溢出为你收集整理的Android:AudioTrack在开始时会发出咔嗒声全部内容,希望文章能够帮你解决Android:AudioTrack在开始时会发出咔嗒声所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)