2013-04-19 26 views
0

我想知道Audiotrack是如何工作的,所以我產生長度爲60000的隨機短陣,並試圖AudioTrack發揮它:打隨機短陣中AudioTrack導致什麼

public short[] generatedNoise=new short[60000]; 
for(int i=0;i<=59999;i++){ 
       generatedNoise[i]=(short) random.nextInt(Short.MAX_VALUE + 1); 
      } 
AudioTrack at=new AudioTrack(AudioManager.STREAM_MUSIC, 48000, AudioFormat.CHANNEL_OUT_MONO, 
         AudioFormat.ENCODING_PCM_16BIT, 48000*7 /* 1 second buffer */, 
         AudioTrack.MODE_STREAM); 
       at.write(generatedNoise, 0, generatedNoise.length); 
       at.play();  

但揚聲器輸出什麼也沒有,並且我的控制檯中沒有錯誤消息。我嘗試使用這種方法播放一個WAV文件,它的作品完美,有人可以告訴我的原因嗎?我的目標是從揚聲器輸出一些噪音。

更新:我剛剛生成短陣喜歡用下面的代碼,仍然可以得到不輸出:

  short[] wave=new short[100000]; 

      int i=0; 
      while(i<=99997){ 
       wave[i]=32767; 
       wave[i+1]=0; 
       wave[i+2]=-32767; 
       wave[i+3]=0; 
       i=i+4; 
      } 
+0

你等了多久,看看有沒有發生? 60,000是很多迭代。也許你應該在循環完成後添加一些日誌輸出,以確保它實際上完成。 –

+1

是的,我沒有打印出b4播放 –

回答

0

問題解決了,緩衝區大小我只是把它改爲數組的實際大小,它工作正常。感謝您的關注。

+0

嗨,我可以問你說什麼「數組的實際大小」是?不是你的「generatedNoise.length」的實際大小? – RRTW

+0

我認爲「緩衝區大小」是指AudioTrack構造函數的第5個參數。我這樣做,我仍然無法播放任何聲音。 – Curtis

相關問題