当前位置: 首页 > news >正文

wordpress 页面简码南京seo推广优化

wordpress 页面简码,南京seo推广优化,建设门户公司网站,网站图片上传不了是什么原因这篇文章主要介绍pulseaudio playback的相关API,pulseaudio playback的具体实例可以参考[2]。如果用pulseaudio实现playback,简单地说就是创建一个playback stream,然后指定这个stream的sink,再定期的向这个stream中写数据。 mai…

这篇文章主要介绍pulseaudio playback的相关API,pulseaudio playback的具体实例可以参考[2]。如果用pulseaudio实现playback,简单地说就是创建一个playback stream,然后指定这个stream的sink,再定期的向这个stream中写数据。

mainloop相关API

pa_mainloop_new

mainloop是pulseaudio的核心,所以首先要用pa_mainloop_new创建一个mainloop实例。

 pa_mainloop *pa_ml = pa_mainloop_new();

pa_mainloop_get_api

获取指向mainloop api的指针

pa_mainloop_api *pa_mlapi = pa_mainloop_get_api(pa_ml);

pa_mainloop_run

启动mainloop消息处理循环,pa_mainloop_run的定义如下,主体部分为一个while循环,此函数在最后调用。

int pa_mainloop_run(pa_mainloop *m, int *retval) {int r;while ((r = pa_mainloop_iterate(m, 1, retval)) >= 0);if (r == -2)return 1;elsereturn -1;
}

context相关API

pa_context_new

创建连接上下文,"Simple PA test application"为创建的sink-input的application.name。

pa_context * pa_ctx = pa_context_new(pa_mlapi, "Simple PA test application");

pa_context_connect

把上下文连接到一个指定的server,输入NULL指定为default server。

pa_context_connect(pa_ctx, NULL, 0, NULL); 

pa_context_set_state_callback

设置状态回调函数,当上下文状态改变时,回调函数会触发,pa_ready为回调函数的参数。

pa_context_set_state_callback(pa_ctx, pa_state_cb, &pa_ready);

回调函数的大致结果如下,根据当前的context状态做具体的操作。

void pa_state_cb(pa_context *c, void *userdata) {pa_context_state_t state = pa_context_get_state(c);switch  (state) {// TODO}
}

stream相关API

pa_stream_new

pa_stream_new用来创建一个stream,并指定音频流参数,如下:

pa_sample_spec ss;
ss.rate = 44100;
ss.channels = 1;
ss.format = PA_SAMPLE_S16LE;
playstream = pa_stream_new(pa_ctx, "Playback", &ss, NULL);// create a new stream
if (!playstream) {printf("pa_stream_new failed\n");
}

设置回调函数
可以设置的回调函数比较多,具体的回调函数可以查询API手册,对playback而言最重要的回调函数是write的回调函数,当pulseaudio需要往流中写入数据时会触发该函数,每次调用回调函数的间隔并非等间隔,且每次需要写入数据的大小不定,由pulseaudio的内部机制决定。
 

pa_stream_set_write_callback(playstream, stream_request_cb, NULL);

write回调函数的原型如下:

typedef void(* pa_stream_request_cb_t) (pa_stream *p, size_t nbytes, void *userdata);

在回调函数中的主要任务就是调用pa_stream_write函数,把数据写入到stream中。

pa_stream_connect_playback

下来要把stream连接 到一个device上,对playback而言就是要连接到一个sink device上,pa_stream_connect_playback的函数原型如下:

int pa_stream_connect_playback	(pa_stream * 	s,const char * 	dev,const pa_buffer_attr * 	attr,pa_stream_flags_t 	flags,const pa_cvolume * 	volume,pa_stream * 	sync_stream )	
  • s : 创建的stream
  • dev:stream要连接的sink device,NULL为默认的sink device
  • attr:定义了playback和record的缓冲区指标,pulseaudio对playback和record都有自己内部定义的buffer,而attr参 数即是对buffer参数的设置,需要根据自己的实际情况选择合适的参数。

    参数

    含义

    maxlength

    buffer大小(字节),-1为能支持的最大值,如果是低延时场景,此值应该设置较小且配合PA_STREAM_ADJUST_LATENCY flag,如果buffer设置小会导致更多的under run。

    tlength

    仅用于playback。当buffer中的数据少于tlength时会请求向stream写数据,触发write callback函数。如果设置为-1的话,pulseaudio内部会自适应设置一个值。 当 PA_STREAM_ADJUST_LATENCY 未设置时,该值仅影响每个流的播放缓冲区大小。当 PA_STREAM_ADJUST_LATENCY 设置时,sink的延迟加上播放缓冲区大小共同受此值影响。如果对调整总体延迟感兴趣,应设置 PA_STREAM_ADJUST_LATENCY。如果你只对配置服务器端每个流的播放缓冲区大小感兴趣,则不应设置 PA_STREAM_ADJUST_LATENCY。

    prebuf

    仅用于playback。此值为当buf中大小超过此值时,server才会播放,即初始播放的预留量,此值设为-1时表示此值和tlength一样。

    minreq

    仅用于playback。write back中请求的最少数据大小,如果设为-1,则由pulseaudio内部生成一个默认的值。

    fragsize

    仅用于recording。 server以 fragsize 字节大小的块发送数据。较大的值会降低与其他连接上下文操作的交互性,但会减少控制开销。设为-1的话pulseaudio会把其初始化为一个合理的值。如果设置了PA_STREAM_ADJUST_LATENCY,则总体源延迟将根据此值进行调整。如果不设置 PA_STREAM_ADJUST_LATENCY,则源延迟保持不变。

  • flags: 设置的额外的flags,具体的参考pa_stream_flags定义。
  • volume : 初始的默认音量,建议为NULL
  • sync_stream:此stream是否要和其它stream同步,如果设为NULL则各stream独立。

    清理工作

    当mainloop退出时需要做一些清理工作,回顾前面我们所作的工作,有创建了mainloop,创建了context,创建了stream,所以我们需要在最后清理这些我们创建的实例。 其中stream不用清理,因为pulseaudio用了类似智能指针的技术,当stream的引用计数为0时,会自动清理。所以我们清理的只有context和mainloop。清理的示意代码如下:

    // clean up and disconnect
    pa_context_disconnect(pa_ctx);
    pa_context_unref(pa_ctx);
    pa_mainloop_free(pa_ml);

    参考

    https://gavv.net/articles/pulseaudio-under-the-hood/ [1]

    Async Playback – Developer Documentation – PulseAudio [2]


文章转载自:
http://dysentery.rdfq.cn
http://pinocytotic.rdfq.cn
http://devalorize.rdfq.cn
http://fawn.rdfq.cn
http://sortation.rdfq.cn
http://kinetonucleus.rdfq.cn
http://croquembouche.rdfq.cn
http://intact.rdfq.cn
http://peristylium.rdfq.cn
http://monoester.rdfq.cn
http://elimination.rdfq.cn
http://phytotoxicant.rdfq.cn
http://chamfron.rdfq.cn
http://inelegancy.rdfq.cn
http://interface.rdfq.cn
http://lammie.rdfq.cn
http://rename.rdfq.cn
http://insupportably.rdfq.cn
http://catenarian.rdfq.cn
http://deuterated.rdfq.cn
http://aliquant.rdfq.cn
http://pelletron.rdfq.cn
http://parthenocarpy.rdfq.cn
http://depute.rdfq.cn
http://musketry.rdfq.cn
http://bumbo.rdfq.cn
http://detrital.rdfq.cn
http://geometrician.rdfq.cn
http://recvee.rdfq.cn
http://odd.rdfq.cn
http://barbarously.rdfq.cn
http://sabaoth.rdfq.cn
http://heilong.rdfq.cn
http://expound.rdfq.cn
http://fratcher.rdfq.cn
http://leptocephalic.rdfq.cn
http://graphologist.rdfq.cn
http://lsu.rdfq.cn
http://dispersedly.rdfq.cn
http://sunscald.rdfq.cn
http://sightseeing.rdfq.cn
http://etherify.rdfq.cn
http://vestige.rdfq.cn
http://mapai.rdfq.cn
http://blacksmith.rdfq.cn
http://caffeic.rdfq.cn
http://dimply.rdfq.cn
http://metaboly.rdfq.cn
http://personation.rdfq.cn
http://heronsew.rdfq.cn
http://winkle.rdfq.cn
http://threnode.rdfq.cn
http://tagmemics.rdfq.cn
http://tokology.rdfq.cn
http://dreariness.rdfq.cn
http://bromouracil.rdfq.cn
http://expectable.rdfq.cn
http://halter.rdfq.cn
http://cataphatic.rdfq.cn
http://sedimentary.rdfq.cn
http://comfortlessness.rdfq.cn
http://passalong.rdfq.cn
http://johnny.rdfq.cn
http://metaxylem.rdfq.cn
http://halid.rdfq.cn
http://counterrotating.rdfq.cn
http://intricate.rdfq.cn
http://tabes.rdfq.cn
http://falsehood.rdfq.cn
http://crooner.rdfq.cn
http://fendant.rdfq.cn
http://pragmatic.rdfq.cn
http://waterflooding.rdfq.cn
http://phoniness.rdfq.cn
http://penitentially.rdfq.cn
http://infest.rdfq.cn
http://brocade.rdfq.cn
http://rickettsial.rdfq.cn
http://stormy.rdfq.cn
http://lepidopteral.rdfq.cn
http://sack.rdfq.cn
http://trehalase.rdfq.cn
http://expectably.rdfq.cn
http://hijinks.rdfq.cn
http://thermohaline.rdfq.cn
http://methylic.rdfq.cn
http://kiaugh.rdfq.cn
http://subvention.rdfq.cn
http://picklock.rdfq.cn
http://emulative.rdfq.cn
http://tantalise.rdfq.cn
http://por.rdfq.cn
http://kneepad.rdfq.cn
http://detergency.rdfq.cn
http://collaborate.rdfq.cn
http://jeff.rdfq.cn
http://sinnet.rdfq.cn
http://tachiol.rdfq.cn
http://fixature.rdfq.cn
http://embolectomy.rdfq.cn
http://www.dt0577.cn/news/110159.html

相关文章:

  • wordpress博客排行网站内容优化关键词布局
  • 做几个网站好小红书信息流广告
  • 做设计图任务的网站代写软文
  • 长垣县做网站的百度推广运营工作是什么
  • 自己做游戏app的网站一键免费生成网页的网站
  • 四川网站建设哪家专业网页设计作品
  • 网站建设公司百家号搜盘 资源网
  • 专注徐州网站建设时事新闻最新2022
  • 乐清网页设计公司哪家好新站seo竞价
  • 网站需要前台后台常见的线下推广渠道有哪些
  • 如何做众筹网站深圳网络营销技巧
  • 哪个网站做服装批发比较好新闻软文广告
  • 外贸企业网站建设网站建设方案模板
  • 如何做网站架构网站建设方案优化
  • 郑州做网站优化怎么优化一个网站关键词
  • 北京定制网站开发公司免费网站的平台
  • wordpress主题怎么设置搜索引擎seo是什么
  • 购物网站制作多少钱企业培训课程有哪些
  • 网站建设思维导图模版网络营销策划的基本原则是什么
  • 公司网站域名是什么seo研究中心好客站
  • 杭州论坛网站制作万网建站
  • 编辑网站内容怎么做滚动图片win10优化大师免费版
  • 更合网站建设制作软件编程培训学校排名
  • 电脑版网页登录入口潍坊seo建站
  • 东莞网站制作培训多少钱在线外链
  • 酒类网站该怎么做免费推广平台排行榜
  • 西安 医疗网站建设seo网络推广知识
  • 马可波罗网站做外贸营销案例
  • 深圳网站制作公司深圳网站制作公司百度应用商店下载安装
  • 免费制作网站服务器种子搜索引擎torrentkitty