您尚未登录。

楼主 #1 2018-10-27 10:01:30

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

QQ20181027095359.png

放狗一搜,会搜索同义词, 估计接近真相了

离线

楼主 #2 2018-10-27 10:02:48

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

https://github.com/torvalds/linux/blob/master/sound/soc/sunxi/sun8i-codec-analog.c

static int sun8i_headphone_amp_event(struct snd_soc_dapm_widget *w,
                     struct snd_kcontrol *k, int event)
{
    struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);

    if (SND_SOC_DAPM_EVENT_ON(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN));
        /*
         * Need a delay to have the amplifier up. 700ms seems the best
         * compromise between the time to let the amplifier up and the
         * time not to feel this delay while playing a sound.
         */
        msleep(700);
    } else if (SND_SOC_DAPM_EVENT_OFF(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          0x0);
    }

    return 0;
}

离线

楼主 #3 2018-10-27 10:32:53

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

700ms 改成 100ms, 试了一下,有一段声音播不出来,如鲠在喉的感觉。

离线

#4 2018-10-27 10:39:31

dbskcnc
会员
注册时间: 2018-10-12
已发帖子: 67
积分: 67

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

v3这么坑啊, 700ms,我还想用它做点音频相关的应用呢, 这样下来s3不能用了

离线

楼主 #5 2018-10-27 10:50:31

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

dbskcnc 说:

v3这么坑啊, 700ms,我还想用它做点音频相关的应用呢, 这样下来s3不能用了

连续播放不会酱紫,如果播放后停3秒(目测), 下一次播放又会延迟700ms, 如果播放间隔不超过3秒不会。
超过3秒,喇叭关闭的时候会播放 啵 的一声, 暂时不知道去哪里关闭,
有网友建议在 啵 一声前通过gpio关闭功放(mute引脚).

离线

#6 2018-10-27 10:58:02

dbskcnc
会员
注册时间: 2018-10-12
已发帖子: 67
积分: 67

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

晕哥 说:
dbskcnc 说:

v3这么坑啊, 700ms,我还想用它做点音频相关的应用呢, 这样下来s3不能用了

连续播放不会酱紫,如果播放后停3秒(目测), 下一次播放又会延迟700ms, 如果播放间隔不超过3秒不会。
超过3秒,喇叭关闭的时候会播放 啵 的一声, 暂时不知道去哪里关闭,
有网友建议在 啵 一声前通过gpio关闭功放(mute引脚).

这样子已经是残废, 看样子还得另找其它芯片了

离线

楼主 #7 2018-10-27 11:24:36

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

dbskcnc 说:
晕哥 说:
dbskcnc 说:

v3这么坑啊, 700ms,我还想用它做点音频相关的应用呢, 这样下来s3不能用了

连续播放不会酱紫,如果播放后停3秒(目测), 下一次播放又会延迟700ms, 如果播放间隔不超过3秒不会。
超过3秒,喇叭关闭的时候会播放 啵 的一声, 暂时不知道去哪里关闭,
有网友建议在 啵 一声前通过gpio关闭功放(mute引脚).

这样子已经是残废, 看样子还得另找其它芯片了

不知道是不是因为要省电,所以播放完之后关闭声卡???需要的时候再打开???
如果能一直开着,不知道能不能解决这个问题, 我们的产品是市电供电,不需要节电.

离线

#8 2018-10-27 14:32:37

dbskcnc
会员
注册时间: 2018-10-12
已发帖子: 67
积分: 67

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

晕哥 说:
dbskcnc 说:
晕哥 说:

连续播放不会酱紫,如果播放后停3秒(目测), 下一次播放又会延迟700ms, 如果播放间隔不超过3秒不会。
超过3秒,喇叭关闭的时候会播放 啵 的一声, 暂时不知道去哪里关闭,
有网友建议在 啵 一声前通过gpio关闭功放(mute引脚).

这样子已经是残废, 看样子还得另找其它芯片了

不知道是不是因为要省电,所以播放完之后关闭声卡???需要的时候再打开???
如果能一直开着,不知道能不能解决这个问题, 我们的产品是市电供电,不需要节电.

能不能验证下这个问题,如果每次播放都要延时700ms, 真的很大问题, 按理不应该这样子才对

离线

楼主 #9 2018-10-27 14:38:14

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

dbskcnc 说:
晕哥 说:
dbskcnc 说:

这样子已经是残废, 看样子还得另找其它芯片了

不知道是不是因为要省电,所以播放完之后关闭声卡???需要的时候再打开???
如果能一直开着,不知道能不能解决这个问题, 我们的产品是市电供电,不需要节电.

能不能验证下这个问题,如果每次播放都要延时700ms, 真的很大问题, 按理不应该这样子才对

验证过了, 如果每次播放间隔时间超过3秒(目测), 那么每次都是延迟 700ms.
上面是 linux4.13的结果,
不知道用bsp linux(3.4) 会不会这样.

离线

#10 2018-10-28 22:34:06

Quotation
会员
注册时间: 2018-10-04
已发帖子: 270
积分: 252.5

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

晕哥 说:
dbskcnc 说:
晕哥 说:

不知道是不是因为要省电,所以播放完之后关闭声卡???需要的时候再打开???
如果能一直开着,不知道能不能解决这个问题, 我们的产品是市电供电,不需要节电.

能不能验证下这个问题,如果每次播放都要延时700ms, 真的很大问题, 按理不应该这样子才对

验证过了, 如果每次播放间隔时间超过3秒(目测), 那么每次都是延迟 700ms.
上面是 linux4.13的结果,
不知道用bsp linux(3.4) 会不会这样.

芯片内部功放启动的时候会相当于把音量“慢慢”调大,避免电平突然改变造成的咔嗒声。所以这个现象应该是驱动层把功放关闭了,再次启用的时候比较慢。
可以改驱动,一直不关闭功放。
或者,在播放完的时候,持续播放一段静音音频。

离线

楼主 #11 2018-10-28 22:37:06

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

Quotation 说:
晕哥 说:
dbskcnc 说:

能不能验证下这个问题,如果每次播放都要延时700ms, 真的很大问题, 按理不应该这样子才对

验证过了, 如果每次播放间隔时间超过3秒(目测), 那么每次都是延迟 700ms.
上面是 linux4.13的结果,
不知道用bsp linux(3.4) 会不会这样.

芯片内部功放启动的时候会相当于把音量“慢慢”调大,避免电平突然改变造成的咔嗒声。所以这个现象应该是驱动层把功放关闭了,再次启用的时候比较慢。
可以改驱动,一直不关闭功放。
或者,在播放完的时候,持续播放一段静音音频。

https://github.com/torvalds/linux/blob/master/sound/soc/sunxi/sun8i-codec-analog.c

我看了一下代码,
没有找到不关功放的寄存器,
或许找的姿势不对.

持续播放一段静音音频这个倒是可以有,
在应用程序端做就可以了。

离线

#12 2018-10-29 00:11:33

Quotation
会员
注册时间: 2018-10-04
已发帖子: 270
积分: 252.5

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

晕哥 说:

https://github.com/torvalds/linux/blob/master/sound/soc/sunxi/sun8i-codec-analog.c

我看了一下代码,
没有找到不关功放的寄存器,
或许找的姿势不对.

持续播放一段静音音频这个倒是可以有,
在应用程序端做就可以了。

貌似就是上边摘的那段代码,SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN,耳机功放使能。
把 else if (SND_SOC_DAPM_EVENT_OFF(event)) 这段 和上面一句 msleep(700) 注释掉试试?

static int sun8i_headphone_amp_event(struct snd_soc_dapm_widget *w,
                     struct snd_kcontrol *k, int event)
{
    struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);

    if (SND_SOC_DAPM_EVENT_ON(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN));
        /*
         * Need a delay to have the amplifier up. 700ms seems the best
         * compromise between the time to let the amplifier up and the
         * time not to feel this delay while playing a sound.
         */
        msleep(700);
    } else if (SND_SOC_DAPM_EVENT_OFF(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          0x0);
    }

    return 0;
}

离线

#13 2018-10-29 09:43:20

dbskcnc
会员
注册时间: 2018-10-12
已发帖子: 67
积分: 67

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

Quotation 说:
晕哥 说:

https://github.com/torvalds/linux/blob/master/sound/soc/sunxi/sun8i-codec-analog.c

我看了一下代码,
没有找到不关功放的寄存器,
或许找的姿势不对.

持续播放一段静音音频这个倒是可以有,
在应用程序端做就可以了。

貌似就是上边摘的那段代码,SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN,耳机功放使能。
把 else if (SND_SOC_DAPM_EVENT_OFF(event)) 这段 和上面一句 msleep(700) 注释掉试试?

static int sun8i_headphone_amp_event(struct snd_soc_dapm_widget *w,
                     struct snd_kcontrol *k, int event)
{
    struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);

    if (SND_SOC_DAPM_EVENT_ON(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN));
        /*
         * Need a delay to have the amplifier up. 700ms seems the best
         * compromise between the time to let the amplifier up and the
         * time not to feel this delay while playing a sound.
         */
        msleep(700);
    } else if (SND_SOC_DAPM_EVENT_OFF(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          0x0);
    }

    return 0;
}

按这个分析那这个就是关
snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          0x0);

这个是开,确实
snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN));

ref: https://patchwork.kernel.org/patch/9546851/

离线

楼主 #14 2018-10-29 09:53:40

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

太好了, 感谢楼上各位, 我一会就试一试, 等会附上结果。

离线

楼主 #15 2018-10-29 11:48:43

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

QQ20181029114558.png


[  356.628202] ZZZZZZZZZZ 111111
[  356.628252] ZZZZZZZZZZ 22222222222


[  362.408079] ZZZZZZZZZZ 111111
[  362.408139] ZZZZZZZZZZ 33333333333333




试了一下 12# 朋友的方法, 把功放关闭的代码屏蔽起来, 然而并没有什么用.

离线

#16 2018-10-30 10:25:02

dbskcnc
会员
注册时间: 2018-10-12
已发帖子: 67
积分: 67

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

可惜了,还得再摸索, 应该是还有此道道, 如何得到官方的指导应该就很快

离线

#17 2018-12-21 16:59:52

lilo
会员
注册时间: 2017-10-15
已发帖子: 215
积分: 215

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

https://github.com/Lichee-Pi/linux/blob/zero-4.13.y/arch/arm/boot/dts/sun8i-v3s.dtsi

codec: codec@01c22c00 {
            #sound-dai-cells = <0>;
            compatible = "allwinner,sun8i-v3s-codec";
            reg = <0x01c22c00 0x400>;
            interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
            clock-names = "apb", "codec";
            resets = <&ccu RST_BUS_CODEC>;
            dmas = <&dma 15>, <&dma 15>;
            dma-names = "rx", "tx";
            allwinner,codec-analog-controls = <&codec_analog>;
            status = "disabled";
        };

        codec_analog: codec-analog@01c23000 {
            compatible = "allwinner,sun8i-v3s-codec-analog";
            reg = <0x01c23000 0x4>;
        };

不明白为什么 模拟音频寄存器有 0x18 个寄存器(1字节), 但是dts 里面只有四个字节?

离线

#18 2018-12-26 20:56:52

superaspen
会员
注册时间: 2018-12-26
已发帖子: 5
积分: 5

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

晕哥,现在v3s能录音了吗?我录到的是杂音

离线

楼主 #19 2018-12-26 21:16:47

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

superaspen 说:

晕哥,现在v3s能录音了吗?我录到的是杂音

项目没有需求所以没有测试,录音本身肯定没有问题,检查软件硬件问题

离线

#20 2019-01-02 11:05:49

kakatoo
会员
注册时间: 2018-10-08
已发帖子: 62
积分: 59

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

额......这个问题有下文不,正要做V3S的音频 应用呢.....

离线

楼主 #21 2019-04-18 22:21:46

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

QQ20190418221944.png

发现关闭播放后约10秒, 自动关闭了寄存器 ? 这个是软件完成还是硬件完成的?

离线

#22 2019-04-22 08:57:00

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

关注,我说为啥播放完音频,会响一声杂音来着,原来都是这

离线

#23 2020-04-21 23:37:13

checkout
会员
注册时间: 2018-11-09
已发帖子: 172
积分: 167

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

会不会是硬件的原因,虽然codec内部是capless headphone ampilifier,已经抵消掉了直流部分。
但是作为强迫症患者,还是觉得HP_L,HP_R加个小的隔直电容会好一点。
licheepi zero电路(hp)
zero-hp.png
codec内部结构图:
zero-codec.png
关于capless headphone ampilifier讲解比较详细的文档

离线

#24 2020-04-21 23:55:58

chendong
会员
注册时间: 2019-07-22
已发帖子: 73
积分: 73

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

直接用耳机输出没这事啊,耳机输出原来3.4 的驱动只要数据不足确实会设置寄存器静音,3.4 里没看到你这个。

离线

#25 2021-06-14 20:50:43

酷酷酷
会员
注册时间: 2021-04-13
已发帖子: 47
积分: 14

Re: V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久,查了几天, 估计接近真相了...

晕哥 说:

太好了, 感谢楼上各位, 我一会就试一试, 等会附上结果。

最后老哥找到真相了吗

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn