java– 流媒体模式MODE_STREAMING中的AudioTrack

java– 流媒体模式MODE_STREAMING中的AudioTrack,第1张

概述我需要流式传输在运行时生成的PCM数据.所以我有一个带循环的线程publicvoidrun(){while(...){mAudioTrack.write(getPCM(),...);}}不幸的是,这不起作用.它似乎不依赖于AudioTrack缓冲区大小.我希望它非常小,以模拟各种低延迟行为(150毫秒),因此用户可以动态地

我需要流式传输在运行时生成的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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1097914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存