我需要流式传输在运行时生成的PCM数据.所以我有一个带循环的线程
public voID run() { while(...) { mAudioTrack.write(getPCM(), ...); }}
不幸的是,这不起作用.它似乎不依赖于AudioTrack缓冲区大小.我希望它非常小,以模拟各种低延迟行为(150毫秒),因此用户可以动态地改变getPCM()选择的PCM
int bufferSize = 0.150 * sampleRate * channels * bitsPerSample / 8;
但是,我试图将缓冲区大小增加到100k而没有结果
解决方法:
这是一个适合我的简短示例:
public class Internal extends Activity{ @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); } public voID onPlayClicked(VIEw v) { start(); } public voID onStopClicked(VIEw v) { stop(); } boolean m_stop = false; AudioTrack m_audioTrack; Thread m_noiseThread; Runnable m_noiseGenerator = new Runnable() { public voID run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); /* 8000 bytes per second, 1000 bytes = 125 ms */ byte [] noiseData = new byte[1000]; Random rnd = new Random(); while(!m_stop) { rnd.nextBytes(noiseData); m_audioTrack.write(noiseData, 0, noiseData.length); } } }; voID start() { m_stop = false; /* 8000 bytes per second*/ m_audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCoding_PCM_8BIT, 8000 /* 1 second buffer */, AudioTrack.MODE_STREAM); m_audioTrack.play(); m_noiseThread = new Thread(m_noiseGenerator); m_noiseThread.start(); } voID stop() { m_stop = true; m_audioTrack.stop(); } }
总结 以上是内存溢出为你收集整理的java – 流媒体模式MODE_STREAMING中的AudioTrack全部内容,希望文章能够帮你解决java – 流媒体模式MODE_STREAMING中的AudioTrack所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)